65 lines
1.7 KiB
Python
65 lines
1.7 KiB
Python
"""
|
|
降雨数据相关的Pydantic Schemas
|
|
"""
|
|
from pydantic import BaseModel, Field
|
|
from typing import Optional, List
|
|
|
|
|
|
class RainfallGridRequest(BaseModel):
|
|
"""降雨栅格请求模型"""
|
|
time: Optional[str] = Field(
|
|
None,
|
|
alias="time",
|
|
description="查询时间 ISO格式,默认为当前时间(自动查询前12小时或24小时数据)",
|
|
example="2024-01-01T12:00:00"
|
|
)
|
|
resolution: float = Field(
|
|
0.01,
|
|
alias="resolution",
|
|
description="栅格分辨率(度)",
|
|
gt=0,
|
|
le=0.1
|
|
)
|
|
duration: int = Field(
|
|
12,
|
|
alias="duration",
|
|
description="持续时间(小时),可选12或24",
|
|
ge=12,
|
|
le=24
|
|
)
|
|
|
|
class Config:
|
|
populate_by_name = True # 允许同时使用字段名和别名
|
|
|
|
|
|
class StationData(BaseModel):
|
|
"""站点数据模型"""
|
|
lon: float
|
|
lat: float
|
|
rainfall: float
|
|
|
|
|
|
class GridMetadata(BaseModel):
|
|
"""栅格元数据"""
|
|
start_time: str
|
|
end_time: str
|
|
district_id: int
|
|
resolution: float
|
|
station_count: int
|
|
grid_size: List[int]
|
|
bounds: dict
|
|
|
|
|
|
class RainfallGridResponse(BaseModel):
|
|
"""降雨栅格响应模型 - 符合前端 ApiResponse 结构"""
|
|
code: int = Field(200, description="状态码")
|
|
message: str = Field(..., description="响应消息")
|
|
data: Optional[dict] = Field(None, description="响应数据")
|
|
|
|
|
|
class StationsResponse(BaseModel):
|
|
"""站点数据响应模型 - 符合前端 ApiResponse 结构"""
|
|
code: int = Field(200, description="状态码")
|
|
message: str = Field(..., description="响应消息")
|
|
data: List[StationData] = Field(default_factory=list, description="站点数据列表")
|