143 lines
5.4 KiB
Markdown
143 lines
5.4 KiB
Markdown
# NIN Excel Parsers API
|
||
|
||
API для парсинга Excel отчетов нефтеперерабатывающих заводов (НПЗ) с использованием FastAPI и MinIO для хранения данных.
|
||
|
||
## 🚀 Быстрый запуск
|
||
|
||
### **Вариант 1: Все сервисы в Docker (рекомендуется)**
|
||
```bash
|
||
# Запуск всех сервисов: MinIO + FastAPI + Streamlit
|
||
docker-compose up -d
|
||
|
||
# Доступ:
|
||
# - MinIO Console: http://localhost:9001
|
||
# - FastAPI: http://localhost:8000
|
||
# - Streamlit: http://localhost:8501
|
||
# - API Docs: http://localhost:8000/docs
|
||
```
|
||
|
||
### **Вариант 2: Только MinIO в Docker + FastAPI локально**
|
||
```bash
|
||
# Запуск MinIO в Docker
|
||
docker-compose up -d minio
|
||
|
||
# Запуск FastAPI локально
|
||
python run_dev.py
|
||
|
||
# В отдельном терминале запуск Streamlit
|
||
cd streamlit_app
|
||
streamlit run app.py
|
||
```
|
||
|
||
### **Вариант 3: Только MinIO в Docker**
|
||
```bash
|
||
# Запуск только MinIO
|
||
docker-compose up -d minio
|
||
```
|
||
|
||
## 📋 Описание сервисов
|
||
|
||
- **MinIO** (порт 9000-9001): S3-совместимое хранилище для данных
|
||
- **FastAPI** (порт 8000): API сервер для парсинга Excel файлов
|
||
- **Streamlit** (порт 8501): Веб-интерфейс для демонстрации API
|
||
|
||
## 🛑 Остановка
|
||
|
||
### Остановка Docker сервисов:
|
||
```bash
|
||
# Все сервисы
|
||
docker-compose down
|
||
|
||
# Только MinIO
|
||
docker-compose stop minio
|
||
```
|
||
|
||
### Остановка локальных сервисов:
|
||
```bash
|
||
# Нажмите Ctrl+C в терминале с FastAPI/Streamlit
|
||
```
|
||
|
||
## 📁 Структура проекта
|
||
|
||
```
|
||
python_parser/
|
||
├── app/ # FastAPI приложение
|
||
│ ├── main.py # Основной файл приложения
|
||
│ └── schemas/ # Pydantic схемы
|
||
├── core/ # Бизнес-логика
|
||
│ ├── models.py # Модели данных
|
||
│ ├── ports.py # Интерфейсы (порты)
|
||
│ └── services.py # Сервисы
|
||
├── adapters/ # Адаптеры для внешних систем
|
||
│ ├── storage.py # MinIO адаптер
|
||
│ └── parsers/ # Парсеры Excel файлов
|
||
├── streamlit_app/ # Изолированный Streamlit пакет
|
||
│ ├── app.py # Основное Streamlit приложение
|
||
│ ├── requirements.txt # Зависимости Streamlit
|
||
│ ├── Dockerfile # Docker образ для Streamlit
|
||
│ └── .streamlit/ # Конфигурация Streamlit
|
||
├── data/ # Тестовые данные
|
||
├── docker-compose.yml # Docker Compose конфигурация
|
||
├── Dockerfile # Docker образ для FastAPI
|
||
└── run_dev.py # Запуск FastAPI локально
|
||
```
|
||
|
||
## 🔍 Доступные эндпоинты
|
||
|
||
- **GET /** - Информация об API
|
||
- **GET /docs** - Swagger документация
|
||
- **GET /parsers** - Список доступных парсеров
|
||
- **GET /parsers/{parser_name}/getters** - Информация о геттерах парсера
|
||
- **POST /svodka_pm/upload-zip** - Загрузка сводок ПМ
|
||
- **POST /svodka_ca/upload** - Загрузка сводок ЦА
|
||
- **POST /monitoring_fuel/upload-zip** - Загрузка мониторинга топлива
|
||
- **POST /svodka_pm/get_data** - Получение данных сводок ПМ
|
||
- **POST /svodka_ca/get_data** - Получение данных сводок ЦА
|
||
- **POST /monitoring_fuel/get_data** - Получение данных мониторинга топлива
|
||
|
||
## 📊 Поддерживаемые типы отчетов
|
||
|
||
1. **svodka_pm** - Сводки по переработке нефти (ПМ)
|
||
- Геттеры: `single_og`, `total_ogs`
|
||
2. **svodka_ca** - Сводки по переработке нефти (ЦА)
|
||
- Геттеры: `get_data`
|
||
3. **monitoring_fuel** - Мониторинг топлива
|
||
- Геттеры: `total_by_columns`, `month_by_code`
|
||
|
||
## 🏗️ Архитектура
|
||
|
||
Проект использует **Hexagonal Architecture (Ports and Adapters)**:
|
||
|
||
- **Порты (Ports)**: Интерфейсы для бизнес-логики
|
||
- **Адаптеры (Adapters)**: Реализации для внешних систем
|
||
- **Сервисы (Services)**: Бизнес-логика приложения
|
||
|
||
### Система геттеров парсеров
|
||
|
||
Каждый парсер может иметь несколько методов получения данных (геттеров):
|
||
- Регистрация геттеров в словаре с метаданными
|
||
- Валидация параметров для каждого геттера
|
||
- Единый интерфейс `get_value(getter_name, params)`
|
||
|
||
## 🐳 Docker
|
||
|
||
### Сборка образов:
|
||
```bash
|
||
# FastAPI
|
||
docker build -t nin-fastapi .
|
||
|
||
# Streamlit
|
||
docker build -t nin-streamlit ./streamlit_app
|
||
```
|
||
|
||
### Запуск отдельных сервисов:
|
||
```bash
|
||
# Только MinIO
|
||
docker-compose up -d minio
|
||
|
||
# MinIO + FastAPI
|
||
docker-compose up -d minio fastapi
|
||
|
||
# Все сервисы
|
||
docker-compose up -d
|
||
``` |