from pydantic import BaseModel, Field, ConfigDict from typing import Optional, List, Any class ContactCreate(BaseModel): full_name: str email: str phone: Optional[str] = None contact_type: str = "primary" class CorpOnboardIn(BaseModel): """ Teljes onboarding adatcsomag atomizált címekkel. """ full_name: str = Field(..., description="Hivatalos cégnév") name: str = Field(..., description="Rövid név") display_name: str tax_number: str reg_number: Optional[str] = None country_code: str = "HU" language: str = "hu" default_currency: str = "HUF" # --- ATOMIZÁLT CÍM (Modell szinkron) --- address_zip: str address_city: str address_street_name: str address_street_type: str address_house_number: str address_stairwell: Optional[str] = None address_floor: Optional[str] = None address_door: Optional[str] = None address_hrsz: Optional[str] = None contacts: List[ContactCreate] = [] class CorpOnboardResponse(BaseModel): organization_id: int status: str model_config = ConfigDict(from_attributes=True) class OrganizationUpdate(BaseModel): """PATCH séma a szervezet adatainak részleges frissítéséhez. Támogatja a visual_settings JSONB mező biztonságos részleges frissítését, valamint a cégadatok (név, adószám, cím) szerkesztését.""" visual_settings: Optional[dict] = None display_name: Optional[str] = None default_currency: Optional[str] = None language: Optional[str] = None # ── Cégadatok (Company details) ── name: Optional[str] = None full_name: Optional[str] = None tax_number: Optional[str] = None # ── Cím adatok (Address fields) ── 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_hrsz: Optional[str] = None # ── Crowdsourced search fields ── aliases: Optional[List[str]] = None tags: Optional[List[str]] = None # ── Subscription ── subscription_tier_id: Optional[int] = None class OrganizationResponse(BaseModel): """Szervezet adatainak visszaadása (DTO). Tartalmazza a visual_settings mezőt a frontend számára.""" id: int name: str full_name: str display_name: Optional[str] = None tax_number: Optional[str] = None country_code: str = "HU" status: str org_type: Optional[str] = None is_active: bool = True is_deleted: bool = False subscription_plan: str = "FREE" subscription_tier_id: Optional[int] = None visual_settings: Optional[dict] = None notification_settings: Optional[Any] = None external_integration_config: Optional[Any] = None aliases: List[str] = Field(default_factory=list) tags: List[str] = Field(default_factory=list) # ── Cím adatok (Address fields) ── 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_hrsz: Optional[str] = None model_config = ConfigDict(from_attributes=True)