Newer
Older
gnexus-creds / gnexus_creds / main.py
@Eugene Sukhodolskiy Eugene Sukhodolskiy 4 days ago 1 KB Implement initial gnexus-creds MVP scaffold
"""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()