feat(db): Re-added database initialization before starting API
This commit is contained in:
parent
6b1710ad99
commit
f217058538
3 changed files with 31 additions and 27 deletions
|
|
@ -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"]
|
||||||
|
|
@ -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")
|
||||||
|
|
|
||||||
32
init_db.py
32
init_db.py
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue