49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
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("profile.html", {
|
|
"request": request,
|
|
"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)
|