feat: Update API documentation endpoints and enhance application metadata for SBD v2
All checks were successful
Backend CI / lint (push) Successful in 9m22s
Backend CI / test (push) Successful in 3m54s

This commit is contained in:
JSC
2025-08-13 13:56:01 +02:00
parent bee1076239
commit 87d6e6ed67
4 changed files with 72 additions and 75 deletions

View File

@@ -11,14 +11,14 @@ router = APIRouter()
logger = get_logger(__name__)
@router.get("/")
@router.get("/health")
def health() -> HealthResponse:
"""Health check endpoint."""
logger.info("Health check endpoint accessed")
return HealthResponse(status="healthy")
@router.get("/scalar-docs", response_class=HTMLResponse)
@router.get("/docs/scalar", response_class=HTMLResponse)
def scalar_docs() -> HTMLResponse:
"""Serve the API documentation using Scalar."""
return """
@@ -39,8 +39,8 @@ def scalar_docs() -> HTMLResponse:
"""
@router.get("/rapidoc-docs", response_class=HTMLResponse)
async def rapidoc() -> HTMLResponse:
@router.get("/docs/rapidoc", response_class=HTMLResponse)
async def rapidoc_docs() -> HTMLResponse:
"""Serve the API documentation using Rapidoc."""
return """
<!doctype html>
@@ -61,7 +61,7 @@ async def rapidoc() -> HTMLResponse:
"""
@router.get("/elements-docs", response_class=HTMLResponse)
@router.get("/docs/elements", response_class=HTMLResponse)
async def elements_docs() -> HTMLResponse:
"""Serve the API documentation using Stoplight Elements."""
return """

View File

@@ -59,12 +59,9 @@ async def lifespan(_app: FastAPI) -> AsyncGenerator[None, None]:
def create_app() -> FastAPI:
"""Create and configure the FastAPI application."""
app = FastAPI(
title="Soundboard API",
description=(
"API for the Soundboard application with authentication, "
"sound management, and real-time features"
),
version="1.0.0",
title="SBD v2 API",
description=("API for the SBD v2 application"),
version="2.0.0",
lifespan=lifespan,
# Configure docs URLs for reverse proxy setup
docs_url="/api/docs", # Swagger UI at /api/docs

View File

@@ -1,7 +1,7 @@
[project]
name = "backend"
version = "0.1.0"
description = "Add your description here"
name = "sdb"
version = "2.0.0"
description = "Backend for the SDB v2"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [

122
uv.lock generated
View File

@@ -49,67 +49,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/d0/ae/9a053dd9229c0fde6b1f1f33f609ccff1ee79ddda364c756a924c6d8563b/APScheduler-3.11.0-py3-none-any.whl", hash = "sha256:fc134ca32e50f5eadcc4938e3a4545ab19131435e851abb40b34d63d5141c6da", size = 64004 },
]
[[package]]
name = "backend"
version = "0.1.0"
source = { virtual = "." }
dependencies = [
{ name = "aiosqlite" },
{ name = "apscheduler" },
{ name = "bcrypt" },
{ name = "email-validator" },
{ name = "fastapi", extra = ["standard"] },
{ name = "ffmpeg-python" },
{ name = "httpx" },
{ name = "pydantic-settings" },
{ name = "pyjwt" },
{ name = "python-socketio" },
{ name = "python-vlc" },
{ name = "sqlmodel" },
{ name = "uvicorn", extra = ["standard"] },
{ name = "yt-dlp" },
]
[package.dev-dependencies]
dev = [
{ name = "coverage" },
{ name = "faker" },
{ name = "httpx" },
{ name = "mypy" },
{ name = "pytest" },
{ name = "pytest-asyncio" },
{ name = "ruff" },
]
[package.metadata]
requires-dist = [
{ name = "aiosqlite", specifier = "==0.21.0" },
{ name = "apscheduler", specifier = "==3.11.0" },
{ name = "bcrypt", specifier = "==4.3.0" },
{ name = "email-validator", specifier = "==2.2.0" },
{ name = "fastapi", extras = ["standard"], specifier = "==0.116.1" },
{ name = "ffmpeg-python", specifier = "==0.2.0" },
{ name = "httpx", specifier = "==0.28.1" },
{ name = "pydantic-settings", specifier = "==2.10.1" },
{ name = "pyjwt", specifier = "==2.10.1" },
{ name = "python-socketio", specifier = "==5.13.0" },
{ name = "python-vlc", specifier = "==3.0.21203" },
{ name = "sqlmodel", specifier = "==0.0.24" },
{ name = "uvicorn", extras = ["standard"], specifier = "==0.35.0" },
{ name = "yt-dlp", specifier = "==2025.7.21" },
]
[package.metadata.requires-dev]
dev = [
{ name = "coverage", specifier = "==7.10.3" },
{ name = "faker", specifier = "==37.5.3" },
{ name = "httpx", specifier = "==0.28.1" },
{ name = "mypy", specifier = "==1.17.1" },
{ name = "pytest", specifier = "==8.4.1" },
{ name = "pytest-asyncio", specifier = "==1.1.0" },
{ name = "ruff", specifier = "==0.12.8" },
]
[[package]]
name = "bcrypt"
version = "4.3.0"
@@ -927,6 +866,67 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/cb/5c/799a1efb8b5abab56e8a9f2a0b72d12bd64bb55815e9476c7d0a2887d2f7/ruff-0.12.8-py3-none-win_arm64.whl", hash = "sha256:c90e1a334683ce41b0e7a04f41790c429bf5073b62c1ae701c9dc5b3d14f0749", size = 11884718 },
]
[[package]]
name = "sdb"
version = "2.0.0"
source = { virtual = "." }
dependencies = [
{ name = "aiosqlite" },
{ name = "apscheduler" },
{ name = "bcrypt" },
{ name = "email-validator" },
{ name = "fastapi", extra = ["standard"] },
{ name = "ffmpeg-python" },
{ name = "httpx" },
{ name = "pydantic-settings" },
{ name = "pyjwt" },
{ name = "python-socketio" },
{ name = "python-vlc" },
{ name = "sqlmodel" },
{ name = "uvicorn", extra = ["standard"] },
{ name = "yt-dlp" },
]
[package.dev-dependencies]
dev = [
{ name = "coverage" },
{ name = "faker" },
{ name = "httpx" },
{ name = "mypy" },
{ name = "pytest" },
{ name = "pytest-asyncio" },
{ name = "ruff" },
]
[package.metadata]
requires-dist = [
{ name = "aiosqlite", specifier = "==0.21.0" },
{ name = "apscheduler", specifier = "==3.11.0" },
{ name = "bcrypt", specifier = "==4.3.0" },
{ name = "email-validator", specifier = "==2.2.0" },
{ name = "fastapi", extras = ["standard"], specifier = "==0.116.1" },
{ name = "ffmpeg-python", specifier = "==0.2.0" },
{ name = "httpx", specifier = "==0.28.1" },
{ name = "pydantic-settings", specifier = "==2.10.1" },
{ name = "pyjwt", specifier = "==2.10.1" },
{ name = "python-socketio", specifier = "==5.13.0" },
{ name = "python-vlc", specifier = "==3.0.21203" },
{ name = "sqlmodel", specifier = "==0.0.24" },
{ name = "uvicorn", extras = ["standard"], specifier = "==0.35.0" },
{ name = "yt-dlp", specifier = "==2025.7.21" },
]
[package.metadata.requires-dev]
dev = [
{ name = "coverage", specifier = "==7.10.3" },
{ name = "faker", specifier = "==37.5.3" },
{ name = "httpx", specifier = "==0.28.1" },
{ name = "mypy", specifier = "==1.17.1" },
{ name = "pytest", specifier = "==8.4.1" },
{ name = "pytest-asyncio", specifier = "==1.1.0" },
{ name = "ruff", specifier = "==0.12.8" },
]
[[package]]
name = "sentry-sdk"
version = "2.33.0"