## Описание задачи
Используя NestJS необходимо разработать три контроллера прелогин зоны будущего мобильного приложения:
1. **Контроллер авторизации** — для управления процессом авторизации пользователей.
2. **Контроллер каталога товаров** — для работы с каталогами товаров.
3. **Контроллер email** — для отправки email-сообщений.
## Требования к реализации
1. **Технологический стек:**
Backend: NestJS (версия 9+)
База данных: PostgreSQL
2. **Методы контроллеров:**
### Контроллер авторизации:
`POST /auth/v1/login`: Запрос на отправку magic link на email пользователя.
**Пояснение:** Magic link — это уникальная ссылка, отправляемая пользователю на email для упрощения процесса авторизации. Пользователь переходит по ссылке, и система автоматически подтверждает его личность, предоставляя доступ к аккаунту без необходимости ввода пароля. Это повышает удобство и безопасность авторизации.
`POST /auth/v1/session/permanent`: Получение постоянного токена сессии на основании magic link и email.
`POST /auth/v1/session/temporary`: Получение временного токена сессии на основании постоянного токена.
`DELETE /auth/v1/session/permanent`: Завершение сессии пользователя (разлогин).
### Контроллер каталога товаров:
`GET /catalogs/v1`: Получение списка каталогов товаров.
`POST /catalogs/v1`: Создание нового каталога товаров.
### Контроллер email:
`POST /email/v1/send`: Отправка email-сообщения.
3. **Описание методов:**
Подробное описание каждого метода, включая параметры запросов, ответы и возможные коды ошибок, находится в следующих файлах:
`POST-auth-v1-login.md`
`POST-auth-v1-session-permanent.md`
`POST-auth-v1-session-temporary.md`
`DELETE-auth-v1-session-permanent.md`
`GET-catalogs-v1.md`
`POST-catalogs-v1.md`
`POST-email-v1-send.md`
4. **Требования к коду:**
Код должен быть написан с использованием TypeScript.
Использовать подход Dependency Injection для работы с сервисами.
Реализовать обработку ошибок и возвращать соответствующие HTTP-коды.
Логика работы с базой данных должна быть вынесена в отдельные сервисы.
5. **Тестирование:**
Написать unit-тесты для всех методов контроллеров.
Для написания тестов необходимо использовать фреймворк Jest.
Покрытие тестами должно быть не менее 80%.
Проверка покрытия тестами будет выполняться с помощью команды:
```bash
npm test — --coverage
```
6. **Обработка ошибок:**
Общие коды ошибок, используемые в нескольких методах контроллеров, должны быть вынесены в отдельный модуль или сервис для переиспользования.
## Требования к окружению
Приложение должно быть упаковано в Docker-контейнер.
База данных PostgreSQL должна работать в отдельном Docker-контейнере.
Необходимо предоставить `docker-compose.yml` для упрощения запуска и настройки окружения.
## Дополнительная информация
Для понимания, как методы контроллеров будут использоваться, в файле `Прелогин.svg` справочно приведена карта экранов прелогин зоны приложения.
## Дополнительные материалы
1. **Swagger-документация:**
Во вложении предоставлен файл `swagger.yaml`, содержащий описание API.
2. **SQL-запросы:**
Во вложении предоставлен SQL-запрос для создания схемы базы данных в файле `init.sql`
## Приемка работы
1. **Предоставление доступа:**
Я предоставлю сервер, а также логин и пароль для доступа к нему.
2. **Запуск контейнеров:**
По результатам работы разработчик должен развернуть Docker-контейнеры с приложением и базой данных на предоставленном сервере.
Контейнеры должны быть запущены и работать корректно.
3. **Проверка функциональности:**
Приложение должно быть полноценно работоспособным, чтобы я мог приступить к реализации прелогин зоны мобильного приложения.
Все методы контроллеров должны быть протестированы и работать согласно описанию.
4. **Доступ к базе данных:**
После завершения работы разработчик должен предоставить путь, логин и пароль для подключения к базе данных с моего компьютера с использованием DBeaver.
Это необходимо для целей отладки и проверки данных в процессе разработки фронтенда.
5. **Исходный код:**
Передается пулл реквестом в репозиторий заказчика
Разделы:
Заказ
Опубликован:
20.04.2025 | 13:05 [поднят: 20.04.2025 | 13:05] [последние изменения: 20.04.2025 | 20:23]
Заказ находится в архиве