from contextlib import asynccontextmanager from pathlib import Path from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.staticfiles import StaticFiles from app.api.admin import router as admin_router from app.api.events import router as events_router from app.api.health import router as health_router from app.api.media import router as media_router from app.api.notes import router as notes_router from app.api.todos import router as todos_router from app.api.shopping import router as shopping_router from app.core.config import settings from app.core.redis import init_redis, close_redis from app.data.seed import run_seed @asynccontextmanager async def lifespan(app: FastAPI): # Crée les dossiers data/ au démarrage for subdir in ("uploads", "notes", "backup"): Path(settings.data_dir, subdir).mkdir(parents=True, exist_ok=True) await run_seed() await init_redis() yield await close_redis() app = FastAPI(title="HomeHub API", version="0.1.0", lifespan=lifespan) app.add_middleware( CORSMiddleware, allow_origins=settings.cors_origins_list, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router(health_router, prefix="/api") app.include_router(events_router, prefix="/api/events") app.include_router(admin_router, prefix="/api/admin") app.include_router(media_router, prefix="/api/media") app.include_router(notes_router, prefix="/api/notes") app.include_router(todos_router, prefix="/api/todos") app.include_router(shopping_router, prefix="/api/shopping") app.mount("/media", StaticFiles(directory=str(settings.upload_path)), name="media")