2026.06.05 frontend javítgatás és új belépési logika megvalósítva

This commit is contained in:
Roo
2026-06-05 05:46:04 +00:00
parent 59a30ac428
commit 18524a08f2
38 changed files with 3967 additions and 1028 deletions

View File

@@ -4,8 +4,8 @@ from typing import Optional, Dict, List
from datetime import date, datetime
class DocumentDetail(BaseModel):
number: str
expiry_date: date
number: Optional[str] = None
expiry_date: Optional[date] = None
class ICEContact(BaseModel):
name: str
@@ -26,7 +26,9 @@ class UserLiteRegister(BaseModel):
model_config = ConfigDict(from_attributes=True)
class UserKYCComplete(BaseModel):
""" Step 2: Teljes körű személyazonosítás és címadatok. """
""" Step 2: Teljes körű személyazonosítás és címadatok (Soft KYC). """
first_name: Optional[str] = None
last_name: Optional[str] = None
phone_number: Optional[str] = Field(default=None, pattern=r"^\+?[0-9]{7,15}$")
birth_place: Optional[str] = None
birth_date: Optional[date] = None
@@ -34,19 +36,19 @@ class UserKYCComplete(BaseModel):
mothers_first_name: Optional[str] = None
region_code: Optional[str] = "HU"
# Atomizált címadatok a pontos GPS-hez és Robot-munkához
# Soft KYC: Csak az irányítószám és város kötelező, a többi opcionális
address_zip: str
address_city: str
address_street_name: str
address_street_type: str # utca, út, tér...
address_house_number: str
address_street_name: Optional[str] = None
address_street_type: Optional[str] = None # utca, út, tér...
address_house_number: Optional[str] = None
address_stairwell: Optional[str] = None
address_floor: Optional[str] = None
address_door: Optional[str] = None
address_hrsz: Optional[str] = None # Külterület/Helyrajzi szám
# Okmányok és Vészhelyzet
identity_docs: Dict[str, DocumentDetail] # pl: {"ID_CARD": {...}, "LICENSE": {...}}
# Okmányok és Vészhelyzet (Opcionális Soft KYC)
identity_docs: Optional[Dict[str, DocumentDetail]] = None # pl: {"ID_CARD": {...}, "LICENSE": {...}}
ice_contact: Optional[ICEContact] = None
preferred_language: str = "hu"

View File

@@ -1,7 +1,46 @@
# /opt/docker/dev/service_finder/backend/app/schemas/user.py
import uuid
from pydantic import BaseModel, EmailStr, field_validator, ConfigDict
from typing import Optional
from datetime import date
from typing import Optional, Any
from datetime import date, datetime
class AddressResponse(BaseModel):
"""Beágyazott cím adatok a PersonResponse számára."""
zip: Optional[str] = None
city: Optional[str] = None
street_name: Optional[str] = None
street_type: Optional[str] = None
house_number: Optional[str] = None
stairwell: Optional[str] = None
floor: Optional[str] = None
door: Optional[str] = None
parcel_id: Optional[str] = None
full_address_text: Optional[str] = None
latitude: Optional[float] = None
longitude: Optional[float] = None
model_config = ConfigDict(from_attributes=True)
class PersonResponse(BaseModel):
"""Beágyazott személyes adatok a UserResponse számára."""
id: int
id_uuid: uuid.UUID
first_name: Optional[str] = None
last_name: Optional[str] = None
phone: Optional[str] = None
mothers_last_name: Optional[str] = None
mothers_first_name: Optional[str] = None
birth_place: Optional[str] = None
birth_date: Optional[datetime] = None
identity_docs: Optional[Any] = None
ice_contact: Optional[Any] = None
is_active: bool = True
address: Optional[AddressResponse] = None
model_config = ConfigDict(from_attributes=True)
class UserBase(BaseModel):
email: EmailStr
@@ -10,6 +49,7 @@ class UserBase(BaseModel):
is_active: bool = True
region_code: str = "HU"
class UserResponse(UserBase):
id: int
person_id: Optional[int] = None
@@ -19,19 +59,56 @@ class UserResponse(UserBase):
scope_id: Optional[str] = None
ui_mode: str = "personal"
active_organization_id: Optional[int] = None
preferred_language: str = "hu"
# Beágyazott személyes adatok (Person + Address)
person: Optional[PersonResponse] = None
model_config = ConfigDict(from_attributes=True)
class PersonUpdate(BaseModel):
"""PUT /users/me/person séma - a személyes adatok szerkesztéséhez."""
first_name: Optional[str] = None
last_name: Optional[str] = None
phone: Optional[str] = None
mothers_last_name: Optional[str] = None
mothers_first_name: Optional[str] = None
birth_place: Optional[str] = None
birth_date: Optional[date] = None
# Okmány adatok (identity_docs)
identity_docs: Optional[Any] = None
# Cím adatok
address_zip: Optional[str] = None
address_city: Optional[str] = None
address_street_name: Optional[str] = None
address_street_type: Optional[str] = None
address_house_number: Optional[str] = None
address_stairwell: Optional[str] = None
address_floor: Optional[str] = None
address_door: Optional[str] = None
address_hrsz: Optional[str] = None
class ChangePasswordRequest(BaseModel):
"""PUT /users/me/password séma - jelszó módosításhoz."""
current_password: str
new_password: str
class UserUpdate(BaseModel):
first_name: Optional[str] = None
last_name: Optional[str] = None
preferred_language: Optional[str] = None
ui_mode: Optional[str] = None
class ActiveOrganizationUpdate(BaseModel):
organization_id: Optional[str] = None # UUID/string or None to revert to personal mode
class UserWithTokenResponse(BaseModel):
"""User response with new JWT token for organization switching"""
user: UserResponse
access_token: str
token_type: str = "bearer"
token_type: str = "bearer"