root 5d8ad901d1 Initial commit: Pipeline notarial complet
- Infrastructure complète de traitement de documents notariaux
- API FastAPI d'ingestion et d'orchestration
- Pipelines Celery pour le traitement asynchrone
- Support des formats PDF, JPEG, PNG, TIFF, HEIC
- OCR avec Tesseract et correction lexicale
- Classification automatique des documents avec Ollama
- Extraction de données structurées
- Indexation dans AnythingLLM et OpenSearch
- Système de vérifications et contrôles métier
- Base de données PostgreSQL pour le métier
- Stockage objet avec MinIO
- Base de données graphe Neo4j
- Recherche plein-texte avec OpenSearch
- Supervision avec Prometheus et Grafana
- Scripts d'installation pour Debian
- Documentation complète
- Tests unitaires et de performance
- Service systemd pour le déploiement
- Scripts de déploiement automatisés
2025-09-08 22:05:22 +02:00

70 lines
2.0 KiB
Python

"""
API d'ingestion et d'orchestration pour le pipeline notarial
"""
from fastapi import FastAPI, UploadFile, File, Form, HTTPException, Depends
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse
import uuid
import time
import os
from typing import Optional
import logging
from tasks.enqueue import enqueue_import
from domain.models import ImportMeta, DocumentStatus
from domain.database import get_db, init_db
from routes import documents, health, admin
# Configuration du logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
app = FastAPI(
title="Notariat Pipeline API",
description="API d'ingestion et d'orchestration pour le traitement de documents notariaux",
version="1.0.0"
)
# Configuration CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # À restreindre en production
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Inclusion des routes
app.include_router(health.router, prefix="/api", tags=["health"])
app.include_router(documents.router, prefix="/api", tags=["documents"])
app.include_router(admin.router, prefix="/api/admin", tags=["admin"])
@app.on_event("startup")
async def startup_event():
"""Initialisation au démarrage de l'application"""
logger.info("Démarrage de l'API Notariat Pipeline")
await init_db()
@app.on_event("shutdown")
async def shutdown_event():
"""Nettoyage à l'arrêt de l'application"""
logger.info("Arrêt de l'API Notariat Pipeline")
@app.exception_handler(Exception)
async def global_exception_handler(request, exc):
"""Gestionnaire d'exceptions global"""
logger.error(f"Erreur non gérée: {exc}", exc_info=True)
return JSONResponse(
status_code=500,
content={"detail": "Erreur interne du serveur"}
)
@app.get("/")
async def root():
"""Point d'entrée principal"""
return {
"message": "API Notariat Pipeline",
"version": "1.0.0",
"status": "running"
}