from pydantic import BaseModel, EmailStr, field_validator from datetime import datetime, date from typing import Optional class RegisterIn(BaseModel): name: str email: EmailStr password: str # Campos opcionais — enriquecimento de perfil (feature 012) phone: Optional[str] = None whatsapp: Optional[str] = None cpf: Optional[str] = None birth_date: Optional[date] = None address_street: Optional[str] = None address_number: Optional[str] = None address_complement: Optional[str] = None address_neighborhood: Optional[str] = None address_city: Optional[str] = None address_state: Optional[str] = None address_zip: Optional[str] = None @field_validator("name") @classmethod def name_not_empty(cls, v: str) -> str: if not v.strip(): raise ValueError("Nome não pode ser vazio") if len(v.strip()) < 2: raise ValueError("Nome deve ter pelo menos 2 caracteres") return v.strip() @field_validator("email") @classmethod def email_lowercase(cls, v: str) -> str: return v.lower().strip() @field_validator("password") @classmethod def password_min_length(cls, v: str) -> str: if len(v) < 8: raise ValueError("Senha deve ter pelo menos 8 caracteres") return v class LoginIn(BaseModel): email: EmailStr password: str @field_validator("email") @classmethod def email_lowercase(cls, v: str) -> str: return v.lower().strip() class UserOut(BaseModel): id: str name: str email: str role: str created_at: datetime model_config = {"from_attributes": True} class AuthTokenOut(BaseModel): access_token: str user: UserOut