from fastapi import FastAPI from starlette.middleware.sessions import SessionMiddleware from app.config import Settings, get_settings from app.db.session import create_db_engine, create_session_factory, initialize_schema from app.web.routes import router as web_router def create_app(settings: Settings | None = None) -> FastAPI: resolved = settings or get_settings() resolved.data_dir.mkdir(parents=True, exist_ok=True) resolved.tokens_dir.mkdir(parents=True, exist_ok=True) resolved.activities_dir.mkdir(parents=True, exist_ok=True) app = FastAPI(title="MyWhoosh Garmin Sync") app.state.settings = resolved engine = create_db_engine(resolved.database_url) initialize_schema(engine) app.state.db_engine = engine app.state.session_factory = create_session_factory(engine) app.add_middleware( SessionMiddleware, secret_key=resolved.secret_key, same_site="lax", https_only=False, ) app.include_router(web_router) @app.get("/healthz") def healthz() -> dict[str, str]: return {"status": "ok"} return app app = create_app()