"""FastAPI application entrypoint."""
from fastapi import FastAPI
from fastapi.exceptions import RequestValidationError
from sqlalchemy import text
from gnexus_creds.api import admin_router
from gnexus_creds.api import router as api_router
from gnexus_creds.config import get_settings
from gnexus_creds.db import SessionLocal
from gnexus_creds.errors import AppError, app_error_handler, validation_error_handler
from gnexus_creds.logging import configure_logging
from gnexus_creds.mcp import router as mcp_router
from gnexus_creds.oauth import router as auth_router
from gnexus_creds.oauth import webhook_router
def create_app() -> FastAPI:
configure_logging()
settings = get_settings()
app = FastAPI(title=settings.app_name, version="0.1.0")
app.add_exception_handler(AppError, app_error_handler)
app.add_exception_handler(RequestValidationError, validation_error_handler)
app.include_router(auth_router)
app.include_router(webhook_router)
app.include_router(api_router)
app.include_router(admin_router)
app.include_router(mcp_router)
@app.get("/health", tags=["system"])
async def health() -> dict[str, str]:
return {"status": "ok"}
@app.get("/ready", tags=["system"])
async def ready() -> dict[str, str]:
with SessionLocal() as db:
db.execute(text("select 1"))
return {"status": "ok"}
return app
app = create_app()