From d33b242a84a3d3ad2f5b97e996ca7bebda9382a6 Mon Sep 17 00:00:00 2001 From: itqop Date: Wed, 31 Dec 2025 01:22:35 +0300 Subject: [PATCH] add auto migrations --- backend/src/app/infra/database.py | 25 +++++++++++++++++++++++++ backend/src/app/main.py | 5 +++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/backend/src/app/infra/database.py b/backend/src/app/infra/database.py index b8af4b4..49bb651 100644 --- a/backend/src/app/infra/database.py +++ b/backend/src/app/infra/database.py @@ -54,3 +54,28 @@ async def init_db() -> None: """Initialize database tables.""" async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) + + +def run_migrations() -> None: + """Run Alembic migrations.""" + from pathlib import Path + + from alembic import command + from alembic.config import Config + from loguru import logger + + # Find alembic.ini (works in both dev and Docker) + alembic_ini_path = Path(__file__).parent.parent.parent.parent / "alembic.ini" + + if not alembic_ini_path.exists(): + logger.warning(f"alembic.ini not found at {alembic_ini_path}, skipping migrations") + return + + # Create Alembic config + alembic_cfg = Config(str(alembic_ini_path)) + alembic_cfg.set_main_option("sqlalchemy.url", settings.database_url) + + # Run migrations + logger.info("Running Alembic migrations...") + command.upgrade(alembic_cfg, "head") + logger.info("Migrations completed successfully") diff --git a/backend/src/app/main.py b/backend/src/app/main.py index 1aef244..7441627 100644 --- a/backend/src/app/main.py +++ b/backend/src/app/main.py @@ -7,7 +7,7 @@ from fastapi.middleware.cors import CORSMiddleware from app.api.v1 import assets, auth, batch, folders, shares, uploads from app.infra.config import get_settings -from app.infra.database import init_db +from app.infra.database import init_db, run_migrations settings = get_settings() @@ -15,7 +15,8 @@ settings = get_settings() @asynccontextmanager async def lifespan(app: FastAPI): """Application lifespan handler.""" - # Startup + # Startup: Run migrations first + run_migrations() await init_db() yield # Shutdown