from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from alembic.config import Config from alembic import command from app.database import engine from app.routers import libraries, media, tags, search from app.services import watcher as watcher_service def run_migrations(): alembic_cfg = Config("/backend/alembic.ini") command.upgrade(alembic_cfg, "head") @asynccontextmanager async def lifespan(app: FastAPI): run_migrations() await watcher_service.start_all() yield await watcher_service.stop_all() app = FastAPI(title="MediaLore", lifespan=lifespan) app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"], ) app.include_router(libraries.router, prefix="/api") app.include_router(media.router, prefix="/api") app.include_router(tags.router, prefix="/api") app.include_router(search.router, prefix="/api")