Skip to main content

API Overview

NestJS backend — основа всей платформы.

Стек

  • NestJS 11 + TypeScript
  • PostgreSQL 16 через Prisma ORM
  • Redis — сессии, BullMQ очереди
  • BullMQ — фоновая обработка аудио
  • Socket.io — real-time события
  • Swagger — авто-документация на /swagger
  • Sentry — мониторинг ошибок

Структура модулей

apps/api/src/
├── modules/
│ ├── users/ # Пользователи
│ ├── users-auth/ # Auth пользователей (JWT, OAuth, 2FA)
│ ├── artists/ # Артисты + подписки
│ ├── artists-auth/ # Auth артистов (JWT, OAuth, 2FA)
│ ├── tracks/ # Треки, стриминг, like
│ ├── albums/ # Альбомы, like
│ ├── playlists/ # Плейлисты, управление треками
│ ├── search/ # Full-text поиск
│ ├── history/ # История прослушиваний
│ └── tokens/ # JWT токены
├── infra/
│ ├── prisma/ # PrismaService + геттеры моделей
│ ├── mail/ # SMTP (сброс пароля)
│ └── seeds/ # Сидинг БД
└── common/
├── config/ # Типизированный ConfigService
├── filters/ # HttpExceptionFilter + Sentry
└── middleware/ # PathTraversalMiddleware

Быстрый старт

# Инфраструктура
docker compose -f infra/docker-compose.dev.yaml up -d

# Миграции + сидинг
pnpm --filter @bitrate/api db:migration:start
pnpm --filter @bitrate/api db:seed

# Dev-сервер
pnpm --filter @bitrate/api start:dev

API доступен на http://localhost:3000, Swagger — на http://localhost:3000/swagger.

Версионирование

Все маршруты имеют префикс /api/v1/. Версия передаётся через URI.

http://localhost:3000/api/v1/tracks
http://localhost:3000/api/v1/artists

Аутентификация

Используются HttpOnly cookies с JWT-токенами. Два независимых auth-потока:

  • users-auth — для слушателей (/api/v1/users/auth/*)
  • artists-auth — для артистов (/api/v1/artists/auth/*)

Подробнее: Authentication

Статические файлы

Раздаются через ServeStaticModule по пути /static/*:

storage/public/
├── tracks/ # Аудио файлы (.opus, HLS сегменты)
├── covers/ # Обложки треков и альбомов
└── avatars/ # Аватары пользователей и артистов

Обработка ошибок

Глобальный HttpExceptionFilter форматирует все ошибки в единый формат и отправляет их в Sentry:

{
"statusCode": 404,
"error": "Not Found",
"message": "Track not found",
"timestamp": "2026-06-21T10:00:00.000Z",
"path": "/api/v1/tracks/unknown-id"
}

Модули — справочник

МодульМаршрутОписание
users-auth/api/v1/users/authРегистрация, вход, OAuth, 2FA, сброс пароля
artists-auth/api/v1/artists/authТо же для артистов
users/api/v1/usersПрофиль пользователя
artists/api/v1/artistsСтраницы артистов, подписки
tracks/api/v1/tracksЗагрузка, HLS-стриминг, like
albums/api/v1/albumsАльбомы, like
playlists/api/v1/playlistsПлейлисты, треки в плейлисте
search/api/v1/searchFull-text поиск
history/api/v1/historyИстория прослушиваний