12. Бизнес логика приложения
1. Техническое задание 1
Только совершеннолетние пользователи могут добавлять книги в книжную лавку, у которых возрастное ограничение больше 18
Реализуем эту логику в методе BooksService.createBook(dto: CreateBookDto):
- Добавим недостающий аргумент в метод
- Запросим пользователя, который делает запрос на создание книги, чтобы проверить его возраст
- Инжектируем нужные зависимости
- Проверяем возраст и возрастные ограничения у книги - если ОК - создаем книгу, если нет -
ForbiddenException('too yang, Bro') - Изменим настройку
{ nullable: true }колонкиownerIdсущностиBook, теперь анонимный пользователь не может добавлять книги и мы будем хранить в "книге"ownerId - Делаем необходимые правки в контроллере
- Проверяем на фронте
1.1 Инкапсуляция бизнес-логики в методах сущности
Обратим внимание, что в текущей реализации метод сервиса одновременно работает с другими слоями (например, репозиториями) и содержит бизнес-логику приложения. Это приводит к тому, что для тестирования бизнес-логики нам приходится интегрировать в тесты базу данных, что влечет за собой дополнительные настройки и связывает тесты с БД. Однако тестировать работу ORM в тестах, предназначенных для проверки бизнес-логики, нецелесообразно.
Чтобы улучшить структуру кода, декомпозируем его: вынесем логику создания книги в метод модели
Book. Это доменная сущность, и она должна управлять процессом своего создания. Для этого
оптимально использовать статический метод, поскольку он принадлежит классу. Метод экземпляра
здесь не подойдет, так как экземпляр еще не существует, а нам нужно инкапсулировать логику создания
именно на уровне класса.
...



