6.0 KiB
6.0 KiB
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