File size: 863 Bytes
b4929ca
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from fastapi import FastAPI, Request
from fastapi.responses import RedirectResponse
from fastapi.routing import APIRoute

from .config import settings
from .routes.main import api_router


def create_app() -> FastAPI:
    app = FastAPI(
        title="Leaderboard API",
        description="API for the Leaderboard",
        version="0.1.0",
        docs_url=f"{settings.API_V1_STR}/docs",
        openapi_url=f"{settings.API_V1_STR}/openapi.json",
        generate_unique_id_function=custom_generate_unique_id,
    )

    app.include_router(api_router, prefix=settings.API_V1_STR)
    app.add_route("/", _redirect_to_docs, methods=["GET"])

    return app


def custom_generate_unique_id(route: APIRoute) -> str:
    return f"{route.tags[0]}-{route.name}"


async def _redirect_to_docs(_: Request):
    return RedirectResponse(url=f"{settings.API_V1_STR}/docs")