from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.staticfiles import StaticFiles from starlette.middleware.sessions import SessionMiddleware from app.db import enable_beets_db_wal, init_db from app.routers import auth, dashboard, import_, library from app.services import scheduler_service from app.settings import settings @asynccontextmanager async def lifespan(_app: FastAPI): init_db() enable_beets_db_wal() scheduler = scheduler_service.create_scheduler() scheduler_service.register_all_jobs(scheduler) scheduler.start() yield scheduler.shutdown(wait=False) def create_app() -> FastAPI: app = FastAPI(title="alembic", lifespan=lifespan) app.add_middleware(SessionMiddleware, secret_key=settings.session_secret) app.mount("/static", StaticFiles(directory="app/static"), name="static") app.include_router(auth.router) app.include_router(dashboard.router) app.include_router(library.router) app.include_router(import_.router) return app app = create_app()