""" Authentication Service Handles user authentication, registration, and token management """ import logging from datetime import timedelta from fastapi import FastAPI, Depends, HTTPException, status from fastapi.middleware.cors import CORSMiddleware from fastapi.security import HTTPBearer from app.core.config import settings from app.core.database import database_manager from app.api import auth, users from app.services.messaging import message_publisher from shared.monitoring.logging import setup_logging from shared.monitoring.metrics import MetricsCollector # Setup logging setup_logging("auth-service", settings.LOG_LEVEL) logger = logging.getLogger(__name__) # Create FastAPI app app = FastAPI( title="Authentication Service", description="User authentication and authorization service", version="1.0.0" ) # Initialize metrics collector metrics_collector = MetricsCollector("auth-service") # CORS middleware app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Include routers app.include_router(auth.router, prefix="/auth", tags=["authentication"]) app.include_router(users.router, prefix="/users", tags=["users"]) @app.on_event("startup") async def startup_event(): """Application startup""" logger.info("Starting Authentication Service") # Create database tables await database_manager.create_tables() # Initialize message publisher await message_publisher.connect() # Start metrics server metrics_collector.start_metrics_server(8080) logger.info("Authentication Service started successfully") @app.on_event("shutdown") async def shutdown_event(): """Application shutdown""" logger.info("Shutting down Authentication Service") # Cleanup message publisher await message_publisher.disconnect() logger.info("Authentication Service shutdown complete") @app.get("/health") async def health_check(): """Health check endpoint""" return { "status": "healthy", "service": "auth-service", "version": "1.0.0" } if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)