refaktor címtár
This commit is contained in:
60
backend/app/schemas/address.py
Normal file
60
backend/app/schemas/address.py
Normal file
@@ -0,0 +1,60 @@
|
||||
"""
|
||||
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)
|
||||
Reference in New Issue
Block a user