from fastapi import APIRouter, Request, Depends from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates from sqlalchemy import select from app.models.base import async_session from app.models.user import User from app.models.exercise import Exercise from app.auth import get_current_user router = APIRouter() templates = Jinja2Templates(directory="app/templates") @router.get("/exercises", response_class=HTMLResponse) async def exercise_list( request: Request, user: User = Depends(get_current_user), body_part: str = None, ): async with async_session() as session: query = select(Exercise).order_by(Exercise.name) if body_part: query = query.where(Exercise.body_part == body_part) result = await session.execute(query) exercises = result.scalars().all() result = await session.execute( select(Exercise.body_part).distinct().order_by(Exercise.body_part) ) body_parts = [r[0] for r in result.all() if r[0]] return templates.TemplateResponse(request, "exercises.html", { "user": user, "exercises": exercises, "body_parts": body_parts, "selected_body_part": body_part, })