Files
second-mind-aep/💡 Идеи/💡 Проекты/ERP для малых производств/Архитектура-MVP.md

246 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Архитектура 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%)
- Недоступность сервиса