feat(db): Re-added database initialization before starting API

This commit is contained in:
Fanilo-Nantenaina 2025-12-31 10:40:50 +03:00
parent 6b1710ad99
commit f217058538
3 changed files with 31 additions and 27 deletions

View file

@ -18,4 +18,6 @@ RUN mkdir -p /app/data && chmod 777 /app/data
EXPOSE 8000 EXPOSE 8000
# Lancer l'API et initialiser la DB au démarrage # Lancer l'API et initialiser la DB au démarrage
CMD ["sh", "-c", "uvicorn api:app --host 0.0.0.0 --port 8000"] # CMD ["sh", "-c", "uvicorn api:app --host 0.0.0.0 --port 8000"]
CMD ["sh", "-c", "python init_db.py && uvicorn api:app --host 0.0.0.0 --port 8000"]

View file

@ -1,6 +1,6 @@
import os import os
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
from sqlalchemy.pool import StaticPool from sqlalchemy.pool import NullPool
import logging import logging
from database.models.generic_model import Base from database.models.generic_model import Base
@ -13,8 +13,7 @@ engine = create_async_engine(
DATABASE_URL, DATABASE_URL,
echo=False, echo=False,
future=True, future=True,
connect_args={"check_same_thread": False}, poolclass=NullPool,
poolclass=StaticPool,
) )
async_session_factory = async_sessionmaker( async_session_factory = async_sessionmaker(
@ -26,26 +25,27 @@ async_session_factory = async_sessionmaker(
async def init_db(): async def init_db():
logger.info("Debut init_db")
try: try:
logger.info("Tentative de connexion")
async with engine.begin() as conn: async with engine.begin() as conn:
logger.info("Connexion etablie")
await conn.run_sync(Base.metadata.create_all) await conn.run_sync(Base.metadata.create_all)
logger.info("create_all execute")
logger.info(" Base de données initialisée avec succès") logger.info("Base de données initialisée avec succès")
logger.info(f" Fichier DB: {DATABASE_URL}") logger.info(f"Fichier DB: {DATABASE_URL}")
except Exception as e: except Exception as e:
logger.error(f" Erreur initialisation DB: {e}") logger.error(f"Erreur initialisation DB: {e}")
raise raise
async def get_session() -> AsyncSession: async def get_session() -> AsyncSession:
async with async_session_factory() as session: async with async_session_factory() as session:
try:
yield session yield session
finally:
await session.close()
async def close_db(): async def close_db():
await engine.dispose() await engine.dispose()
logger.info(" Connexions DB fermées") logger.info("Connexions DB fermées")

View file

@ -7,42 +7,44 @@ sys.path.insert(0, str(Path(__file__).parent))
from database import init_db from database import init_db
import logging import logging
logging.basicConfig(level=logging.INFO) logging.basicConfig(
level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
async def main(): async def main():
print("\n" + "=" * 60) print("\n" + "=" * 60)
print("Initialisation de la base de données Sage Dataven") print("Initialisation de la base de données délocalisée")
print("=" * 60 + "\n") print("=" * 60 + "\n")
try: try:
# Créer les tables logger.info("Debut de l'initialisation")
await init_db() await init_db()
logger.info("Initialisation terminee")
print("\n Base de données créée avec succès!") print("\nBase de données créée avec succès !")
print(" Fichier: sage_dataven.db") print("Fichier: sage_dataven.db")
print("\nTables créées:") print("\nTables créées:")
print(" ├─ email_logs (Journalisation emails)") print(" |- email_logs (Journalisation emails)")
print(" ├─ signature_logs (Suivi signatures Universign)") print(" |- signature_logs (Suivi signatures Universign)")
print(" ├─ workflow_logs (Transformations documents)") print(" |- workflow_logs (Transformations documents)")
print(" ├─ cache_metadata (Métadonnées cache)") print(" |- cache_metadata (Métadonnées cache)")
print(" └─ audit_logs (Journal d'audit)") print(" |- audit_logs (Journal d'audit)")
print("\nProchaines étapes:") print("\nProchaines étapes:")
print(" 1. Configurer le fichier .env avec vos credentials") print(" 1. Configurer le fichier .env avec les credentials")
print(" 2. Lancer la gateway Windows sur la machine Sage") print(" 2. Lancer la gateway Windows sur la machine Sage")
print(" 3. Lancer l'API VPS: uvicorn api:app --host 0.0.0.0 --port 8000") print(" 3. Lancer l'API VPS: uvicorn api:app --host 0.0.0.0 --port 8000")
print(" 4. Ou avec Docker: docker-compose up -d") print(" 4. Ou avec Docker : docker-compose up -d")
print(" 5. Tester: http://0.0.0.0:8000/docs") print(" 5. Tester: http://IP_DU_VPS:8000/docs")
print("\n" + "=" * 60 + "\n") print("\n" + "=" * 60 + "\n")
return True return True
except Exception as e: except Exception as e:
print(f"\n Erreur lors de l'initialisation: {e}") print(f"\nErreur lors de l'initialisation: {e}")
logger.exception("Détails de l'erreur:") logger.exception("Détails de l'erreur:")
return False return False