from datetime import datetime from typing import Optional from pydantic import BaseModel, ConfigDict, EmailStr, field_validator ROLE_INTEREST_OPTIONS = [ "Corretor(a)", "Assistente Administrativo", "Estagiário(a)", "Outro", ] class JobApplicationIn(BaseModel): name: str email: EmailStr phone: Optional[str] = None role_interest: str message: str file_name: Optional[str] = None @field_validator("name") @classmethod def name_not_empty(cls, v: str) -> str: v = v.strip() if not v: raise ValueError("Nome não pode ser vazio") return v @field_validator("role_interest") @classmethod def valid_role(cls, v: str) -> str: if v not in ROLE_INTEREST_OPTIONS: raise ValueError(f"Cargo inválido. Opções: {ROLE_INTEREST_OPTIONS}") return v @field_validator("message") @classmethod def message_not_empty(cls, v: str) -> str: v = v.strip() if not v: raise ValueError("Mensagem não pode ser vazia") if len(v) > 5000: raise ValueError("Mensagem não pode ultrapassar 5000 caracteres") return v class JobApplicationOut(BaseModel): model_config = ConfigDict(from_attributes=True) id: int name: str email: str phone: Optional[str] role_interest: str message: str file_name: Optional[str] status: str created_at: datetime