Files

50 lines
1.3 KiB
Python

from collections.abc import AsyncIterator
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from app.config import settings
from app.routers import admin, auth, cloud_types, clouds, collections, favorites, health, profiles
@asynccontextmanager
async def lifespan(_: FastAPI) -> AsyncIterator[None]:
settings.upload_dir.mkdir(parents=True, exist_ok=True)
yield
app = FastAPI(
title=settings.app_name,
version="0.1.0",
debug=settings.debug,
lifespan=lifespan,
)
app.add_middleware(
CORSMiddleware,
allow_origins=settings.cors_origin_list,
allow_credentials=True,
allow_methods=["GET", "POST", "PATCH", "DELETE", "OPTIONS"],
allow_headers=["Authorization", "Content-Type"],
)
for router in (
health.router,
auth.router,
profiles.router,
cloud_types.router,
clouds.router,
collections.router,
favorites.router,
admin.router,
):
app.include_router(router, prefix=settings.api_v1_prefix)
app.mount("/media", StaticFiles(directory=settings.upload_dir, check_dir=False), name="media")
@app.get("/", include_in_schema=False)
async def root() -> dict[str, str]:
return {"name": settings.app_name, "docs": "/docs"}