elmeg-demo/backend/routers/stats.py

26 lines
853 B
Python

from typing import List
from fastapi import APIRouter, Depends, Query
from sqlmodel import Session, select, func
from database import get_session
from models import Song, Performance
router = APIRouter(prefix="/stats", tags=["stats"])
@router.get("/top-songs")
def get_top_songs(
limit: int = Query(default=10, le=50),
session: Session = Depends(get_session)
):
"""Get top songs by number of performances"""
query = (
select(Song.id, Song.title, func.count(Performance.id).label("performance_count"))
.join(Performance, Song.id == Performance.song_id)
.group_by(Song.id, Song.title)
.order_by(func.count(Performance.id).desc())
.limit(limit)
)
results = session.exec(query).all()
return [
{"id": r[0], "title": r[1], "performance_count": r[2]}
for r in results
]