from fastapi import APIRouter, Depends, HTTPException from pydantic import BaseModel from sqlalchemy.ext.asyncio import AsyncSession from app.auth.dependencies import get_current_user from app.models.user import User from app.utils.db import get_async_session router = APIRouter() class ChangeUsernameRequest(BaseModel): username: str @router.patch("/users/change-username") async def change_username( data: ChangeUsernameRequest, user_info: dict = Depends(get_current_user), session: AsyncSession = Depends(get_async_session), ): if not user_info["authenticated"]: raise HTTPException(status_code=401, detail="Not authenticated") user = user_info["user"] if len(data.username) < 3: raise HTTPException(status_code=400, detail="Username too short") db_user = await session.get(User, user["id"]) if not db_user: raise HTTPException(status_code=404, detail="User not found") db_user.username = data.username await session.commit() await session.refresh(db_user) return {"success": True, "username": db_user.username}