38 lines
1.0 KiB
Python
38 lines
1.0 KiB
Python
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)
|