Files
service-finder/backend/app/schemas/address.py
2026-07-01 19:49:58 +00:00

61 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
"""
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: str # UUID as string 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)