from typing import Optional, List from pydantic import BaseModel, Field from datetime import datetime # Shared properties class PeakBase(BaseModel): name_en: str name_cn: Optional[str] = None elevation_m: int prominence_m: Optional[int] = None first_ascent_year: Optional[int] = None description: Optional[str] = None thumbnail_url: Optional[str] = None # Properties to receive on item creation class PeakCreate(PeakBase): # GeoJSON Point: {"type": "Point", "coordinates": [lon, lat]} location: dict # Properties to receive on item update class PeakUpdate(PeakBase): location: Optional[dict] = None # Properties shared by models stored in DB class PeakInDBBase(PeakBase): id: int location: Optional[dict] = None # We will convert WKB to GeoJSON in crud created_at: datetime updated_at: datetime class Config: from_attributes = True # Properties to return to client class Peak(PeakInDBBase): pass