""" Main FastAPI application """ from fastapi import FastAPI, Depends, HTTPException, status from fastapi.middleware.cors import CORSMiddleware from fastapi.security import HTTPBearer from contextlib import asynccontextmanager import logging from .config.settings import settings from .database import init_db, SessionLocal from .api.v1.router import api_router from .middleware.tenant import TenantMiddleware # Set up logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) @asynccontextmanager async def lifespan(app: FastAPI): """Application lifespan events""" # Startup logger.info("Initializing database...") init_db() logger.info("Database initialized successfully") yield # Shutdown logger.info("Application shutting down...") # Create FastAPI app app = FastAPI( title=settings.APP_NAME, version=settings.APP_VERSION, description="MerchantsOfHope - Recruiting Platform for TSYS Group", lifespan=lifespan ) # Add middleware app.add_middleware( CORSMiddleware, allow_origins=settings.ALLOWED_HOSTS, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Add tenant middleware for multi-tenancy app.add_middleware(TenantMiddleware) # Add authentication scheme security = HTTPBearer() # Include API routers app.include_router(api_router, prefix="/api/v1") @app.get("/") async def root(): """Root endpoint""" return { "message": f"Welcome to {settings.APP_NAME} v{settings.APP_VERSION}", "tenant_support": settings.MULTI_TENANT_ENABLED } def get_db(): """Database session dependency""" db = SessionLocal() try: yield db finally: db.close() @app.get("/health") async def health_check(): """Health check endpoint""" return {"status": "healthy", "version": settings.APP_VERSION}