Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Habit Tracker - Трекер привычек

Полнофункциональное веб-приложение для отслеживания привычек с 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

🚀 Quick Start

Требования

  • 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

Доступ к приложению

🐳 Docker

Запуск всего стека

# Запустить все сервисы (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 - журнал аудита

SQL объекты

  • Триггеры: аудит изменений + автоматическое обновление агрегатов
  • Функции: скалярная (calc_completion_rate) + табличная (report_user_habits)
  • Views: 3 представления для аналитики
  • Индексы: оптимизация производительности (ускорение в ~23 раза)

🔧 Команды

Разработка

pnpm dev                 # Запустить все в dev режиме (turbo)
pnpm backend:dev         # Только backend
pnpm frontend:dev        # Только frontend

База данных

pnpm db:generate         # Генерация Prisma Client
pnpm db:migrate          # Применить Prisma миграции
pnpm db:sql              # Применить SQL миграции (триггеры, функции, views)
pnpm db:seed             # Заполнить БД тестовыми данными
pnpm db:studio           # Открыть Prisma Studio

Сборка

pnpm build               # Собрать все проекты

Docker

pnpm docker:up           # Запустить docker-compose
pnpm docker:down         # Остановить docker-compose
pnpm docker:logs         # Просмотр логов

📚 Документация

🔐 Безопасность

  • ✅ Параметризованные 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) для воспроизводимости.

🛠️ Технологии

Backend

  • NestJS 10
  • Prisma ORM 6
  • PostgreSQL 16
  • JWT + bcrypt
  • Swagger/OpenAPI

Frontend

  • Next.js 15
  • React 19
  • TypeScript 5
  • Tailwind CSS 4
  • Radix UI

DevOps

  • Docker & Docker Compose
  • pnpm workspaces
  • Turborepo
  • Biome (linting)

📝 API Endpoints

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

  • 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 - Серии выполнения

Batch Import

  • 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


Статус: Проект полностью реализован и готов к защите ✅

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages