"""FastAPI application entrypoint.""" from __future__ import annotations from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from routers import dashboard, monitoring, media, files, jobs @asynccontextmanager async def lifespan(app: FastAPI): """Application lifespan — startup/shutdown.""" yield app = FastAPI( title="Media Library Viewer API", version="0.1.0", description="Backend API for Jellyfin media browsing, SSH file inspection, and server monitoring.", lifespan=lifespan, ) # CORS for development (Vite runs on :5173) app.add_middleware( CORSMiddleware, allow_origins=[ "http://localhost:5173", "http://localhost:3000", "http://127.0.0.1:5173", "http://127.0.0.1:3000", ], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Register routers app.include_router(dashboard.router) app.include_router(monitoring.router) app.include_router(media.router) app.include_router(files.router) app.include_router(jobs.router) @app.get("/api/health") def health_check() -> dict[str, str]: """Simple health check endpoint.""" return {"status": "ok"}