"""Main FastAPI application for AI Insights Service.""" from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from contextlib import asynccontextmanager import structlog from app.core.config import settings from app.core.database import init_db, close_db from app.api import insights # Configure structured logging structlog.configure( processors=[ structlog.processors.TimeStamper(fmt="iso"), structlog.processors.JSONRenderer() ] ) logger = structlog.get_logger() @asynccontextmanager async def lifespan(app: FastAPI): """Lifespan event handler for startup and shutdown.""" # Startup logger.info("Starting AI Insights Service", service=settings.SERVICE_NAME, version=settings.SERVICE_VERSION) await init_db() logger.info("Database initialized") yield # Shutdown logger.info("Shutting down AI Insights Service") await close_db() logger.info("Database connections closed") # Create FastAPI app app = FastAPI( title="AI Insights Service", description="Intelligent insights and recommendations for bakery operations", version=settings.SERVICE_VERSION, lifespan=lifespan ) # CORS middleware app.add_middleware( CORSMiddleware, allow_origins=settings.ALLOWED_ORIGINS, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Include routers app.include_router( insights.router, prefix=settings.API_V1_PREFIX, tags=["insights"] ) @app.get("/") async def root(): """Root endpoint.""" return { "service": settings.SERVICE_NAME, "version": settings.SERVICE_VERSION, "status": "running" } @app.get("/health") async def health_check(): """Health check endpoint.""" return { "status": "healthy", "service": settings.SERVICE_NAME, "version": settings.SERVICE_VERSION } if __name__ == "__main__": import uvicorn uvicorn.run( "app.main:app", host="0.0.0.0", port=8000, reload=True, log_level=settings.LOG_LEVEL.lower() )