from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.config import settings from app.database import init_db from app.routers import auth, documents, decisions, votes, mandates, protocols, sanctuary, websocket @asynccontextmanager async def lifespan(app: FastAPI): await init_db() yield app = FastAPI( title=settings.APP_NAME, description="Plateforme de decisions collectives pour la communaute Duniter/G1", version="0.1.0", lifespan=lifespan, ) app.add_middleware( CORSMiddleware, allow_origins=settings.CORS_ORIGINS, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router(auth.router, prefix="/api/v1/auth", tags=["auth"]) app.include_router(documents.router, prefix="/api/v1/documents", tags=["documents"]) app.include_router(decisions.router, prefix="/api/v1/decisions", tags=["decisions"]) app.include_router(votes.router, prefix="/api/v1/votes", tags=["votes"]) app.include_router(mandates.router, prefix="/api/v1/mandates", tags=["mandates"]) app.include_router(protocols.router, prefix="/api/v1/protocols", tags=["protocols"]) app.include_router(sanctuary.router, prefix="/api/v1/sanctuary", tags=["sanctuary"]) app.include_router(websocket.router, prefix="/api/v1/ws", tags=["websocket"]) @app.get("/api/health") async def health(): return {"status": "ok"}