from typing import Optional from pydantic import BaseModel, field_validator from datetime import datetime import re class UserBase(BaseModel): email: Optional[str] = None username: Optional[str] = None is_active: Optional[bool] = True is_verified: Optional[bool] = False @field_validator('email') @classmethod def validate_email(cls, v): if v is not None: email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' if not re.match(email_pattern, v): raise ValueError('Invalid email format') return v class UserCreate(UserBase): email: str username: str password: str class UserUpdate(UserBase): password: Optional[str] = None class UserInDBBase(UserBase): id: Optional[int] = None created_at: Optional[datetime] = None updated_at: Optional[datetime] = None class Config: from_attributes = True class User(UserInDBBase): pass class UserInDB(UserInDBBase): hashed_password: str