"""FastAPI application entry point.""" from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.trustedhost import TrustedHostMiddleware from app.config import settings from app.api.v1 import auth, tenants, users, roles, api_keys, billing, audit, reports, plugins, dashboard from app.database import engine, Base from app.core.exceptions import setup_exception_handlers @asynccontextmanager async def lifespan(app: FastAPI): """Application lifespan handler.""" # Startup async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) yield # Shutdown await engine.dispose() app = FastAPI( title="LandveX Admin API", description="Admin backend API for LandveX Enterprise Platform", version="1.0.0", lifespan=lifespan, ) # Security middleware app.add_middleware( CORSMiddleware, allow_origins=settings.CORS_ORIGINS, allow_credentials=True, allow_methods=["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"], allow_headers=["*"], expose_headers=["X-Request-ID"], ) app.add_middleware( TrustedHostMiddleware, allowed_hosts=settings.ALLOWED_HOSTS, ) # Exception handlers setup_exception_handlers(app) # API routes app.include_router(auth.router, prefix="/api/v1/auth", tags=["Auth"]) app.include_router(tenants.router, prefix="/api/v1/tenants", tags=["Tenants"]) app.include_router(users.router, prefix="/api/v1/users", tags=["Users"]) app.include_router(roles.router, prefix="/api/v1/roles", tags=["Roles"]) app.include_router(api_keys.router, prefix="/api/v1/api-keys", tags=["API Keys"]) app.include_router(billing.router, prefix="/api/v1/billing", tags=["Billing"]) app.include_router(audit.router, prefix="/api/v1/audit-logs", tags=["Audit Logs"]) app.include_router(reports.router, prefix="/api/v1/reports", tags=["Reports"]) app.include_router(plugins.router, prefix="/api/v1/plugins", tags=["Plugins"]) app.include_router(dashboard.router, prefix="/api/v1/dashboard", tags=["Dashboard"]) @app.get("/health") async def health_check(): """Health check endpoint.""" return {"status": "healthy", "version": "1.0.0"}