from typing import Optional from pydantic import BaseModel, EmailStr, Field, validator # Shared properties class UserBase(BaseModel): email: EmailStr full_name: Optional[str] = None phone: Optional[str] = None address: Optional[str] = None is_active: bool = True is_admin: bool = False # Properties to receive via API on creation class UserCreate(UserBase): password: str = Field(..., min_length=8) password_confirm: str @validator('password_confirm') def passwords_match(cls, v, values, **kwargs): if 'password' in values and v != values['password']: raise ValueError('passwords do not match') return v # Properties to receive via API on update class UserUpdate(UserBase): email: Optional[EmailStr] = None password: Optional[str] = Field(None, min_length=8) # Properties to return via API class User(UserBase): id: str class Config: orm_mode = True