80 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""
 | 
						|
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 (skip in testing)
 | 
						|
import os
 | 
						|
if os.getenv("TESTING", "False").lower() != "true":
 | 
						|
    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} |