You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
3.0 KiB

"""
缓存管理Schema
"""
from datetime import date, datetime
from typing import List, Optional
from pydantic import BaseModel, Field
class CacheTaskCreate(BaseModel):
"""创建缓存任务"""
task_name: str
task_type: str = Field(..., description="detect_missing, detect_all_missing, cache_data, cache_all_data, sync_data, fill_missing_data, batch_fill_date")
security_type: str = Field(..., description="stock, future, index")
period_type: Optional[str] = Field(default="daily", description="daily, min1, min5, etc.")
start_date: str
end_date: str
code_list: Optional[List[str]] = None
class MissingDateInfo(BaseModel):
"""缺失日期信息"""
date: str
expected: int
actual: int
missing_ratio: float
class MissingCodeInfo(BaseModel):
"""缺失代码信息"""
code: str
missing_dates: List[MissingDateInfo]
class CacheTaskResponse(BaseModel):
"""缓存任务响应"""
id: int
task_name: str
task_type: str
security_type: str
period_type: Optional[str]
start_date: date
end_date: date
status: str
progress: float
total_count: int
success_count: int
error_count: int
error_message: Optional[str]
created_at: datetime
started_at: Optional[datetime]
completed_at: Optional[datetime]
class Config:
from_attributes = True
class CacheTaskDetailResponse(BaseModel):
"""缓存任务详情响应"""
id: int
code: str
trade_date: date
expected_count: int
actual_count: int
is_missing: bool
status: str
error_message: Optional[str]
processed_at: Optional[datetime]
class CacheTaskWithDetailsResponse(CacheTaskResponse):
"""带详情的缓存任务响应"""
details: List[CacheTaskDetailResponse]
class CacheStatusResponse(BaseModel):
"""代码缓存状态响应"""
code: str
security_type: str
period_type: str
record_count: int
min_date: Optional[str]
max_date: Optional[str]
missing_ratio: float
class DetectMissingRequest(BaseModel):
"""检测缺失数据请求"""
security_type: str
period_type: str = "daily"
start_date: str
end_date: str
code_list: List[str]
class DetectMissingResponse(BaseModel):
"""检测缺失数据响应"""
task_id: int
total_codes: int
missing_codes: List[MissingCodeInfo]
class BatchCacheRequest(BaseModel):
"""批量缓存请求"""
security_type: str
period_type: str = "daily"
start_date: str
end_date: str
code_list: List[str]
class AllDataRequest(BaseModel):
"""一键检测/缓存所有数据请求"""
security_type: str = Field(..., description="证券类型: stock, future")
period_type: str = Field(default="daily", description="周期类型: daily, min1, min5, etc.")
start_date: str = Field(..., description="开始日期 YYYYMMDD")
end_date: str = Field(..., description="结束日期 YYYYMMDD")
contract_type: str = Field(default="all", description="合约类型: all, main - 仅对期货有效")