update
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
from pydantic import BaseModel, Field
|
||||
from pydantic import BaseModel, Field, field_validator
|
||||
|
||||
from api.utils.gold_time import half_hour_start
|
||||
|
||||
|
||||
GOLD_REGION_CODES = {
|
||||
@@ -8,20 +10,29 @@ GOLD_REGION_CODES = {
|
||||
|
||||
|
||||
class RealTimeGold(BaseModel):
|
||||
updataTime: int = Field(..., ge=0, description='更新时间,Unix秒级时间戳')
|
||||
updataTime: int = Field(..., ge=0, description='数据所属半小时刻度的Unix秒级时间戳,提前5分钟开始采集')
|
||||
"""更新时间"""
|
||||
region: str = Field(..., description='跨区')
|
||||
"""跨区"""
|
||||
code: str = Field(..., description='跨区code:k1、k2、k3a、k3b、k4、k5、k6、k7、k8')
|
||||
goldPrice: float = Field(..., gt=0, allow_inf_nan=False, description='金币比例,1元对应的万金币数量')
|
||||
goldPrice: float = Field(..., ge=0, allow_inf_nan=False, description='页面第4~10条单价均值,元/万金币,四舍五入至两位小数')
|
||||
"""金价"""
|
||||
|
||||
@field_validator('updataTime')
|
||||
@classmethod
|
||||
def align_update_time(cls, value):
|
||||
return half_hour_start(value)
|
||||
|
||||
@field_validator('goldPrice')
|
||||
@classmethod
|
||||
def round_gold_price(cls, value):
|
||||
return round(value, 2)
|
||||
|
||||
|
||||
class ThirdPartGoldCache(RealTimeGold):
|
||||
"""内部缓存数据,不作为接口返回模型。"""
|
||||
|
||||
goldPrice: float = Field(..., gt=0, allow_inf_nan=False, description='首页有效报价换算为万金币/元后的算术平均值')
|
||||
sampleCount: int = Field(..., ge=1, le=200, description='参与均值计算的报价条数')
|
||||
sampleCount: int = Field(..., ge=1, le=7, description='第4~10条中参与均值计算的报价条数')
|
||||
stale: bool = Field(..., description='数据是否已超过30分钟刷新周期')
|
||||
|
||||
|
||||
@@ -41,7 +52,7 @@ class HistoryGold(BaseModel):
|
||||
"""echarts数据"""
|
||||
|
||||
class OfficialGold(BaseModel):
|
||||
updataTime: str = Field(..., pattern=r'^\d+$', description='更新时间,Unix秒级时间戳字符串')
|
||||
updataTime: str = Field(..., pattern=r'^\d+$', description='数据所属半小时刻度的Unix秒级时间戳字符串,提前5分钟开始采集')
|
||||
"""更新时间"""
|
||||
region: str = Field(..., description='跨区')
|
||||
"""跨区"""
|
||||
@@ -52,3 +63,18 @@ class OfficialGold(BaseModel):
|
||||
"""金币寄售最高成交价排名前5的价格"""
|
||||
max: float | None = Field(..., description='100点券可兑换的最大万金币数量,无有效报价时为null')
|
||||
min: float | None = Field(..., description='100点券可兑换的最小万金币数量,无有效报价时为null')
|
||||
|
||||
@field_validator('updataTime')
|
||||
@classmethod
|
||||
def align_update_time(cls, value):
|
||||
return str(half_hour_start(int(value)))
|
||||
|
||||
@field_validator('goldDealRank', 'goldTopDealRank')
|
||||
@classmethod
|
||||
def round_ranks(cls, values):
|
||||
return [round(value, 2) for value in values]
|
||||
|
||||
@field_validator('max', 'min')
|
||||
@classmethod
|
||||
def round_ratios(cls, value):
|
||||
return round(value, 2) if value is not None else None
|
||||
|
||||
Reference in New Issue
Block a user