"""FastAPI application entry point.""" from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from database import engine, Base from routes import sum as sum_routes from routes import counter as counter_routes from routes import audit as audit_routes from routes import profile as profile_routes from routes import invites as invites_routes from routes import auth as auth_routes from routes import meta as meta_routes from routes import availability as availability_routes from routes import booking as booking_routes from validate_constants import validate_shared_constants @asynccontextmanager async def lifespan(app: FastAPI): """Create database tables on startup and validate constants.""" # Validate shared constants match backend definitions validate_shared_constants() async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) yield app = FastAPI(lifespan=lifespan) app.add_middleware( CORSMiddleware, allow_origins=["http://localhost:3000"], allow_methods=["*"], allow_headers=["*"], allow_credentials=True, ) # Include routers app.include_router(auth_routes.router) app.include_router(sum_routes.router) app.include_router(counter_routes.router) app.include_router(audit_routes.router) app.include_router(profile_routes.router) app.include_router(invites_routes.router) app.include_router(invites_routes.admin_router) app.include_router(availability_routes.router) app.include_router(booking_routes.router) app.include_router(booking_routes.appointments_router) app.include_router(meta_routes.router)