52 lines
1.7 KiB
Python
Executable File
52 lines
1.7 KiB
Python
Executable File
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 |