from pydantic import BaseModel, EmailStr, Field, field_validator from app.core.password_policy import validate_password_strength class UserCreate(BaseModel): email: EmailStr full_name: str = Field(min_length=2, max_length=255) password: str = Field(min_length=10, max_length=255) role: str = Field(default="reader", pattern="^(admin|editor|reader)$") @field_validator("password") @classmethod def strong_password(cls, value: str) -> str: validate_password_strength(value) return value class ProfileUpdate(BaseModel): email: EmailStr full_name: str = Field(min_length=2, max_length=255) class PasswordChange(BaseModel): new_password: str = Field(min_length=10, max_length=255) @field_validator("new_password") @classmethod def strong_password(cls, value: str) -> str: validate_password_strength(value) return value class UserRoleUpdate(BaseModel): role: str = Field(pattern="^(admin|editor|reader)$") class UserOut(BaseModel): id: int email: EmailStr full_name: str role: str is_active: bool class Config: from_attributes = True