11 KiB
11 KiB
📁 Структура проекта 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