from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from contextlib import asynccontextmanager import logging from .core.config import settings from .db.mongodb import MongoDB from .routes import auth # Configure logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) @asynccontextmanager async def lifespan(app: FastAPI): """Application lifespan manager""" # Startup logger.info("🚀 Starting Console Backend...") try: # Connect to MongoDB await MongoDB.connect() logger.info("✅ MongoDB connected successfully") except Exception as e: logger.error(f"❌ Failed to connect to MongoDB: {e}") raise yield # Shutdown logger.info("👋 Shutting down Console Backend...") await MongoDB.disconnect() # Create FastAPI app app = FastAPI( title=settings.APP_NAME, version=settings.APP_VERSION, description="Site11 Console - Central management system for news generation pipeline", lifespan=lifespan ) # CORS middleware app.add_middleware( CORSMiddleware, allow_origins=settings.CORS_ORIGINS if not settings.DEBUG else ["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Include routers app.include_router(auth.router) # Health check endpoints @app.get("/") async def root(): """Root endpoint""" return { "message": f"Welcome to {settings.APP_NAME}", "version": settings.APP_VERSION, "status": "running" } @app.get("/health") async def health_check(): """Health check endpoint""" return { "status": "healthy", "service": "console-backend", "version": settings.APP_VERSION } @app.get("/api/health") async def api_health_check(): """API health check endpoint for frontend""" return { "status": "healthy", "service": "console-backend-api", "version": settings.APP_VERSION } if __name__ == "__main__": import uvicorn uvicorn.run( "app.main:app", host="0.0.0.0", port=8000, reload=settings.DEBUG )