# services/tenant/app/main.py """ Tenant Service FastAPI application """ import structlog from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.core.config import settings from app.core.database import engine from app.api import tenants from shared.monitoring.logging import setup_logging from shared.monitoring.metrics import MetricsCollector # Setup logging setup_logging("tenant-service", settings.LOG_LEVEL) logger = structlog.get_logger() # Create FastAPI app app = FastAPI( title="Tenant Management Service", description="Multi-tenant bakery management service", version="1.0.0", docs_url="/docs", redoc_url="/redoc" ) # Initialize metrics metrics_collector = MetricsCollector("tenant_service") app.state.metrics_collector = metrics_collector # CORS middleware app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Include routers app.include_router(tenants.router, prefix="/api/v1", tags=["tenants"]) @app.on_event("startup") async def startup_event(): """Initialize service on startup""" logger.info("Starting Tenant Service...") @app.on_event("shutdown") async def shutdown_event(): """Cleanup on shutdown""" logger.info("Shutting down Tenant Service...") await engine.dispose() @app.get("/health") async def health_check(): """Health check endpoint""" return { "status": "healthy", "service": "tenant-service", "version": "1.0.0" } @app.get("/metrics") async def metrics(): """Prometheus metrics endpoint""" return metrics_collector.generate_latest() if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)