Обновлен план MVP

This commit is contained in:
2025-08-27 14:26:10 +04:00
parent f663ff286d
commit b0a4f13940
3 changed files with 40 additions and 272 deletions

View File

@@ -40,10 +40,9 @@
## 🛠️ Технологический стек ## 🛠️ Технологический стек
**Core Service:** Go (Gin) + PostgreSQL + JWT auth + gRPC **Core Service:** Go (Gin) + PostgreSQL + JWT auth (REST)
**Document Service:** Python (FastAPI) + Redis + Document libraries **Frontend:** Angular PWA (мобильный) + Material UI + генерация PDF (pdfmake/jsPDF)
**Frontend:** Angular PWA (мобильный) + Material UI **Инфраструктура:** Docker + Docker Compose + HTTPS
**Инфраструктура:** Docker + gRPC + Redis + HTTPS
--- ---
@@ -57,40 +56,34 @@
```mermaid ```mermaid
gantt gantt
title MVP План разработки title MVP План разработки (упрощённый)
dateFormat YYYY-MM-DD dateFormat YYYY-MM-DD
section Фундамент section Фундамент
Инфраструктура :fund, 2024-01-01, 7d Инфраструктура :fund, 2024-01-01, 7d
Аутентификация :auth, after fund, 7d Аутентификация :auth, after fund, 7d
gRPC настройка :grpc, after auth, 7d
section Document Service
Python сервис :python, after grpc, 7d
PDF генерация :pdf, after python, 7d
section Шаблоны + QR section Шаблоны + QR
Шаблоны помещений :templates, after pdf, 7d Шаблоны помещений :templates, after auth, 7d
QR генерация :qr, after templates, 7d QR генерация (frontend PDF) :qr, after templates, 7d
section Angular PWA section Angular PWA
Фронтенд :frontend, after qr, 7d Фронтенд :frontend, after qr, 7d
QR сканер :scanner, after frontend, 7d QR сканер :scanner, after frontend, 7d
section Операции section Операции
Управление товарами :items, after scanner, 7d Управление товарами :items, after scanner, 7d
Поиск и размещение :operations, after items, 7d Поиск и размещение :operations, after items, 7d
section Тестирование section Тестирование
Пилот :pilot, after operations, 7d Пилот :pilot, after operations, 7d
``` ```
### Детализация этапов: ### Детализация этапов:
1. **Фундамент** (2 недели) - инфраструктура, аутентификация, gRPC 1. Фундамент (2 недели) инфраструктура, аутентификация, REST API
2. **Document Service** (2 недели) - Python сервис, PDF генерация 2. Шаблоны + QR (2 недели) — генерация мест и кодов, печать PDF на фронтенде
3. **Шаблоны + QR** (2 недели) - генерация мест и кодов 3. Angular PWA (2 недели) — фронтенд и сканирование
4. **Angular PWA** (2 недели) - фронтенд и сканирование 4. Базовые операции (2 недели) — управление товарами и размещение/поиск
5. **Базовые операции** (2 недели) - управление товарами 5. Тестирование (1 неделя) — пилот с реальными пользователями
6. **Тестирование** (1 неделя) - пилот с реальными пользователями
--- ---

View File

