summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorl3wdfut4pwr <l3wdfut4pwr@gmail.com>2026-04-27 14:17:51 +0300
committerl3wdfut4pwr <l3wdfut4pwr@gmail.com>2026-04-27 14:17:51 +0300
commitcf6d551f7837878a198d1a988a9ba32f90473e3a (patch)
tree1325a7f6b932bd35fa626590f8674ba1faf0af27
parent4848a9e9394b283022085a6305d00f94b11cd703 (diff)
add description change
-rw-r--r--app/models/user.py21
-rw-r--r--app/routes/users/user.py22
-rw-r--r--app/schemas/profile.py6
3 files changed, 42 insertions, 7 deletions
diff --git a/app/models/user.py b/app/models/user.py
index 11f5107..76ccc84 100644
--- a/app/models/user.py
+++ b/app/models/user.py
@@ -19,17 +19,26 @@ class User(Base):
__tablename__ = "users"
id: Mapped[int] = mapped_column(Integer, primary_key=True)
- username: Mapped[str] = mapped_column(String(20), unique=True, nullable=False)
+ username: Mapped[str] = mapped_column(
+ String(20), unique=True, nullable=False
+ )
password: Mapped[str | None] = mapped_column(String(255), nullable=True)
email: Mapped[str] = mapped_column(String(120), unique=True, nullable=False)
google_id: Mapped[str | None] = mapped_column(
String(255), unique=True, nullable=True
)
- description: Mapped[str | None] = mapped_column(String(250), nullable=True)
- premium: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
- is_banned: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
- is_moderator: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
- token_version: Mapped[int] = mapped_column(Integer, default=0, nullable=False)
+ premium: Mapped[bool] = mapped_column(
+ Boolean, default=False, nullable=False
+ )
+ is_banned: Mapped[bool] = mapped_column(
+ Boolean, default=False, nullable=False
+ )
+ is_moderator: Mapped[bool] = mapped_column(
+ Boolean, default=False, nullable=False
+ )
+ token_version: Mapped[int] = mapped_column(
+ Integer, default=0, nullable=False
+ )
profile: Mapped["Profile"] = relationship(
"Profile", back_populates="user", uselist=False, lazy="selectin"
diff --git a/app/routes/users/user.py b/app/routes/users/user.py
index 1eb096d..8b0b4f5 100644
--- a/app/routes/users/user.py
+++ b/app/routes/users/user.py
@@ -1,7 +1,9 @@
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.ext.asyncio import AsyncSession
+from app.auth.dependencies import get_current_user
from app.models.user import User
+from app.schemas.profile import DescriptionUpdate
from app.schemas.user import UserRead
from app.utils.db import get_async_session
@@ -19,3 +21,23 @@ async def get_user(
raise HTTPException(status_code=404, detail="User not found")
return UserRead.model_validate(user)
+
+
+@router.patch("/description")
+async def update_description(
+ payload: DescriptionUpdate,
+ user: User = Depends(get_current_user),
+ session: AsyncSession = Depends(get_async_session),
+):
+ profile = user.profile
+
+ if not profile:
+ raise HTTPException(status_code=404, detail="Profile not found")
+
+ profile.description = payload.description
+
+ session.add(profile)
+ await session.commit()
+ await session.refresh(profile)
+
+ return {"description": profile.description}
diff --git a/app/schemas/profile.py b/app/schemas/profile.py
index ab54425..1c62a97 100644
--- a/app/schemas/profile.py
+++ b/app/schemas/profile.py
@@ -1,6 +1,6 @@
from typing import Optional
-from pydantic import BaseModel
+from pydantic import BaseModel, Field
class ProfileRead(BaseModel):
@@ -19,3 +19,7 @@ class ProfileRead(BaseModel):
model_config = {
"from_attributes": True,
}
+
+
+class DescriptionUpdate(BaseModel):
+ description: str = Field(max_length=250)