""" Todo-Project 메인 애플리케이션 - 간결함 원칙: 애플리케이션 설정 및 라우터 등록만 담당 """ from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware import logging from .core.config import settings from .api.routes import auth, todos, calendar # 로깅 설정 logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s" ) logger = logging.getLogger(__name__) # FastAPI 앱 생성 app = FastAPI( title="Todo-Project API", description="간결한 Todo 관리 시스템 with 캘린더 연동", version="1.0.0", docs_url="/docs", redoc_url="/redoc" ) # CORS 설정 app.add_middleware( CORSMiddleware, allow_origins=settings.ALLOWED_ORIGINS, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # 라우터 등록 app.include_router(auth.router, prefix="/api/auth", tags=["auth"]) app.include_router(todos.router, prefix="/api", tags=["todos"]) app.include_router(calendar.router, prefix="/api", tags=["calendar"]) @app.get("/") async def root(): """루트 엔드포인트""" return { "message": "Todo-Project API", "version": "1.0.0", "docs": "/docs" } @app.get("/health") async def health_check(): """헬스 체크""" return { "status": "healthy", "service": "todo-project", "version": "1.0.0" } # 애플리케이션 시작 시 실행 @app.on_event("startup") async def startup_event(): """애플리케이션 시작 시 초기화""" logger.info("🚀 Todo-Project API 시작") logger.info(f"📊 환경: {settings.ENVIRONMENT}") logger.info(f"🔗 데이터베이스: {settings.DATABASE_URL}") # 애플리케이션 종료 시 실행 @app.on_event("shutdown") async def shutdown_event(): """애플리케이션 종료 시 정리""" logger.info("🛑 Todo-Project API 종료") # 캘린더 서비스 연결 정리 try: from .integrations.calendar import get_calendar_router calendar_router = get_calendar_router() await calendar_router.close_all() logger.info("📅 캘린더 서비스 연결 정리 완료") except Exception as e: logger.error(f"캘린더 서비스 정리 중 오류: {e}") if __name__ == "__main__": import uvicorn uvicorn.run( "main:app", host="0.0.0.0", port=settings.PORT, reload=settings.DEBUG )