refactor documentation
This commit is contained in:
245
💡 Идеи/💡 Проекты/ERP для малых производств/Архитектура-MVP.md
Normal file
245
💡 Идеи/💡 Проекты/ERP для малых производств/Архитектура-MVP.md
Normal file
@@ -0,0 +1,245 @@
|
||||
# Архитектура MVP: ERP для мастеров
|
||||
|
||||
## 🏗️ Общая архитектура
|
||||
|
||||
```
|
||||
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||||
│ React PWA │ │ Go Backend │ │ PostgreSQL │
|
||||
│ (Frontend) │◄──►│ (API) │◄──►│ (Database) │
|
||||
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
||||
│ │
|
||||
│ │
|
||||
▼ ▼
|
||||
┌─────────────────┐ ┌─────────────────┐
|
||||
│ QR Scanner │ │ PDF Generator │
|
||||
│ (Camera) │ │ (Labels) │
|
||||
└─────────────────┘ └─────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Технологический стек
|
||||
|
||||
### Backend (Go)
|
||||
- **Framework:** Gin или Echo
|
||||
- **Database:** PostgreSQL
|
||||
- **Authentication:** JWT
|
||||
- **Validation:** validator
|
||||
- **PDF Generation:** wkhtmltopdf или gofpdf
|
||||
|
||||
### Frontend (React PWA)
|
||||
- **Framework:** React 18
|
||||
- **Build Tool:** Vite
|
||||
- **PWA:** Workbox
|
||||
- **QR Scanner:** react-qr-reader
|
||||
- **UI:** Tailwind CSS или Material-UI
|
||||
|
||||
### Infrastructure
|
||||
- **Containerization:** Docker
|
||||
- **Deployment:** Docker Compose
|
||||
- **Security:** HTTPS, CORS
|
||||
- **Monitoring:** Structured logging
|
||||
|
||||
---
|
||||
|
||||
## 📊 Структура базы данных
|
||||
|
||||
### Основные таблицы
|
||||
|
||||
```sql
|
||||
-- Организации
|
||||
CREATE TABLE organizations (
|
||||
id UUID PRIMARY KEY,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
type VARCHAR(100),
|
||||
settings JSONB,
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Пользователи
|
||||
CREATE TABLE users (
|
||||
id UUID PRIMARY KEY,
|
||||
organization_id UUID REFERENCES organizations(id),
|
||||
email VARCHAR(255) UNIQUE NOT NULL,
|
||||
role VARCHAR(50) DEFAULT 'user',
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Места хранения
|
||||
CREATE TABLE storage_locations (
|
||||
id UUID PRIMARY KEY,
|
||||
organization_id UUID REFERENCES organizations(id),
|
||||
parent_id UUID REFERENCES storage_locations(id),
|
||||
name VARCHAR(255) NOT NULL,
|
||||
address VARCHAR(100) NOT NULL,
|
||||
type VARCHAR(50) NOT NULL,
|
||||
coordinates JSONB,
|
||||
qr_code VARCHAR(255),
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Товары
|
||||
CREATE TABLE items (
|
||||
id UUID PRIMARY KEY,
|
||||
organization_id UUID REFERENCES organizations(id),
|
||||
name VARCHAR(255) NOT NULL,
|
||||
description TEXT,
|
||||
category VARCHAR(100),
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Размещение товаров
|
||||
CREATE TABLE item_placements (
|
||||
id UUID PRIMARY KEY,
|
||||
organization_id UUID REFERENCES organizations(id),
|
||||
item_id UUID REFERENCES items(id),
|
||||
location_id UUID REFERENCES storage_locations(id),
|
||||
quantity INTEGER DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔌 API Endpoints
|
||||
|
||||
### Аутентификация
|
||||
```
|
||||
POST /api/auth/login
|
||||
POST /api/auth/register
|
||||
POST /api/auth/refresh
|
||||
```
|
||||
|
||||
### Организации
|
||||
```
|
||||
GET /api/organizations/:id
|
||||
PUT /api/organizations/:id
|
||||
```
|
||||
|
||||
### Места хранения
|
||||
```
|
||||
GET /api/locations
|
||||
POST /api/locations
|
||||
GET /api/locations/:id
|
||||
PUT /api/locations/:id
|
||||
DELETE /api/locations/:id
|
||||
POST /api/locations/:id/qr-code
|
||||
```
|
||||
|
||||
### Товары
|
||||
```
|
||||
GET /api/items
|
||||
POST /api/items
|
||||
GET /api/items/:id
|
||||
PUT /api/items/:id
|
||||
DELETE /api/items/:id
|
||||
```
|
||||
|
||||
### Операции
|
||||
```
|
||||
POST /api/operations/place-item
|
||||
POST /api/operations/move-item
|
||||
GET /api/operations/search
|
||||
```
|
||||
|
||||
### Шаблоны
|
||||
```
|
||||
GET /api/templates
|
||||
POST /api/templates/:id/apply
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Безопасность
|
||||
|
||||
### Аутентификация
|
||||
- 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
|
||||
```yaml
|
||||
version: '3.8'
|
||||
services:
|
||||
backend:
|
||||
build: ./backend
|
||||
ports:
|
||||
- "8080:8080"
|
||||
environment:
|
||||
- DB_HOST=postgres
|
||||
- JWT_SECRET=your-secret
|
||||
depends_on:
|
||||
- postgres
|
||||
|
||||
frontend:
|
||||
build: ./frontend
|
||||
ports:
|
||||
- "3000:80"
|
||||
depends_on:
|
||||
- backend
|
||||
|
||||
postgres:
|
||||
image: postgres:15
|
||||
environment:
|
||||
- POSTGRES_DB=erp_mvp
|
||||
- POSTGRES_USER=erp_user
|
||||
- POSTGRES_PASSWORD=erp_pass
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 Мониторинг
|
||||
|
||||
### Логирование
|
||||
- Structured JSON логи
|
||||
- Уровни: DEBUG, INFO, WARN, ERROR
|
||||
- Correlation ID для отслеживания запросов
|
||||
|
||||
### Метрики
|
||||
- Время отклика API
|
||||
- Количество ошибок
|
||||
- Активные пользователи
|
||||
- Операции в день
|
||||
|
||||
### Алерты
|
||||
- Высокое время отклика (>500ms)
|
||||
- Высокий процент ошибок (>5%)
|
||||
- Недоступность сервиса
|
||||
Reference in New Issue
Block a user