from __future__ import annotations import re from pydantic import BaseModel, ConfigDict, field_validator _EMAIL_RE = re.compile(r"^[^@\s]+@[^@\s]+\.[^@\s]+$") class ContactLeadIn(BaseModel): name: str email: str phone: str | None = None message: str @field_validator("name") @classmethod def validate_name(cls, v: str) -> str: v = v.strip() if len(v) < 2: raise ValueError("Nome deve ter pelo menos 2 caracteres.") if len(v) > 150: raise ValueError("Nome deve ter no máximo 150 caracteres.") return v @field_validator("email") @classmethod def validate_email(cls, v: str) -> str: v = v.strip().lower() if not _EMAIL_RE.match(v): raise ValueError("E-mail inválido.") if len(v) > 254: raise ValueError("E-mail deve ter no máximo 254 caracteres.") return v @field_validator("phone") @classmethod def validate_phone(cls, v: str | None) -> str | None: if v is None: return v v = v.strip() if not v: return None if len(v) > 20: raise ValueError("Telefone deve ter no máximo 20 caracteres.") return v @field_validator("message") @classmethod def validate_message(cls, v: str) -> str: v = v.strip() if len(v) < 10: raise ValueError("Mensagem deve ter pelo menos 10 caracteres.") if len(v) > 2000: raise ValueError("Mensagem deve ter no máximo 2000 caracteres.") return v class ContactLeadCreatedOut(BaseModel): model_config = ConfigDict(from_attributes=True) id: int message: str