root 6f63821728 feat: Ajout version simplifiée sans IA et correction des ports
- Ajout docker-compose.simple.yml avec ports modifiés (15432, 16379, 19000, 19001, 18000)
- Création app_simple.py sans dépendances IA
- Ajout Dockerfile.simple et requirements.simple.txt
- Correction attribut metadata réservé dans database.py
- Ajout scripts de démarrage et test simplifiés
- Configuration .env.simple pour version sans IA
2025-09-09 00:35:32 +02:00

74 lines
2.6 KiB
Python

"""
Configuration de la base de données
"""
from sqlalchemy import create_engine, Column, String, Integer, DateTime, Text, JSON, Boolean
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, Session
from sqlalchemy.sql import func
import os
from typing import Generator
# URL de la base de données
DATABASE_URL = os.getenv("DATABASE_URL", "postgresql+psycopg://notariat:notariat_pwd@localhost:5432/notariat")
# Création du moteur SQLAlchemy
engine = create_engine(DATABASE_URL, echo=False)
# Session factory
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# Base pour les modèles
Base = declarative_base()
class Document(Base):
"""Modèle de document en base de données"""
__tablename__ = "documents"
id = Column(String, primary_key=True, index=True)
filename = Column(String, nullable=False)
mime_type = Column(String, nullable=False)
size = Column(Integer, nullable=False)
status = Column(String, default="pending")
id_dossier = Column(String, nullable=False, index=True)
etude_id = Column(String, nullable=False, index=True)
utilisateur_id = Column(String, nullable=False, index=True)
source = Column(String, default="upload")
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
processing_steps = Column(JSON, default={})
extracted_data = Column(JSON, default={})
errors = Column(JSON, default=[])
manual_review = Column(Boolean, default=False)
class ProcessingLog(Base):
"""Log des étapes de traitement"""
__tablename__ = "processing_logs"
id = Column(Integer, primary_key=True, index=True, autoincrement=True)
document_id = Column(String, nullable=False, index=True)
step_name = Column(String, nullable=False)
status = Column(String, nullable=False)
started_at = Column(DateTime(timezone=True), server_default=func.now())
completed_at = Column(DateTime(timezone=True))
duration = Column(Integer) # en millisecondes
error_message = Column(Text)
step_metadata = Column(JSON, default={})
def get_db() -> Generator[Session, None, None]:
"""Dépendance pour obtenir une session de base de données"""
db = SessionLocal()
try:
yield db
finally:
db.close()
async def init_db():
"""Initialisation de la base de données"""
try:
# Création des tables
Base.metadata.create_all(bind=engine)
print("Base de données initialisée avec succès")
except Exception as e:
print(f"Erreur lors de l'initialisation de la base de données: {e}")
raise