Skip to content

Repository files navigation

NestJSPrismaPostgreSQLTypeScript

AllTrack

Система каталогизации медиаконтента — бэкенд для отслеживания фильмов, сериалов, аниме, игр, книг и другого цифрового контента с поддержкой полного CRUD.

License


Возможности

  • 📚 Управление тайтлами (фильмы, сериалы, аниме, игры, книги, другое)
  • 🎯 Отслеживание статуса просмотра/прохождения
  • ⭐ Избранное и оценки
  • 🎮 Франшизы и связывание тайтлов
  • 👥 Друзья и социальные функции
  • 🔔 Уведомления
  • 🔍 Поиск тайтлов, франшиз и пользователей с фильтрацией и сортировкой
  • 🏆 Система достижений и уровней профиля
  • 💬 Комментарии на профилях
  • ⚙ Интеграция с Кинопоиском

Технологический стек

КатегорияТехнология
BackendNestJS
ORMPrisma
DatabasePostgreSQL
AuthenticationJWT (Passport)
API DocsSwagger
Validationclass-validator
SchedulingNestJS Schedule

Требования

  • Node.js 20.19+ (для поддержки Prisma)
  • PostgreSQL 14+

Установка и запуск

1. Клонирование репозитория

git clone https://github.com/PartyCorn/AllTrack.git
cd AllTrack

2. Установка зависимостей

npm install

3. Настройка базы данных PostgreSQL

Способ А: Локальный PostgreSQL

  1. Установите PostgreSQL (версия 14+) и pgAdmin4

  2. Создайте локальный сервер и базу данных

  3. Создайте таблицы:

    npx prisma generate
    npx prisma db push
  4. Настройте подключение в .env:

    DATABASE_URL="postgresql://postgres:password@localhost:5432/alltrack"JWT_SECRET=your-secret-key

Способ Б: Docker

docker run -d \
--name alltrack-postgres \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=password \
-e POSTGRES_DB=alltrack \
-p 5432:5432 \
postgres:14

4. Применение миграций и генерация клиента

# Генерация Prisma Client
npx prisma generate
# Создание таблиц в PostgreSQL
npx prisma db push
# Применение миграций Prisma
npx prisma migrate dev --name init
# Заполнение базы достижениями
npm run seed

5. Запуск приложения

# Режим разработки
npm run start:dev
# Или просто
npm run start

Приложение будет доступно по адресу: http://localhost:3000


API документация

После запуска документация доступна по адресу: 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/streamReal-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-скрипты

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Строка подключения к PostgreSQLpostgresql://...
JWT_SECRETСекретный ключ для JWTsuper-secret-key

Лицензия

Только для просмотра, копирование и использование в своих целях запрещено. Полный текст — в файле LICENSE.


Сделано с ❤️
© Курилов Андрей - 2026

About

Проект по ознакомительной практики в вузе 1 курс по теме "Система каталогизации медиаконтента". Только ознакомительный просмотр.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages