Files
home-service/README.md

6.0 KiB
Raw Blame History

home-service

Современный монорепозиторий для домашнего сервиса с бэкендом и фронтенд-панелью.

🚀 Стек технологий

Инфраструктура:

  • Turborepo - система сборки монорепозитория
  • pnpm Workspaces - управление зависимостями
  • Docker - контейнеризация

Backend:

  • NestJS 11
  • PGLite (встроенная PostgreSQL БД)
  • Drizzle ORM
  • Zod для валидации
  • Swagger для API документации

Frontend:

  • Next.js 16 (App Router)
  • React 19
  • TailwindCSS 4
  • TypeScript

Contracts:

  • Shared Zod схемы между backend и frontend

📁 Структура проекта

home-service/
├── backend/          # NestJS API (@home-service/backend)
│   ├── src/
│   │   ├── database/      # Схема БД и модуль
│   │   ├── wishlist/      # Модуль списка желаний
│   │   └── common/        # Общие утилиты
│   ├── migrations/        # Миграции БД
│   ├── data/             # База данных PGLite
│   └── Dockerfile        # Docker образ
│
├── frontend/         # Next.js панель (@home-service/frontend)
│   ├── src/
│   │   ├── app/          # Страницы (wishlist, admin)
│   │   ├── components/   # React компоненты
│   │   └── lib/          # API клиент
│   ├── templates/        # HTML мокапы
│   └── Dockerfile        # Docker образ
│
├── contracts/        # Shared типы (@home-service/contracts)
│   └── src/              # Zod схемы
│
├── docker-compose.yml   # Docker Compose
├── turbo.json           # Конфигурация Turborepo
├── pnpm-workspace.yaml  # Конфигурация pnpm workspaces
└── package.json         # Корневой package.json

Быстрый старт

Требования

  • Node.js 20+
  • pnpm 9+

Установка

# Установить pnpm глобально (если еще не установлен)
npm install -g pnpm

# Установить все зависимости для всех пакетов
pnpm install

Разработка

# Запустить все приложения в режиме разработки
pnpm dev

# Запустить только backend
pnpm --filter @home-service/backend dev

# Запустить только frontend
pnpm --filter @home-service/frontend dev

Адреса:

  • Backend API: http://localhost:3000
  • Frontend панель: http://localhost:3001
  • Swagger: http://localhost:3000/api-docs

Сборка

# Собрать все приложения (с кешированием через Turborepo)
pnpm build

# Собрать только backend
pnpm --filter @home-service/backend build

# Собрать только frontend
pnpm --filter @home-service/frontend build

Другие команды

# Линтинг всех пакетов
pnpm lint

# Форматирование (для backend с Biome)
pnpm format

# Очистка всех node_modules и кеша
pnpm clean

🐳 Docker

Быстрый запуск

# Собрать и запустить все сервисы
docker-compose up -d

# Посмотреть логи
docker-compose logs -f

# Остановить
docker-compose down

Сборка образов отдельно

# Backend
docker build -f backend/Dockerfile -t home-service-backend .

# Frontend
docker build -f frontend/Dockerfile -t home-service-frontend .

Docker адреса:

  • Backend API: http://localhost:3000
  • Frontend панель: http://localhost:3001

Volumes

  • backend-data - хранит данные PGLite базы данных

API Endpoints

Wishlist API

Метод Endpoint Описание
GET /wishlist Получить все элементы
GET /wishlist/:id Получить элемент по ID
POST /wishlist Создать новый элемент
PUT /wishlist/:id Обновить элемент
DELETE /wishlist/:id Удалить элемент

Создание элемента

curl -X POST http://localhost:3000/wishlist \
  -H "Content-Type: application/json" \
  -d '{
    "title": "PlayStation 5",
    "price": 49999,
    "description": "Игровая консоль",
    "links": [{"title": "Купить", "url": "https://store.example.com", "isPrimary": true}],
    "images": [{"url": "https://example.com/ps5.jpg", "isMain": true}]
  }'

Swagger

Полная документация API доступна по адресу:

http://localhost:3000/api-docs

Конфигурация

Backend (.env)

PORT=3000
CORS_ORIGIN=http://localhost:3001
DATABASE_PATH=./data/home-service.db

Frontend (.env.local)

NEXT_PUBLIC_API_URL=http://localhost:3000

🛠️ Разработка

Создание миграции

pnpm --filter @home-service/backend db:generate

Применение миграций

Миграции применяются автоматически при старте приложения.

Работа с Turborepo

Кеширование: Turborepo автоматически кеширует результаты сборок. При повторном запуске pnpm build без изменений файлов, сборка завершится мгновенно.

Очистка кеша:

rm -rf .turbo
# или
pnpm clean

🚢 Production

Все приложения

pnpm build
pnpm --filter @home-service/backend start:prod
pnpm --filter @home-service/frontend start

С Docker (рекомендуется)

docker-compose up -d

Лицензия

MIT