from pydantic import BaseModel, EmailStr, field_validator, ConfigDict from typing import Optional from datetime import date # Alap adatok, amik mindenhol kellenek class UserBase(BaseModel): email: EmailStr first_name: Optional[str] = None last_name: Optional[str] = None is_active: Optional[bool] = True is_superuser: bool = False region_code: str = "HU" # --- REGISZTRÁCIÓ --- class UserRegister(UserBase): password: str birthday: Optional[date] = None is_company: bool = False company_name: Optional[str] = None tax_number: Optional[str] = None @field_validator('email') @classmethod def block_temporary_emails(cls, v: str) -> str: blacklist = ['mailinator.com', '10minutemail.com', 'temp-mail.org', 'guerrillamail.com'] domain = v.split('@')[-1].lower() if domain in blacklist: raise ValueError('Ideiglenes email szolgáltató nem engedélyezett!') return v @field_validator('tax_number') @classmethod def validate_tax_id(cls, v: Optional[str], info) -> Optional[str]: if info.data.get('is_company') and (not v or len(v) < 8): raise ValueError('Cég esetén az adószám első 8 karaktere kötelező!') return v # --- VÁLASZ (Ezt hiányolta a rendszer!) --- class UserResponse(UserBase): id: int is_company: bool company_name: Optional[str] = None # Pydantic V2 konfiguráció az ORM (SQLAlchemy) támogatáshoz model_config = ConfigDict(from_attributes=True) # Frissítéshez használt séma class UserUpdate(BaseModel): password: Optional[str] = None first_name: Optional[str] = None last_name: Optional[str] = None email: Optional[EmailStr] = None