Replace Flask admin with FastAPI app (api/app/) featuring: - Dashboard with stat cards, sync control, and history - Mappings CRUD for ARTICOLE_TERTI with CSV import/export - Article autocomplete from NOM_ARTICOLE - SKU pre-validation before import - Sync orchestration: read JSONs -> validate -> import -> log to SQLite - APScheduler for periodic sync from UI - File logging to logs/sync_comenzi_YYYYMMDD_HHMMSS.log - Oracle pool None guard (503 vs 500 on unavailable) Test suite: - test_app_basic.py: 30 tests (imports + routes) without Oracle - test_integration.py: 9 integration tests with Oracle Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
58 lines
2.0 KiB
Markdown
58 lines
2.0 KiB
Markdown
# GoMag Import Manager - FastAPI Application
|
|
|
|
Admin interface si orchestrator pentru importul comenzilor GoMag in Oracle ROA.
|
|
|
|
## Componente
|
|
|
|
### Core
|
|
- **main.py** - Entry point FastAPI, lifespan (Oracle pool + SQLite init), file logging
|
|
- **config.py** - Settings via pydantic-settings (citeste .env)
|
|
- **database.py** - Oracle connection pool + SQLite schema + helpers
|
|
|
|
### Routers (HTTP Endpoints)
|
|
| Router | Prefix | Descriere |
|
|
|--------|--------|-----------|
|
|
| health | /health, /api/health | Status Oracle + SQLite |
|
|
| dashboard | / | Dashboard HTML cu stat cards |
|
|
| mappings | /mappings, /api/mappings | CRUD ARTICOLE_TERTI + CSV |
|
|
| articles | /api/articles | Cautare NOM_ARTICOLE |
|
|
| validation | /api/validate | Scanare + validare SKU-uri |
|
|
| sync | /sync, /api/sync | Import orchestration + scheduler |
|
|
|
|
### Services (Business Logic)
|
|
| Service | Rol |
|
|
|---------|-----|
|
|
| mapping_service | CRUD pe ARTICOLE_TERTI (Oracle) |
|
|
| article_service | Cautare in NOM_ARTICOLE (Oracle) |
|
|
| import_service | Port din VFP: partner/address/order creation |
|
|
| sync_service | Orchestrare: read JSONs → validate → import → log |
|
|
| validation_service | Batch-validare SKU-uri (chunks of 500) |
|
|
| order_reader | Citire gomag_orders_page*.json din vfp/output/ |
|
|
| sqlite_service | CRUD pe SQLite (sync_runs, import_orders, missing_skus) |
|
|
| scheduler_service | APScheduler - sync periodic configurabil din UI |
|
|
|
|
## Rulare
|
|
|
|
```bash
|
|
pip install -r requirements.txt
|
|
uvicorn app.main:app --host 0.0.0.0 --port 5003 --reload
|
|
```
|
|
|
|
## Testare
|
|
|
|
```bash
|
|
# Test A - fara Oracle (verifica importuri + rute)
|
|
python test_app_basic.py
|
|
|
|
# Test C - cu Oracle (integrare completa)
|
|
python test_integration.py
|
|
```
|
|
|
|
## Dual Database
|
|
- **Oracle** - date ERP (ARTICOLE_TERTI, NOM_ARTICOLE, COMENZI)
|
|
- **SQLite** - tracking local (sync_runs, import_orders, missing_skus, scheduler_config)
|
|
|
|
## Logging
|
|
Log files in `../logs/sync_comenzi_YYYYMMDD_HHMMSS.log`
|
|
Format: `2026-03-11 14:30:25 | INFO | app.services.sync_service | mesaj`
|