from fastapi import APIRouter, Request, Depends from fastapi.responses import RedirectResponse from fastapi.templating import Jinja2Templates from sqlalchemy.orm import Session from web.auth import get_current_user from web.database import get_db from web.models import User from web.schemas import validate_profile router = APIRouter() templates = Jinja2Templates(directory="web/templates") @router.get("/profile") def profile_view(request: Request, user: User | None = Depends(get_current_user)): if not user: return RedirectResponse("/login", 303) return templates.TemplateResponse("profile.html", {"request": request, "user": user}) @router.post("/profile") async def profile_update( request: Request, db: Session = Depends(get_db), user: User | None = Depends(get_current_user), ): if not user: return RedirectResponse("/login", 303) form = await request.form() data = dict(form) errors = validate_profile(data) if not errors: existing = db.query(User).filter( User.phone == data["phone"].strip(), User.id != user.id ).first() if existing: errors.append("Пользователь с таким телефоном уже существует") if errors: return templates.TemplateResponse("profile.html", { "request": request, "user": user, "errors": errors, "form": data, }) user.first_name = data["first_name"].strip() user.last_name = data["last_name"].strip() user.phone = data["phone"].strip() db.commit() return templates.TemplateResponse("profile.html", { "request": request, "user": user, "success": "Профиль обновлен", })