60 lines
2.5 KiB
Python
60 lines
2.5 KiB
Python
"""运输通用地址库 Schema"""
|
|
from datetime import datetime
|
|
from decimal import Decimal
|
|
from typing import Optional
|
|
|
|
from pydantic import BaseModel, Field, model_validator
|
|
|
|
|
|
class TransportAddressBase(BaseModel):
|
|
address_name: str = Field(..., max_length=200, alias="addressName", description="地址名称")
|
|
full_address: str = Field(..., max_length=500, alias="fullAddress", description="详细地址")
|
|
lng: Decimal = Field(..., description="经度")
|
|
lat: Decimal = Field(..., description="纬度")
|
|
contact_name: Optional[str] = Field(default=None, max_length=100, alias="contactName", description="联系人")
|
|
contact_phone: Optional[str] = Field(default=None, max_length=32, alias="contactPhone", description="联系电话")
|
|
status: str = Field(default="1", max_length=1, description="状态 1-启用 0-停用")
|
|
remark: Optional[str] = Field(default=None, description="备注")
|
|
|
|
model_config = {"populate_by_name": True}
|
|
|
|
|
|
class TransportAddressCreate(TransportAddressBase):
|
|
@model_validator(mode="after")
|
|
def validate_coordinates(self) -> "TransportAddressCreate":
|
|
if self.lng is None or self.lat is None:
|
|
raise ValueError("请通过地图选点填写经纬度")
|
|
return self
|
|
|
|
|
|
class TransportAddressUpdate(BaseModel):
|
|
address_name: Optional[str] = Field(default=None, max_length=200, alias="addressName")
|
|
full_address: Optional[str] = Field(default=None, max_length=500, alias="fullAddress")
|
|
lng: Optional[Decimal] = None
|
|
lat: Optional[Decimal] = None
|
|
contact_name: Optional[str] = Field(default=None, max_length=100, alias="contactName")
|
|
contact_phone: Optional[str] = Field(default=None, max_length=32, alias="contactPhone")
|
|
status: Optional[str] = Field(default=None, max_length=1)
|
|
remark: Optional[str] = None
|
|
|
|
model_config = {"populate_by_name": True}
|
|
|
|
|
|
class TransportAddressRead(TransportAddressBase):
|
|
id: str
|
|
tenant_no: str = Field(alias="tenantNo")
|
|
order_num: Optional[int] = Field(default=None, alias="orderNum")
|
|
create_by: Optional[str] = Field(default=None, alias="createBy")
|
|
create_dept_id: Optional[str] = Field(default=None, alias="createDeptId")
|
|
create_time: datetime = Field(alias="createTime")
|
|
update_by: Optional[str] = Field(default=None, alias="updateBy")
|
|
update_time: datetime = Field(alias="updateTime")
|
|
del_flag: int = Field(default=0, alias="delFlag")
|
|
|
|
model_config = {"from_attributes": True, "populate_by_name": True}
|
|
|
|
|
|
class TransportAddressListResponse(BaseModel):
|
|
total: int
|
|
list: list[TransportAddressRead]
|