227 lines
11 KiB
Markdown
227 lines
11 KiB
Markdown
# 📁 Структура проекта ERP MVP
|
||
|
||
```
|
||
erp-mvp/
|
||
├── 📁 core-service/ # Go Backend (Core API)
|
||
│ ├── 📁 cmd/
|
||
│ │ └── main.go # Точка входа приложения
|
||
│ ├── 📁 internal/
|
||
│ │ ├── 📁 api/ # HTTP API handlers
|
||
│ │ ├── 📁 config/ # Конфигурация
|
||
│ │ ├── 📁 database/ # Работа с БД
|
||
│ │ ├── 📁 grpc/ # gRPC клиенты/серверы
|
||
│ │ ├── 📁 logger/ # Логирование
|
||
│ │ ├── 📁 models/ # Модели данных
|
||
│ │ ├── 📁 redis/ # Redis клиент
|
||
│ │ └── 📁 services/ # Бизнес-логика
|
||
│ ├── 📁 pkg/ # Публичные пакеты
|
||
│ ├── 📁 proto/ # Сгенерированные Protocol Buffers
|
||
│ ├── go.mod # Go зависимости
|
||
│ ├── go.sum # Go checksums
|
||
│ └── Dockerfile # Docker образ
|
||
│
|
||
├── 📁 doc-service/ # Python Document Service
|
||
│ ├── 📁 app/
|
||
│ │ ├── 📁 api/ # FastAPI роуты
|
||
│ │ │ ├── routes/
|
||
│ │ │ └── middleware/
|
||
│ │ ├── 📁 core/ # Основная логика
|
||
│ │ │ ├── redis_client.py
|
||
│ │ │ └── logging.py
|
||
│ │ ├── 📁 models/ # Pydantic модели
|
||
│ │ │ └── document.py
|
||
│ │ ├── 📁 services/ # Сервисы генерации документов
|
||
│ │ │ ├── pdf_service.py
|
||
│ │ │ ├── excel_service.py
|
||
│ │ │ └── qr_service.py
|
||
│ │ ├── 📁 templates/ # Jinja2 шаблоны
|
||
│ │ ├── config.py # Конфигурация
|
||
│ │ └── main.py # Точка входа
|
||
│ ├── 📁 output/ # Генерируемые документы
|
||
│ ├── requirements.txt # Python зависимости
|
||
│ └── Dockerfile # Docker образ
|
||
│
|
||
├── 📁 frontend/ # Angular PWA Frontend
|
||
│ ├── 📁 src/
|
||
│ │ ├── 📁 app/
|
||
│ │ │ ├── 📁 components/ # Angular компоненты
|
||
│ │ │ │ ├── header/
|
||
│ │ │ │ ├── qr-scanner/
|
||
│ │ │ │ ├── location-details/
|
||
│ │ │ │ ├── item-list/
|
||
│ │ │ │ └── search/
|
||
│ │ │ ├── 📁 services/ # Angular сервисы
|
||
│ │ │ │ ├── api.service.ts
|
||
│ │ │ │ ├── auth.service.ts
|
||
│ │ │ │ └── auth.interceptor.ts
|
||
│ │ │ ├── 📁 store/ # NgRx store
|
||
│ │ │ │ ├── app.reducers.ts
|
||
│ │ │ │ ├── app.effects.ts
|
||
│ │ │ │ └── app.actions.ts
|
||
│ │ │ ├── 📁 models/ # TypeScript модели
|
||
│ │ │ ├── app.component.ts
|
||
│ │ │ ├── app.module.ts
|
||
│ │ │ └── app-routing.module.ts
|
||
│ │ ├── 📁 assets/ # Статические ресурсы
|
||
│ │ ├── 📁 environments/ # Конфигурация окружений
|
||
│ │ ├── index.html
|
||
│ │ ├── main.ts
|
||
│ │ ├── styles.scss
|
||
│ │ └── manifest.webmanifest # PWA манифест
|
||
│ ├── package.json # Node.js зависимости
|
||
│ ├── angular.json # Angular конфигурация
|
||
│ ├── nginx.conf # Nginx конфигурация
|
||
│ └── Dockerfile # Docker образ
|
||
│
|
||
├── 📁 proto/ # Protocol Buffers
|
||
│ ├── core.proto # Core Service API
|
||
│ ├── document.proto # Document Service API
|
||
│ └── events.proto # Event-driven сообщения
|
||
│
|
||
├── 📁 docker/ # Docker конфигурации
|
||
│ ├── 📁 postgres/
|
||
│ │ └── init.sql # Инициализация БД
|
||
│ ├── 📁 prometheus/
|
||
│ │ └── prometheus.yml # Prometheus конфигурация
|
||
│ └── 📁 grafana/
|
||
│ └── provisioning/ # Grafana дашборды
|
||
│
|
||
├── docker-compose.yml # Основной compose файл
|
||
├── README.md # Основная документация
|
||
├── STARTUP.md # Инструкции по запуску
|
||
└── PROJECT_STRUCTURE.md # Этот файл
|
||
```
|
||
|
||
## 🔧 Технологический стек
|
||
|
||
### Core Service (Go)
|
||
- **Framework:** Gin (HTTP сервер)
|
||
- **Database:** PostgreSQL (основная БД)
|
||
- **Cache:** Redis (кэширование)
|
||
- **Auth:** JWT (аутентификация)
|
||
- **gRPC:** Protocol Buffers (межсервисная коммуникация)
|
||
- **Logging:** logrus/zerolog (структурированное логирование)
|
||
- **Monitoring:** Prometheus (метрики)
|
||
|
||
### Document Service (Python)
|
||
- **Framework:** FastAPI (веб-фреймворк)
|
||
- **PDF:** reportlab, weasyprint (генерация PDF)
|
||
- **Excel:** openpyxl (работа с Excel)
|
||
- **Word:** python-docx (работа с Word)
|
||
- **QR:** qrcode (генерация QR-кодов)
|
||
- **Templates:** Jinja2 (шаблонизация)
|
||
- **Cache:** Redis (кэширование документов)
|
||
- **gRPC:** grpcio (межсервисная коммуникация)
|
||
|
||
### Frontend (Angular)
|
||
- **Framework:** Angular 17+ (SPA фреймворк)
|
||
- **PWA:** @angular/service-worker (Progressive Web App)
|
||
- **UI:** Angular Material (компоненты UI)
|
||
- **Styling:** Tailwind CSS (утилитарные стили)
|
||
- **QR Scanner:** @zxing/ngx-scanner (сканирование QR)
|
||
- **State:** NgRx (управление состоянием)
|
||
- **HTTP:** HttpClient (API запросы)
|
||
|
||
### Infrastructure
|
||
- **Containerization:** Docker + Docker Compose
|
||
- **Database:** PostgreSQL 15 (основная БД)
|
||
- **Cache:** Redis 7 (кэширование)
|
||
- **Gateway:** Traefik (опционально)
|
||
- **Monitoring:** Prometheus + Grafana (опционально)
|
||
- **Web Server:** Nginx (для frontend)
|
||
|
||
## 🚀 Архитектура
|
||
|
||
### Микросервисная архитектура
|
||
```
|
||
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||
│ Angular PWA │ │ Go Core │ │ PostgreSQL │
|
||
│ (Frontend) │◄──►│ Service │◄──►│ (Database) │
|
||
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
||
│ │
|
||
│ │
|
||
▼ ▼
|
||
┌─────────────────┐ ┌─────────────────┐
|
||
│ QR Scanner │ │ Python Doc │
|
||
│ (Camera) │ │ Service │
|
||
└─────────────────┘ └─────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────┐
|
||
│ Redis Cache │
|
||
│ (Documents) │
|
||
└─────────────────┘
|
||
```
|
||
|
||
### Коммуникация между сервисами
|
||
- **Frontend ↔ Core Service:** REST API (HTTP/JSON)
|
||
- **Frontend ↔ Document Service:** REST API (HTTP/JSON)
|
||
- **Core Service ↔ Document Service:** gRPC (Protocol Buffers)
|
||
- **Все сервисы ↔ Redis:** Redis Protocol (кэширование)
|
||
|
||
## 📊 База данных
|
||
|
||
### Основные таблицы
|
||
- **organizations** - Организации/компании
|
||
- **users** - Пользователи системы
|
||
- **storage_locations** - Места хранения
|
||
- **items** - Товары/материалы
|
||
- **item_placements** - Размещение товаров
|
||
- **operations** - Операции с товарами
|
||
|
||
### Индексы
|
||
- Организация-scope индексы для всех таблиц
|
||
- Индексы по типам и категориям
|
||
- Временные индексы для аналитики
|
||
|
||
## 🔐 Безопасность
|
||
|
||
### Аутентификация
|
||
- JWT токены с refresh механизмом
|
||
- Organization-scope на всех данных
|
||
- Middleware для проверки прав доступа
|
||
|
||
### Валидация
|
||
- Входная валидация всех параметров
|
||
- SQL injection protection
|
||
- 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
|
||
- Все сервисы в отдельных контейнерах
|
||
- Автоматическая инициализация БД
|
||
- Готовые образы для быстрого старта
|
||
|
||
### Мониторинг
|
||
- Prometheus для сбора метрик
|
||
- Grafana для визуализации
|
||
- Structured logging для всех сервисов
|
||
|
||
### Масштабирование
|
||
- Горизонтальное масштабирование сервисов
|
||
- Load balancing через Traefik
|
||
- Кэширование через Redis
|