Полнофункциональное веб-приложение для отслеживания привычек с backend на NestJS, frontend на Next.js и PostgreSQL базой данных.
- ✅ Регистрация и аутентификация пользователей (JWT)
- ✅ CRUD операции для привычек
- ✅ Отметки выполнения с настроением и заметками
- ✅ Теги, расписания, напоминания
- ✅ Аналитические отчёты и статистика
- ✅ Массовый импорт данных
- ✅ Аудит изменений
- ✅ REST API с Swagger документацией
- Монорепозиторий: pnpm workspaces + Turborepo
- Backend: NestJS + Prisma ORM
- Frontend: Next.js 15 + React 19
- Database: PostgreSQL 16
- Контейнеризация: Docker + Docker Compose
/
├── apps/
│ ├── backend/ # NestJS API
│ └── frontend/ # Next.js приложение
├── packages/
│ └── db/ # Prisma schema + SQL миграции + seed
├── docs/ # Документация
├── docker-compose.yml # Оркестрация сервисов
└── pnpm-workspace.yaml # Конфигурация monorepo
- Node.js >= 20
- pnpm >= 9
- Docker и Docker Compose (для контейнеризации)
# 1. Клонировать репозиторий
git clone <repo-url>
cd CourseProj
# 2. Установить зависимости
pnpm install
# 3. Создать .env файл
cp .env.example .env
# Отредактировать .env и установить JWT_SECRET
# 4. Запустить PostgreSQL через Docker
docker-compose up -d db
# 5. Применить Prisma миграции
pnpm db:generate
pnpm db:migrate
# 6. Применить SQL миграции (триггеры, функции, views, индексы)
pnpm db:sql
# 7. Заполнить БД тестовыми данными
pnpm db:seed
# 8. Запустить backend
pnpm backend:dev
# 9. Запустить frontend (в новом терминале)
pnpm frontend:dev- Frontend: http://localhost:3000
- Backend API: http://localhost:3001
- Swagger Docs: http://localhost:3001/api/docs
# Запустить все сервисы (db + backend + frontend)
docker-compose up -d
# Применить миграции
docker-compose exec backend pnpm db:migrate
docker-compose exec backend pnpm db:sql
docker-compose exec backend pnpm db:seed
# Просмотр логов
docker-compose logs -f
# Остановка
docker-compose down- 13 таблиц с различными типами связей (1:1, 1:N, N:M)
- Каждая таблица имеет >= 5 различных типов данных
- Полное описание:
docs/schema.md
users- пользователиhabits- привычки (800 записей)habit_checkins- отметки выполнения (10000 записей)tags- теги для категоризацииaudit_log- журнал аудита
- Триггеры: аудит изменений + автоматическое обновление агрегатов
- Функции: скалярная (
calc_completion_rate) + табличная (report_user_habits) - Views: 3 представления для аналитики
- Индексы: оптимизация производительности (ускорение в ~23 раза)
pnpm dev # Запустить все в dev режиме (turbo)
pnpm backend:dev # Только backend
pnpm frontend:dev # Только frontendpnpm db:generate # Генерация Prisma Client
pnpm db:migrate # Применить Prisma миграции
pnpm db:sql # Применить SQL миграции (триггеры, функции, views)
pnpm db:seed # Заполнить БД тестовыми данными
pnpm db:studio # Открыть Prisma Studiopnpm build # Собрать все проектыpnpm docker:up # Запустить docker-compose
pnpm docker:down # Остановить docker-compose
pnpm docker:logs # Просмотр логовdocs/requirements-checklist.md- Чеклист требований курсовойdocs/setup-guide.md- Подробное руководство по установкеdocs/schema.md- Схема БД с подсчётом типовdocs/api.md- API документацияdocs/perf.md- Анализ производительности (EXPLAIN ANALYZE)docs/batch-import.md- Массовая загрузка данныхdocs/security-notes.md- Меры безопасностиdocs/frontend-integration.md- Интеграция frontend с backend
- ✅ Параметризованные SQL-запросы (защита от SQL injection)
- ✅ JWT аутентификация
- ✅ Хеширование паролей (bcrypt)
- ✅ Валидация входных данных
- ✅ CORS настроен
- ✅ Аудит всех изменений
Индексы улучшают производительность запросов в среднем в 23 раза:
- Получение привычек пользователя: 20x быстрее
- Отметки за период с JOIN: 32x быстрее
- Агрегация по датам: 17x быстрее
Подробности: docs/perf.md
После выполнения pnpm db:seed:
- 100 пользователей
- 800 привычек
- 10000 отметок выполнения
- 50 тегов
- 1500 связей привычка-тег
- 600 напоминаний
Seed использует фиксированный faker.seed(12345) для воспроизводимости.
- NestJS 10
- Prisma ORM 6
- PostgreSQL 16
- JWT + bcrypt
- Swagger/OpenAPI
- Next.js 15
- React 19
- TypeScript 5
- Tailwind CSS 4
- Radix UI
- Docker & Docker Compose
- pnpm workspaces
- Turborepo
- Biome (linting)
POST /auth/register- РегистрацияPOST /auth/login- ВходGET /auth/me- Текущий пользователь
GET /habits- Список привычекPOST /habits- Создать привычкуGET /habits/:id- Детали привычкиPATCH /habits/:id- Обновить привычкуDELETE /habits/:id- Удалить привычку
POST /checkins- Создать отметкуGET /checkins/habit/:habitId- Отметки привычкиDELETE /checkins/:id- Удалить отметку
GET /reports/habits- Отчёт по привычкамGET /reports/daily-stats- Ежедневная статистикаGET /reports/completion-rate- Процент выполненияGET /reports/streaks- Серии выполнения
POST /batch-import- Массовая загрузкаGET /batch-import/job/:jobId- Статус задачи
Полная документация: http://localhost:3001/api/docs
Проект выполнен в соответствии с требованиями курсовой работы по БД:
- 13 таблиц (>= 9-10)
- Каждая таблица >= 5 разных типов данных
- Связи 1:1, 1:N, N:M
- PK, FK, UNIQUE, CHECK, NOT NULL
- 800 habits, 10000 checkins
- CRUD через ORM + Raw SQL для отчётов
- Триггеры (аудит + агрегаты)
- Функции (скалярная + табличная)
- 3 VIEW
- Индексы + EXPLAIN ANALYZE
- Batch import с логированием
- Swagger документация
- Docker Compose
- Безопасность (параметризация SQL)
MIT
Chesnokov Vladimir
Статус: Проект полностью реализован и готов к защите ✅