Skip to content

AlmasNurbayev/boilerplate_nest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Группа контейнеров для сохранения и тренировки Nest.js

История

Изначально создано как тестовое задание в компанию 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

TODO:

  • redis - использовать несколько истансов с разными БД в корневом app.module
  • e2e-тесты для всех модулей
  • прогнать autocannon для оценки утечек памяти
  • exception-описания - все стринги вынести в отдельный файл
  • сброс пароля
  • изменение пароля
  • tcp-microserices для примера
  • RMQ и отдельный TS-контейнер для коммуникации (можно взять из репо test-green)
  • сессии или декоратор юзера входящего запроса

TODO выполненные:

  • (Done) почтовый конфирм при регистрации
  • (Done) смс конфирм при регистрации
  • (Done) mongoDB - добавить пару документов на запись и чтение

Исходное задание для Middle NestJS разработчика, откуда начался этот репо

Разработайте простое REST API с использованием NestJS, которое включает в себя аутентификацию, CRUD операции и кэширование данных. Проект должен использовать PostgreSQL для хранения данных и Redis для кэширования.

  1. Создание API для аутентификации:

    • Реализуйте регистрацию и аутентификацию пользователей.
    • Используйте JWT (JSON Web Tokens) для обработки аутентификации.
  2. Интеграция с базой данных PostgreSQL с использованием TypeORM:

    • Настройте соединение с базой данных.
    • Используйте миграции для управления структурой базы данных.
  3. Разработка CRUD API для сущности "Статья":

    • Структура "Статьи" должна включать: название, описание, дату публикации, автора.
    • Реализуйте операции создания, чтения, обновления и удаления статей.
    • Обеспечьте валидацию входных данных.
    • Реализуйте пагинацию для запросов списка статей.
    • Добавьте возможность фильтрации статей по различным критериям (например, по дате публикации, автору).
    • Создание и обновление статей, должны быть закрыты авторизацией
  4. Реализация кэширования с использованием Redis:

    • Кэшируйте результаты запросов на чтение статей.
    • Обеспечьте инвалидацию кэша при обновлении или удалении статей.
  5. Тестирование:

    • Напишите unit-тесты для проверки бизнес-логики.

    Требования к коду и документации:

    • Код должен быть чистым, хорошо структурированным и легко читаемым.
    • Обеспечьте комментарии к коду и документацию API (по желанию) с примерами запросов и ответов.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages