""" Groupe Méditation — API Backend District 87-16, Région 87 100% logiciel libre · Hébergé au Québec """ from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.core.config import settings from app.core.database import engine, Base from app.routers import auth, membres, postes, accueil, invitations, collectes, reunions, depenses, decisions, calendrier, rapports, rotations, parametres, presences, pv, rapports_rsg, jetons, anniversaires, commandes_jetons, litterature, ventes_litterature, contributions, config_repartition, sondages, propositions, operations_bancaires, evenements # Import models pour que create_all crée toutes les tables from app.models.sync_log import SyncLog # noqa: F401 from app.models.proposition import Proposition # noqa: F401 from app.models.operation_bancaire import OperationBancaire # noqa: F401 from app.models.evenement import Evenement # noqa: F401 from app.models.candidature import Candidature # noqa: F401 from app.models.poste_module import PosteModule # noqa: F401 from app.models.reserve import Reserve # noqa: F401 @asynccontextmanager async def lifespan(app: FastAPI): async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) yield await engine.dispose() app = FastAPI( title="Groupe Méditation API", description="API du Groupe Méditation — District 87-16, Région 87", version="0.1.0", lifespan=lifespan, ) app.add_middleware( CORSMiddleware, allow_origins=settings.CORS_ORIGINS, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Montage des routes app.include_router(auth.router, prefix="/api") app.include_router(membres.router, prefix="/api") app.include_router(postes.router, prefix="/api") app.include_router(accueil.router, prefix="/api") app.include_router(invitations.router, prefix="/api") app.include_router(collectes.router, prefix="/api") app.include_router(reunions.router, prefix="/api") app.include_router(depenses.router, prefix="/api") app.include_router(decisions.router, prefix="/api") app.include_router(calendrier.router, prefix="/api") app.include_router(rapports.router, prefix="/api") app.include_router(rotations.router, prefix="/api") app.include_router(parametres.router, prefix="/api") app.include_router(presences.router, prefix="/api") app.include_router(pv.router, prefix="/api") app.include_router(rapports_rsg.router, prefix="/api") app.include_router(jetons.router, prefix="/api") app.include_router(anniversaires.router, prefix="/api") app.include_router(commandes_jetons.router, prefix="/api") app.include_router(litterature.router, prefix="/api") app.include_router(ventes_litterature.router, prefix="/api") app.include_router(contributions.router, prefix="/api") app.include_router(config_repartition.router, prefix="/api") app.include_router(sondages.router, prefix="/api") app.include_router(propositions.router, prefix="/api") app.include_router(operations_bancaires.router, prefix="/api") app.include_router(evenements.router, prefix="/api") @app.get("/api/health") async def root_health(): return {"status": "ok", "app": "Groupe Méditation", "version": "0.1.0"}