Система каталогизации медиаконтента — бэкенд для отслеживания фильмов, сериалов, аниме, игр, книг и другого цифрового контента с поддержкой полного 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