from __future__ import annotations from collections.abc import AsyncIterator from contextlib import asynccontextmanager from starlette.applications import Starlette from starlette.middleware import Middleware from starlette.routing import Route from tortoise import Tortoise from app.auth import OIDCAuthMiddleware, init_oidc from app.config import settings from app.resources.expenses import create_expense_report, list_expense_reports @asynccontextmanager async def lifespan(app: Starlette) -> AsyncIterator[None]: await Tortoise.init( db_url=settings.database_url, modules={"models": ["app.models"]}, ) await Tortoise.generate_schemas(safe=True) await init_oidc() yield await Tortoise.close_connections() routes = [ Route("/api/expense-reports", endpoint=create_expense_report, methods=["POST"]), Route("/api/expense-reports", endpoint=list_expense_reports, methods=["GET"]), ] middleware = [ Middleware(OIDCAuthMiddleware), ] app = Starlette(routes=routes, middleware=middleware, lifespan=lifespan)