@@ -9,27 +9,21 @@ graph TB
B[QR Scanner] B[QR Scanner]
end end
subgraph "Backend Services" subgraph "Backend"
C[Go Core Service] C[Go Core Service (REST)]
D[Python Document Service]
end end
subgraph "Infrastructure" subgraph "Infrastructure"
E[PostgreSQL] E[PostgreSQL]
F[Redis Cache]
end end
A <--> C A <--> C
B --> A B --> A
C <--> E C <--> E
C <--> D
D <--> F
style A fill:#ff9999 style A fill:#ff9999
style C fill:#99ccff style C fill:#99ccff
style D fill:#99ff99
style E fill:#ffcc99 style E fill:#ffcc99
style F fill:#cc99ff
``` ```
--- ---
@@ -37,36 +31,25 @@ graph TB
## 🛠️ Технологический стек ## 🛠️ Технологический стек
### Backend (Go) ### Backend (Go)
- **Framework:** Gin (легкий и быстрый) - Framework: Gin (легкий и быстрый)
- **Database:** PostgreSQL - Database: PostgreSQL
- **Authentication:** JWT - Authentication: JWT
- **Validation:** validator - Validation: validator
- **Inter-service Communication:** gRPC + Protocol Buffers - API: REST + OpenAPI (Swagger)
- **API Documentation:** Swagger/OpenAPI
### Frontend (Angular PWA) ### Frontend (Angular PWA)
- **Framework:** Angular 17+ - Framework: Angular 17+
- **Build Tool:** Angular CLI - PWA: @angular/service-worker (только кэш статики)
- **PWA:** @angular/service-worker - QR Scanner: @zxing/ngx-scanner
- **QR Scanner:** @zxing/ngx-scanner - UI: Angular Material + Tailwind CSS
- **UI:** Angular Material + Tailwind CSS - State Management: локальные сервисы (без NgRx на MVP)
- **State Management:** NgRx (для сложной логики)
### Document Service (Python)
- **Framework:** FastAPI (быстрый, автоматическая документация)
- **PDF Generation:** reportlab + weasyprint
- **Office Documents:** python-docx, openpyxl
- **Templates:** Jinja2
- **Caching:** Redis
- **Inter-service Communication:** gRPC
### Infrastructure ### Infrastructure
- **Containerization:** Docker - Containerization: Docker
- **Orchestration:** Docker Compose - Orchestration: Docker Compose
- **Inter-service Communication:** gRPC + Protocol Buffers - Web server (опционально): Nginx для фронтенда
- **API Gateway:** Traefik (опционально) - Security: HTTPS, CORS, JWT
- **Security:** HTTPS, CORS, JWT - Monitoring: структурированное логирование (метрики PostMVP)
- **Monitoring:** Structured logging + Prometheus
--- ---
@@ -197,7 +180,6 @@ CREATE TABLE item_placements (
# Аутентификация # Аутентификация
POST /api/auth/login POST /api/auth/login
POST /api/auth/register POST /api/auth/register
POST /api/auth/refresh
# Организации # Организации
GET /api/organizations/:id GET /api/organizations/:id
@@ -227,168 +209,12 @@ GET /api/templates
POST /api/templates/:id/apply POST /api/templates/:id/apply
``` ```
### Document Service (Python) - REST API
```
# Документы
POST /api/documents/generate-pdf
POST /api/documents/generate-excel
GET /api/documents/:id/status
GET /api/documents/:id/download
# Шаблоны документов
GET /api/templates
POST /api/templates
PUT /api/templates/:id
DELETE /api/templates/:id
```
## 🔄 Межсервисная коммуникация
### gRPC Services
#### Core Service → Document Service
```protobuf
service DocumentService {
rpc GenerateQRCode(QRCodeRequest) returns (QRCodeResponse);
rpc GenerateReport(ReportRequest) returns (ReportResponse);
rpc GetDocumentStatus(StatusRequest) returns (StatusResponse);
}
```
#### Document Service → Core Service
```protobuf
service CoreService {
rpc GetLocationData(LocationRequest) returns (LocationResponse);
rpc GetItemData(ItemRequest) returns (ItemResponse);
rpc ValidateTemplate(TemplateRequest) returns (TemplateResponse);
}
```
### События (Event-Driven)
```protobuf
message DocumentEvent {
string event_type; // "qr_generated", "report_ready"
string document_id;
string organization_id;
google.protobuf.Timestamp timestamp;
}
```
## 🔄 Диаграммы последовательности
### Генерация QR-кода
```mermaid
sequenceDiagram
participant F as Frontend
participant C as Core Service
participant D as Document Service
participant R as Redis
F->>C: POST /api/locations/:id/qr-code
C->>D: gRPC GenerateQRCode()
D->>D: Generate QR code
D->>R: Cache document
D->>C: Return document URL
C->>F: Return QR code data
```
### Размещение товара
```mermaid
sequenceDiagram
participant U as User
participant F as Frontend
participant C as Core Service
participant DB as Database
U->>F: Scan QR code
F->>F: Decode location ID
F->>C: GET /api/locations/:id
C->>DB: Query location
DB->>C: Return location data
C->>F: Return location info
F->>U: Show location details
U->>F: Select item & quantity
F->>C: POST /api/operations/place-item
C->>DB: Create placement
DB->>C: Confirm placement
C->>F: Return success
F->>U: Show confirmation
```
### Поиск товара
```mermaid
sequenceDiagram
participant U as User
participant F as Frontend
participant C as Core Service
participant R as Redis
participant DB as Database
U->>F: Search query
F->>C: GET /api/operations/search?q=query
C->>R: Check cache
alt Cache hit
R->>C: Return cached results
else Cache miss
C->>DB: Search items & locations
DB->>C: Return results
C->>R: Cache results
end
C->>F: Return search results
F->>U: Display results
```
---
## 🔐 Безопасность
### Аутентификация
- JWT токены с refresh механизмом
- Organization-scope на всех запросах
- Middleware для проверки прав доступа
### Валидация данных
- Входная валидация всех параметров
- SQL injection protection через prepared statements
- XSS protection в frontend
### HTTPS
- Обязательное использование HTTPS
- Secure cookies для JWT
- CORS настройки для PWA
---
## 📱 PWA Особенности
### Service Worker
- Кэширование статических ресурсов
- Offline fallback для базовых функций
- Background sync для операций
### QR Scanner
- Использование WebRTC для доступа к камере
- Real-time распознавание QR-кодов
- Fallback на ручной ввод
### Установка
- Manifest для установки как нативное приложение
- Splash screen и иконки
- Автоматические обновления
---
## 🚀 Развертывание ## 🚀 Развертывание
### Docker Compose ### Docker Compose (MVP)
```yaml ```yaml
version: '3.8' version: '3.8'
services: services:
# Core Service (Go)
core-service: core-service:
build: ./core-service build: ./core-service
ports: ports:
@@ -396,23 +222,9 @@ services:
environment: environment:
- DB_HOST=postgres - DB_HOST=postgres
- JWT_SECRET=your-secret - JWT_SECRET=your-secret
- DOC_SERVICE_URL=http://doc-service:8000
depends_on: depends_on:
- postgres - postgres
- redis
# Document Service (Python)
doc-service:
build: ./doc-service
ports:
- "8000:8000"
environment:
- REDIS_URL=redis://redis:6379
- CORE_SERVICE_URL=http://core-service:8080
depends_on:
- redis
# Frontend (Angular)
frontend: frontend:
build: ./frontend build: ./frontend
ports: ports:
@@ -420,7 +232,6 @@ services:
depends_on: depends_on:
- core-service - core-service
# Database
postgres: postgres:
image: postgres:15 image: postgres:15
environment: environment:
@@ -430,29 +241,8 @@ services:
volumes: volumes:
- postgres_data:/var/lib/postgresql/data - postgres_data:/var/lib/postgresql/data
# Cache
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
# API Gateway (опционально)
traefik:
image: traefik:v2.10
command:
- --api.insecure=true
- --providers.docker=true
ports:
- "80:80"
- "8081:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
volumes: volumes:
postgres_data: postgres_data:
redis_data:
``` ```
### Структура проекта ### Структура проекта

View File

@@ -55,9 +55,8 @@ journey
**Требования:** **Требования:**
- Генерация уникальных QR-кодов для каждого места - Генерация уникальных QR-кодов для каждого места
- Кодирование в QR: ID места, адрес, координаты - Кодирование в QR: ID места, адрес, координаты
- Печать этикеток на обычном принтере (A4) через Document Service - Печать этикеток на обычном принтере (A4) на фронтенде (pdfmake/jsPDF)
- Сетка этикеток на лист с предварительным просмотром - Сетка этикеток на лист с предварительным просмотром
- Кэширование сгенерированных QR-кодов в Redis
#### 2.1.3 Виртуальная карта #### 2.1.3 Виртуальная карта
**Требования:** **Требования:**
@@ -76,14 +75,13 @@ journey
- Распознавание QR-кодов в реальном времени - Распознавание QR-кодов в реальном времени
- Автоматический переход к операции с местом - Автоматический переход к операции с местом
- Обработка ошибок сканирования - Обработка ошибок сканирования
- Offline поддержка через Service Worker
#### 2.2.2 Быстрые операции #### 2.2.2 Быстрые операции
**Требования:** **Требования:**
- Размещение товара: сканирование места → выбор товара → подтверждение - Размещение товара: сканирование места → выбор товара → подтверждение
- Поиск товара: сканирование места → показ списка товаров - Поиск товара: сканирование места → показ списка товаров
- Перемещение: сканирование места откуда → сканирование места куда → выбор товара - Перемещение: сканирование места откуда → сканирование места куда → выбор товара
- State management через NgRx для сложных операций - Управление состоянием через сервисы Angular (без NgRx в рамках MVP)
### 2.3 Справочники ### 2.3 Справочники
@@ -108,7 +106,7 @@ journey
- Выбор места размещения - Выбор места размещения
- Указание количества - Указание количества
- Автоматическое обновление статуса места - Автоматическое обновление статуса места
- Валидация через gRPC между сервисами - Валидация в Core Service (REST API)
#### 2.4.2 Поиск товаров #### 2.4.2 Поиск товаров
**Требования:** **Требования:**
@@ -116,24 +114,11 @@ journey
- Поиск по адресу места - Поиск по адресу места
- Поиск по категории - Поиск по категории
- Результат: список мест с товарами - Результат: список мест с товарами
- Кэширование результатов поиска в Redis - Оптимизация поиска за счёт индексов БД (без Redis в MVP)
### 2.5 Document Service ### 2.5 Генерация документов (MVP)
#### 2.5.1 Генерация документов **Подход:** Без отдельного Document Service. Генерация PDF этикеток выполняется на фронтенде (pdfmake/jsPDF). Excel/Word и серверная генерация документов — PostMVP.
**Требования:**
- Генерация PDF этикеток с QR-кодами
- Создание Excel отчетов по товарам
- Экспорт данных в Word документы
- Шаблонизация через Jinja2
- Асинхронная обработка через Redis
#### 2.5.2 Кэширование
**Требования:**
- Кэширование сгенерированных документов
- TTL для документов: 24 часа
- Автоматическая очистка старых документов
- Статистика использования кэша
--- ---
@@ -171,5 +156,5 @@ journey
### 4.2 Упрощения для MVP ### 4.2 Упрощения для MVP
- Вместо графического редактора: готовые шаблоны - Вместо графического редактора: готовые шаблоны
- Вместо умных подсказок: базовые правила размещения - Вместо умных подсказок: базовые правила размещения
- Вместо сложного offline: кэш + простая синхронизация - Без offline-функциональности: допускается только кэширование статических ресурсов PWA
- Вместо CV чеков: ручной ввод с автодополнением - Вместо CV чеков: ручной ввод с автодополнением