diff --git a/app/main.py b/app/main.py new file mode 100644 index 0000000..86b966f --- /dev/null +++ b/app/main.py @@ -0,0 +1,37 @@ +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)