""" Main FastAPI application. """ from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware import logging from app.core.config import settings from app.core.middleware import SecurityHeadersMiddleware, CSRFProtectionMiddleware from app.api.v1.api import api_router # Configure logging logging.basicConfig( level=getattr(logging, settings.LOG_LEVEL.upper()), format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", ) logger = logging.getLogger(__name__) def create_application() -> FastAPI: """Create and configure FastAPI application""" app = FastAPI( title=settings.APP_NAME, version=settings.APP_VERSION, description="Multi-tenant POP3/IMAP to Gmail forwarder with subscription management", docs_url="/api/docs", redoc_url="/api/redoc", openapi_url="/api/openapi.json", ) # Security middleware (add before CORS) app.add_middleware(SecurityHeadersMiddleware) app.add_middleware(CSRFProtectionMiddleware) # CORS middleware app.add_middleware( CORSMiddleware, allow_origins=settings.CORS_ORIGINS, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Include API router app.include_router(api_router, prefix=settings.API_V1_PREFIX) @app.get("/") async def root(): """Root endpoint""" return { "message": "POP3 Forwarder SaaS API", "version": settings.APP_VERSION, "docs": "/api/docs", } @app.get("/health") async def health_check(): """Health check endpoint for container orchestration""" return {"status": "healthy"} @app.on_event("startup") async def startup_event(): """Run on application startup""" logger.info(f"Starting {settings.APP_NAME} v{settings.APP_VERSION}") logger.info(f"Debug mode: {settings.DEBUG}") logger.info("API documentation: /api/docs") @app.on_event("shutdown") async def shutdown_event(): """Run on application shutdown""" logger.info("Shutting down application") return app app = create_application()