Backend API на NestJS для dating-приложения. Проект предоставляет HTTP API для авторизации по OTP, работы с профилем пользователя, мэтчами, диалогами, загрузкой фото и справочниками.
NestJSTypeScriptMongoDB+MongooseRedisJWT+PassportSocket.IOSwagger / OpenAPIJest+Supertest
auth— OTP, access token, refresh token через cookieusers— профиль, поиск, совместимостьmatch— лайки и мэтчиdialogs— диалоги и сообщенияupload— загрузка, удаление и сортировка фотоreference— города, интересы, цели и lifestyle-справочникиseed— изолированное сидирование справочников через CLIcore— общие фильтры, interceptor, pipe, decorators
npm installПроект использует следующие переменные:
MONGODB_URI=mongodb://127.0.0.1:27017/datingapp
REDIS_URL=redis://127.0.0.1:6379
JWT_SECRET=secret
NODE_ENV=developmentЕсли переменные не заданы, часть значений берётся из дефолтов в коде.
npm run start:devAPI по умолчанию поднимается на:
http://localhost:8000
После запуска приложения доступны:
- Swagger UI:
http://localhost:8000/docs - OpenAPI JSON:
http://localhost:8000/docs-json
Импорт в Postman:
- Открой
Postman - Нажми
Import - Выбери
Link - Вставь
http://localhost:8000/docs-json
Postman создаст коллекцию на основе актуальной OpenAPI-схемы.
npm run start:dev # запуск в watch-режиме
npm run build # сборка проекта
npm run start:prod # запуск собранной версии
npm run test # unit/integration tests
npm run test:e2e # e2e tests
npm run test:cov # coverage
npm run lint # eslint
npm run format # prettier
npm run seed # изолированное заполнение базы справочниками- Все HTTP-ответы проходят через глобальный
ResponseInterceptor - Ошибки нормализуются через глобальные exception filters
- Валидация входных данных выполняется глобальным
ValidationPipe - Защищённые маршруты работают через
JwtAuthGuard - Refresh token хранится в
httpOnly cookie - Загруженные файлы раздаются статически через
/uploads - Сидирование не проброшено в публичное API и запускается только отдельной CLI-командой
В проекте есть e2e-покрытие HTTP endpoint'ов через Jest и Supertest.
Запуск:
npm run test:e2e -- --runInBandsrc/
auth/
users/
match/
dialog/
upload/
reference/
seed/
core/