62 lines
2.5 KiB
Python
62 lines
2.5 KiB
Python
"""
|
|
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)
|