feat: add GET /api/v1/stats endpoint with technique and creator counts
This commit is contained in:
parent
b35082602f
commit
9f0b0922b0
2 changed files with 31 additions and 1 deletions
|
|
@ -12,7 +12,7 @@ from fastapi import FastAPI
|
||||||
from fastapi.middleware.cors import CORSMiddleware
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
|
|
||||||
from config import get_settings
|
from config import get_settings
|
||||||
from routers import creators, health, ingest, pipeline, reports, search, techniques, topics, videos
|
from routers import creators, health, ingest, pipeline, reports, search, stats, techniques, topics, videos
|
||||||
|
|
||||||
|
|
||||||
def _setup_logging() -> None:
|
def _setup_logging() -> None:
|
||||||
|
|
@ -83,6 +83,7 @@ app.include_router(ingest.router, prefix="/api/v1")
|
||||||
app.include_router(pipeline.router, prefix="/api/v1")
|
app.include_router(pipeline.router, prefix="/api/v1")
|
||||||
app.include_router(reports.router, prefix="/api/v1")
|
app.include_router(reports.router, prefix="/api/v1")
|
||||||
app.include_router(search.router, prefix="/api/v1")
|
app.include_router(search.router, prefix="/api/v1")
|
||||||
|
app.include_router(stats.router, prefix="/api/v1")
|
||||||
app.include_router(techniques.router, prefix="/api/v1")
|
app.include_router(techniques.router, prefix="/api/v1")
|
||||||
app.include_router(topics.router, prefix="/api/v1")
|
app.include_router(topics.router, prefix="/api/v1")
|
||||||
app.include_router(videos.router, prefix="/api/v1")
|
app.include_router(videos.router, prefix="/api/v1")
|
||||||
|
|
|
||||||
29
backend/routers/stats.py
Normal file
29
backend/routers/stats.py
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
"""Public stats endpoints for Chrysopedia."""
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from fastapi import APIRouter, Depends
|
||||||
|
from sqlalchemy import func, select
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
|
from database import get_session
|
||||||
|
from models import Creator, TechniquePage
|
||||||
|
|
||||||
|
logger = logging.getLogger("chrysopedia.stats")
|
||||||
|
|
||||||
|
router = APIRouter(tags=["stats"])
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/stats")
|
||||||
|
async def get_stats(db: AsyncSession = Depends(get_session)) -> dict:
|
||||||
|
"""Return aggregate counts for the knowledge base."""
|
||||||
|
technique_count = await db.scalar(
|
||||||
|
select(func.count()).select_from(TechniquePage)
|
||||||
|
)
|
||||||
|
creator_count = await db.scalar(
|
||||||
|
select(func.count()).select_from(Creator)
|
||||||
|
)
|
||||||
|
return {
|
||||||
|
"technique_count": technique_count or 0,
|
||||||
|
"creator_count": creator_count or 0,
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue