feat: Добавлена базовая структура приложения Home Service с бэкендом на NestJS и фронтендом на Next.js для управления событиями.
This commit is contained in:
245
README.md
245
README.md
@@ -1,2 +1,247 @@
|
||||
# home-service
|
||||
|
||||
Современный монорепозиторий для сервиса домашней автоматизации с бэкендом и админ-панелью.
|
||||
|
||||
## 🚀 Стек технологий
|
||||
|
||||
**Инфраструктура:**
|
||||
- Turborepo - система сборки монорепозитория
|
||||
- pnpm Workspaces - управление зависимостями
|
||||
|
||||
**Backend:**
|
||||
- NestJS 10
|
||||
- PGLite (встроенная PostgreSQL БД)
|
||||
- Drizzle ORM
|
||||
- Zod для валидации
|
||||
- date-fns для работы с датами
|
||||
|
||||
**Admin:**
|
||||
- Next.js 16 (App Router)
|
||||
- React 19
|
||||
- TailwindCSS 4
|
||||
- TypeScript
|
||||
|
||||
## 📁 Структура проекта
|
||||
|
||||
```
|
||||
home-service/
|
||||
├── backend/ # NestJS API (@home-service/backend)
|
||||
│ ├── src/
|
||||
│ │ ├── database/ # Схема БД и модуль
|
||||
│ │ ├── events/ # Модуль событий
|
||||
│ │ ├── utils/ # Утилиты для дат
|
||||
│ │ └── pipes/ # Zod validation pipe
|
||||
│ ├── migrations/ # Миграции БД
|
||||
│ └── data/ # База данных PGLite
|
||||
│
|
||||
├── admin/ # Next.js админка (@home-service/admin)
|
||||
│ └── src/
|
||||
│ ├── app/ # Страницы
|
||||
│ ├── components/ # React компоненты
|
||||
│ └── lib/ # API клиент
|
||||
│
|
||||
├── turbo.json # Конфигурация Turborepo
|
||||
├── pnpm-workspace.yaml # Конфигурация pnpm workspaces
|
||||
└── package.json # Корневой package.json
|
||||
```
|
||||
|
||||
## 🎯 Типы событий
|
||||
|
||||
База данных поддерживает три типа событий. Тип определяется автоматически по заполненным полям:
|
||||
|
||||
1. **recurring** - Обычное повторяющееся событие
|
||||
- Поля: `month`, `day`
|
||||
- Пример: Новый год, 8 марта
|
||||
|
||||
2. **anniversary** - Годовщина с отслеживанием времени
|
||||
- Поля: `month`, `day`, `startYear`
|
||||
- Пример: день рождения, свадьба
|
||||
|
||||
3. **duration** - Продолжительное событие
|
||||
- Поля: `month`, `day`, `startYear`, `endMonth`, `endDay`, `endYear`
|
||||
- Пример: отпуск, командировка
|
||||
|
||||
## ⚡ Быстрый старт
|
||||
|
||||
### Требования
|
||||
- Node.js 20+
|
||||
- pnpm 9+
|
||||
|
||||
### Установка
|
||||
|
||||
```bash
|
||||
# Установить pnpm глобально (если еще не установлен)
|
||||
npm install -g pnpm
|
||||
|
||||
# Установить все зависимости для всех пакетов
|
||||
pnpm install
|
||||
```
|
||||
|
||||
### Разработка
|
||||
|
||||
```bash
|
||||
# Запустить все приложения в режиме разработки
|
||||
pnpm dev
|
||||
|
||||
# Запустить только backend
|
||||
pnpm --filter @home-service/backend dev
|
||||
|
||||
# Запустить только admin
|
||||
pnpm --filter @home-service/admin dev
|
||||
```
|
||||
|
||||
**Адреса:**
|
||||
- Backend API: `http://localhost:3000`
|
||||
- Admin панель: `http://localhost:3001`
|
||||
|
||||
### Сборка
|
||||
|
||||
```bash
|
||||
# Собрать все приложения (с кешированием через Turborepo)
|
||||
pnpm build
|
||||
|
||||
# Собрать только backend
|
||||
pnpm --filter @home-service/backend build
|
||||
|
||||
# Собрать только admin
|
||||
pnpm --filter @home-service/admin build
|
||||
```
|
||||
|
||||
### Другие команды
|
||||
|
||||
```bash
|
||||
# Линтинг всех пакетов
|
||||
pnpm lint
|
||||
|
||||
# Форматирование (для backend с Biome)
|
||||
pnpm format
|
||||
|
||||
# Тестирование
|
||||
pnpm test
|
||||
|
||||
# Очистка всех node_modules и кеша
|
||||
pnpm clean
|
||||
```
|
||||
|
||||
## API Endpoints
|
||||
|
||||
### GET /countdown
|
||||
Главный endpoint для виджета Glance. Возвращает все события с расчетами.
|
||||
|
||||
**Ответ:**
|
||||
```json
|
||||
{
|
||||
"events": [
|
||||
{
|
||||
"id": "uuid",
|
||||
"type": "recurring",
|
||||
"emoji": "🎄",
|
||||
"name": "Новый год",
|
||||
"date": "2026-01-01",
|
||||
"display": "365д 5ч 36м",
|
||||
"days": 365,
|
||||
"hours": 5,
|
||||
"minutes": 36
|
||||
}
|
||||
],
|
||||
"current": {
|
||||
"year": 2025,
|
||||
"month": 11,
|
||||
"day": 29
|
||||
},
|
||||
"months": [...],
|
||||
"timelineGrid": [...]
|
||||
}
|
||||
```
|
||||
|
||||
### GET /api/events
|
||||
Получить все события
|
||||
|
||||
### POST /api/events
|
||||
Создать новое событие
|
||||
|
||||
**Body:**
|
||||
```json
|
||||
{
|
||||
"title": "День рождения",
|
||||
"emoji": "🎂",
|
||||
"month": 6,
|
||||
"day": 15,
|
||||
"startYear": 1990
|
||||
}
|
||||
```
|
||||
|
||||
### DELETE /api/events/:id
|
||||
Удалить событие
|
||||
|
||||
## Конфигурация
|
||||
|
||||
### Backend (.env)
|
||||
```
|
||||
PORT=3000
|
||||
CORS_ORIGIN=http://localhost:3001
|
||||
DATABASE_PATH=./data/events.db
|
||||
```
|
||||
|
||||
### Admin (.env.local)
|
||||
```
|
||||
NEXT_PUBLIC_API_URL=http://localhost:3000
|
||||
```
|
||||
|
||||
## Миграция данных
|
||||
|
||||
Для импорта событий из старого Python бэкенда можно использовать API:
|
||||
|
||||
```bash
|
||||
# Пример импорта события
|
||||
curl -X POST http://localhost:3000/api/events \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"title":"Новый год","emoji":"🎄","month":1,"day":1}'
|
||||
```
|
||||
|
||||
## 🚢 Production
|
||||
|
||||
### Все приложения
|
||||
```bash
|
||||
pnpm build
|
||||
pnpm --filter @home-service/backend start:prod
|
||||
pnpm --filter @home-service/admin start
|
||||
```
|
||||
|
||||
### Backend отдельно
|
||||
```bash
|
||||
pnpm --filter @home-service/backend build
|
||||
pnpm --filter @home-service/backend start:prod
|
||||
```
|
||||
|
||||
### Admin отдельно
|
||||
```bash
|
||||
pnpm --filter @home-service/admin build
|
||||
pnpm --filter @home-service/admin start
|
||||
```
|
||||
|
||||
## 🛠️ Разработка
|
||||
|
||||
### Создание миграции
|
||||
```bash
|
||||
pnpm --filter @home-service/backend exec drizzle-kit generate
|
||||
```
|
||||
|
||||
### Применение миграций
|
||||
Миграции применяются автоматически при старте приложения.
|
||||
|
||||
### Работа с Turborepo
|
||||
|
||||
**Кеширование:**
|
||||
Turborepo автоматически кеширует результаты сборок. При повторном запуске `pnpm build` без изменений файлов, сборка завершится мгновенно.
|
||||
|
||||
**Очистка кеша:**
|
||||
```bash
|
||||
rm -rf .turbo
|
||||
# или
|
||||
pnpm clean
|
||||
```
|
||||
|
||||
## Лицензия
|
||||
|
||||
MIT
|
||||
|
||||
Reference in New Issue
Block a user