""" Unified Address Pydantic Schemas (P0 Refactoring). AddressIn: For creation/updates — matches system.addresses columns. AddressOut: For responses — returns the full Address object including id, zip/city resolved via the postal_code relationship. Usage: from app.schemas.address import AddressIn, AddressOut """ import uuid from pydantic import BaseModel, Field, ConfigDict from typing import Optional from datetime import datetime class AddressIn(BaseModel): """Unified address input schema for creation and updates. Maps to system.addresses table columns. The `zip` and `city` fields are used to look up / create a system.geo_postal_codes record; the resulting FK is stored as postal_code_id on the Address record. """ zip: Optional[str] = Field(None, max_length=10, description="Irányítószám (postal code)") city: Optional[str] = Field(None, max_length=100, description="Város") street_name: Optional[str] = Field(None, max_length=200, description="Utca neve") street_type: Optional[str] = Field(None, max_length=50, description="Közterület jellege (utca, út, tér, stb.)") house_number: Optional[str] = Field(None, max_length=50, description="Házszám") stairwell: Optional[str] = Field(None, max_length=20, description="Lépcsőház") floor: Optional[str] = Field(None, max_length=20, description="Emelet") door: Optional[str] = Field(None, max_length=20, description="Ajtó") parcel_id: Optional[str] = Field(None, max_length=50, description="Helyrajzi szám / parcella ID") full_address_text: Optional[str] = Field(None, description="Teljes cím szövegesen") latitude: Optional[float] = Field(None, description="GPS szélesség") longitude: Optional[float] = Field(None, description="GPS hosszúság") class AddressOut(BaseModel): """Unified address output schema for API responses. Includes the full Address object data, with zip/city resolved via the postal_code relationship. """ id: uuid.UUID # UUID as native UUID for JSON serialization 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 created_at: Optional[datetime] = None model_config = ConfigDict(from_attributes=True)