This commit is contained in:
@@ -7,11 +7,37 @@ from pydantic import BaseModel, EmailStr, Field, field_validator
|
||||
|
||||
class UserBase(BaseModel):
|
||||
email: EmailStr
|
||||
username: Optional[str] = None
|
||||
phone: Optional[str] = None
|
||||
first_name: str = Field(..., min_length=1, max_length=50)
|
||||
last_name: str = Field(..., min_length=1, max_length=50)
|
||||
phone_number: Optional[str] = None # Альтернативное поле для phone
|
||||
first_name: Optional[str] = ""
|
||||
last_name: Optional[str] = ""
|
||||
full_name: Optional[str] = None # Будет разделено на first_name и last_name
|
||||
date_of_birth: Optional[date] = None
|
||||
bio: Optional[str] = Field(None, max_length=500)
|
||||
|
||||
@field_validator("full_name")
|
||||
@classmethod
|
||||
def split_full_name(cls, v, info):
|
||||
"""Разделяет полное имя на first_name и last_name."""
|
||||
if v:
|
||||
values = info.data
|
||||
parts = v.split(" ", 1)
|
||||
if "first_name" in values and not values["first_name"]:
|
||||
info.data["first_name"] = parts[0]
|
||||
if "last_name" in values and not values["last_name"]:
|
||||
info.data["last_name"] = parts[1] if len(parts) > 1 else ""
|
||||
return v
|
||||
|
||||
@field_validator("phone_number")
|
||||
@classmethod
|
||||
def map_phone_number(cls, v, info):
|
||||
"""Копирует phone_number в phone если phone не указан."""
|
||||
if v:
|
||||
values = info.data
|
||||
if "phone" in values and not values["phone"]:
|
||||
info.data["phone"] = v
|
||||
return v
|
||||
|
||||
|
||||
class UserCreate(UserBase):
|
||||
@@ -65,7 +91,8 @@ class UserResponse(UserBase):
|
||||
|
||||
|
||||
class UserLogin(BaseModel):
|
||||
email: EmailStr
|
||||
email: Optional[EmailStr] = None
|
||||
username: Optional[str] = None
|
||||
password: str
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user