Изначально создано как тестовое задание в компанию Qtim, теперь сильно расширенно и можно использовать как основу для новых сервисов
Во всех контейнерах используется volume для кода или БД
- Nest (официальный image Node.js) - внутри TypeORM, class-validator, swagger, cache-manager, mongoose, cache-manager-redis-store
- Db (официальный image Postrgres) - основная БД для данных
- Cache (официальный image Redis) - для кеширования основных данных по id и хранения конфирмов аутентификации
- Mongo (официальный image MongoDb) - для тренировки работы с этой СУБД, применяется в одном модуле как альтернатива Postres
- миграции Postgres стартуют вместе с Nest, новые миграции вызываются ТОЛЬКО внтури контейнера через команды npm run: "migration:create", "migration:generate", "migration:run", "migration:down"
- запуск юнит-тестов ТОЛЬКО внутри контейнера Nest - npm run test
- запуск e2e-тестов ТОЛЬКО внутри контейнера Nest - npm run test:e2e
- используется passport, passport-jwt, bcrypt
- по почте или логину (loginType 'email' или 'phone')
- перед регистрацией нужно подтвердить email или phone через полученный код. Последовательность:
- запрашиваем код - GET /auth/request_confirm?login=[email protected]&type=email
- подтверждаем код - GET /auth/submit_confirm?login=[email protected]&type=email&code=899456
- регистрируемся - POST /auth/register с телом {"email": "[email protected]","password": "123123"}
- логинимся - POST /auth/login с телом {"login": "[email protected]","type": "email","password": "123123"}
- почтовая учетка для SMTP-отправки
- учетка на SMSC.kz для отправки смс
- 3000 - restAPI (/users, /acticles) + swagger (/api)
- 465 - SMTP-порт для отправки почтовых уведомлений
- 443 - для отправки SMS через api SMSC.kz
- 54320 - доступ к Postgres
- 63790 - доступ к Redis
- 27019 - доступ к Mongo
- redis - использовать несколько истансов с разными БД в корневом app.module
- e2e-тесты для всех модулей
- прогнать autocannon для оценки утечек памяти
- exception-описания - все стринги вынести в отдельный файл
- сброс пароля
- изменение пароля
- tcp-microserices для примера
- RMQ и отдельный TS-контейнер для коммуникации (можно взять из репо test-green)
- сессии или декоратор юзера входящего запроса
- (Done) почтовый конфирм при регистрации
- (Done) смс конфирм при регистрации
- (Done) mongoDB - добавить пару документов на запись и чтение
Разработайте простое REST API с использованием NestJS, которое включает в себя аутентификацию, CRUD операции и кэширование данных. Проект должен использовать PostgreSQL для хранения данных и Redis для кэширования.
-
Создание API для аутентификации:
- Реализуйте регистрацию и аутентификацию пользователей.
- Используйте JWT (JSON Web Tokens) для обработки аутентификации.
-
Интеграция с базой данных PostgreSQL с использованием TypeORM:
- Настройте соединение с базой данных.
- Используйте миграции для управления структурой базы данных.
-
Разработка CRUD API для сущности "Статья":
- Структура "Статьи" должна включать: название, описание, дату публикации, автора.
- Реализуйте операции создания, чтения, обновления и удаления статей.
- Обеспечьте валидацию входных данных.
- Реализуйте пагинацию для запросов списка статей.
- Добавьте возможность фильтрации статей по различным критериям (например, по дате публикации, автору).
- Создание и обновление статей, должны быть закрыты авторизацией
-
Реализация кэширования с использованием Redis:
- Кэшируйте результаты запросов на чтение статей.
- Обеспечьте инвалидацию кэша при обновлении или удалении статей.
-
Тестирование:
- Напишите unit-тесты для проверки бизнес-логики.
- Код должен быть чистым, хорошо структурированным и легко читаемым.
- Обеспечьте комментарии к коду и документацию API (по желанию) с примерами запросов и ответов.