from contextlib import asynccontextmanager from datetime import datetime from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.config import get_settings from app.database import connect_db, disconnect_db @asynccontextmanager async def lifespan(app: FastAPI): """서버 시작/종료 이벤트: MongoDB + Redis 연결 관리""" await connect_db() yield await disconnect_db() def create_app() -> FastAPI: settings = get_settings() app = FastAPI( title="todos2 API", description="확장형 할일 관리 애플리케이션 API", version="1.0.0", lifespan=lifespan, ) # CORS app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # 라우터 등록 from app.routers import todos, categories, tags, search, dashboard, uploads app.include_router(todos.router) app.include_router(categories.router) app.include_router(tags.router) app.include_router(search.router) app.include_router(dashboard.router) app.include_router(uploads.router) # 헬스 체크 @app.get("/health", tags=["health"]) async def health_check(): return {"status": "healthy", "timestamp": datetime.now().isoformat()} return app app = create_app()