from typing import Required import uuid from pydantic import BaseModel, ConfigDict, Field, field_validator, StrictBool class AdminCreateUser(BaseModel): model_config = ConfigDict(extra="forbid") username: str = Field(..., max_length=20, description='username of the user') phone_number: str | None = Field(None, max_length=11, description='phone number of user') # validate phone number @field_validator('phone_number') def validate_phone_number(cls, v: str | None) -> str | None: if v is None: return None if not v.isdigit(): raise ValueError('شماره تلفن باید عدد باشد') if len(v) != 11: raise ValueError('شماره تلفن باید 11 رقم باشد') if not v.startswith('09'): raise ValueError('شماره تلفن باید با 09 شروع شود') return v class AdminUserResponse(BaseModel): id: uuid.UUID = Field(...) username: str = Field(..., max_length=20, description='username of the user') phone_number: str | None = Field(..., description='phone number of user') is_admin: bool = Field(..., description='is admin') is_active: bool = Field(..., description='is active') @field_validator('phone_number') def validate_phone_number(cls, v: str | None) -> str | None: if v is None: return None if not v.isdigit(): raise ValueError('شماره تلفن باید عدد باشد') if len(v) != 11: raise ValueError('شماره تلفن باید 11 رقم باشد') if not v.startswith('09'): raise ValueError('شماره تلفن باید با 09 شروع شود') return v class Config: from_attributes = True class AdminCreateUserResult(BaseModel): user: AdminUserResponse = Field(...) secret: str = Field(...) class AdminResetSecretResult(BaseModel): secret: str = Field(...)