from fastapi import APIRouter, Request, Depends, Form from fastapi.responses import HTMLResponse, RedirectResponse from fastapi.templating import Jinja2Templates from app.models.base import async_session from app.models.user import User from app.auth import get_current_user router = APIRouter() templates = Jinja2Templates(directory="app/templates") @router.get("/profile", response_class=HTMLResponse) async def profile_page(request: Request, user: User = Depends(get_current_user)): return templates.TemplateResponse(request, "profile.html", { "user": user, }) @router.post("/profile") async def update_profile( request: Request, user: User = Depends(get_current_user), display_name: str = Form(default=None), weight_lb: float = Form(default=None), calorie_goal: int = Form(default=None), step_goal: int = Form(default=None), medical_notes: str = Form(default=""), goals: str = Form(default=""), equipment: str = Form(default=""), ): async with async_session() as session: session.add(user) if display_name is not None: user.display_name = display_name if weight_lb is not None: user.weight_lb = weight_lb if calorie_goal is not None: user.calorie_goal = calorie_goal if step_goal is not None: user.step_goal = step_goal user.medical_notes = medical_notes user.goals = goals user.equipment = equipment await session.commit() return RedirectResponse(url="/profile", status_code=303)