Система каталогизации медиаконтента — бэкенд для отслеживания фильмов, сериалов, аниме, игр, книг и другого цифрового контента с поддержкой полного CRUD.
- 📚 Управление тайтлами (фильмы, сериалы, аниме, игры, книги, другое)
- 🎯 Отслеживание статуса просмотра/прохождения
- ⭐ Избранное и оценки
- 🎮 Франшизы и связывание тайтлов
- 👥 Друзья и социальные функции
- 🔔 Уведомления
- 🔍 Поиск тайтлов, франшиз и пользователей с фильтрацией и сортировкой
- 🏆 Система достижений и уровней профиля
- 💬 Комментарии на профилях
- ⚙ Интеграция с Кинопоиском
| Категория | Технология |
|---|---|
| Backend | NestJS |
| ORM | Prisma |
| Database | PostgreSQL |
| Authentication | JWT (Passport) |
| API Docs | Swagger |
| Validation | class-validator |
| Scheduling | NestJS Schedule |
- Node.js 20.19+ (для поддержки Prisma)
- PostgreSQL 14+
git clone https://github.com/PartyCorn/AllTrack.git
cd AllTracknpm install-
Установите PostgreSQL (версия 14+) и pgAdmin4
-
Создайте локальный сервер и базу данных
-
Создайте таблицы:
npx prisma generate npx prisma db push
-
Настройте подключение в
.env:DATABASE_URL="postgresql://postgres:password@localhost:5432/alltrack" JWT_SECRET=your-secret-key
docker run -d \
--name alltrack-postgres \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=password \
-e POSTGRES_DB=alltrack \
-p 5432:5432 \
postgres:14# Генерация Prisma Client
npx prisma generate
# Создание таблиц в PostgreSQL
npx prisma db push
# Применение миграций Prisma
npx prisma migrate dev --name init
# Заполнение базы достижениями
npm run seed# Режим разработки
npm run start:dev
# Или просто
npm run startПриложение будет доступно по адресу: http://localhost:3000
После запуска документация доступна по адресу: http://localhost:3000/docs
src/
├── auth/ # Аутентификация (JWT)
├── achievements/ # Система достижений
├── comments/ # Комментарии к профилям
├── common/ # Общие утилиты, guards, DTO
├── config/ # Конфигурация
├── franchises/ # Франшизы
├── friends/ # Друзья
├── gamification/ # Геймификация (XP, уровни)
├── kinopoisk/ # Поиск по Кинопоиску
├── notifications/ # Уведомления
├── prisma/ # Сервис Prisma
├── titles/ # Тайтлы (основная сущность)
└── users/ # Пользователи
| Метод | Роут | Описание |
|---|---|---|
| Авторизация | ||
POST |
/auth/register |
Регистрация |
POST |
/auth/login |
Вход |
| Достижения | ||
GET |
/achievements |
Все достижения |
GET |
/achievements/:nickname |
Достижения пользователя |
| Комментарии | ||
POST |
/comments/profile/:profileId |
Оставить комментарий |
GET |
/comments/profile/:profileId |
Комментарии профиля |
PUT |
/comments/:profileId |
Редактировать комментарий |
DELETE |
/comments/:profileId |
Удалить комментарий |
| Франшизы | ||
GET |
/franchises/user/:userId |
Франшизы пользователя |
GET |
/franchises/global/search |
Поиск франшиз среди пользователей |
POST |
/franchises |
Создать франшизу |
GET |
/franchises/:id |
Франшиза по ID |
PUT |
/franchises/:id |
Обновить франшизу |
DELETE |
/franchises/:id |
Удалить франшизу |
POST |
/franchises/:id/titles/:titleId |
Прикрепить тайтл |
DELETE |
/franchises/:id/titles/:titleId |
Открепить тайтл |
| Друзья | ||
GET |
/friends |
Список друзей |
GET |
/friends/requests/incoming |
Входящие заявки |
GET |
/friends/requests/outcoming |
Исходящие заявки |
POST |
/friends/request/:nickname |
Отправить заявку |
PUT |
/friends/accept/:friendId |
Принять заявку |
DELETE |
/friends/:friendId |
Удалить друга или отклонить заявку |
| Кинопоиск | ||
GET |
/kinopoisk/search |
Поиск по названию |
GET |
/kinopoisk/:id/seasons |
Получить сезоны и эпизоды |
| Уведомления | ||
GET |
/notifications/me |
Уведомления |
PUT |
/notifications/me/read |
Прочитать выборочно |
PUT |
/notifications/me/read-all |
Прочитать все |
GET |
/notifications/me/stream |
Real-time SSE |
| Тайтлы | ||
GET |
/titles/search |
Поиск тайтлов с фильтрами |
GET |
/titles/global/search |
Поиск тайтлов среди пользователей |
GET |
/titles/user/:userId |
Тайтлы пользователя |
GET |
/titles/user/:userId/favorites |
Только избранные тайтлы пользователя |
POST |
/titles |
Создать франшизу |
GET |
/titles/:id |
Франшиза по ID |
PUT |
/titles/:id |
Обновить тайтл |
DELETE |
/titles/:id |
Удалить тайтл |
| Пользователи | ||
GET |
/users/search |
Поиск пользователей по никнейму |
GET |
/users/me |
Профиль текущего пользователя |
PUT |
/users/me/edit |
Редактирование профиля |
GET |
/users/:nickname |
Публичный профиль |
GET |
/users/me/export |
Экспорт данных пользователя |
npm run start # Запуск в production
npm run start:dev # Режим разработки (hot-reload)
npm run start:debug # Режим отладки
npm run build # Сборка проекта
npm run prettier # Автоматическое форматирование
npm run lint # Линтинг и исправление
npm run test # Unit тесты
npm run test:cov # Покрытие тестами
npm run test:e2e # E2E тесты
npm run seed # Заполнение БД (achievements)| Переменная | Описание | По умолчанию |
|---|---|---|
DATABASE_URL |
Строка подключения к PostgreSQL | postgresql://... |
JWT_SECRET |
Секретный ключ для JWT | super-secret-key |
Только для просмотра, копирование и использование в своих целях запрещено. Полный текст — в файле LICENSE.
Сделано с ❤️
© Курилов Андрей - 2026