sass-imobiliaria/backend/app/schemas/auth.py

68 lines
1.7 KiB
Python

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