52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
"""API 响应模型"""
|
|
from pydantic import BaseModel
|
|
from typing import Optional, List, Any
|
|
from datetime import datetime
|
|
|
|
class CollectionResponse(BaseModel):
|
|
"""藏品响应"""
|
|
id: int
|
|
name: str
|
|
category: Optional[str] = None
|
|
serial_number: Optional[str] = None
|
|
rarity: str = "通货"
|
|
ownership_type: str = "自持"
|
|
is_graded: bool = False
|
|
grading_company: Optional[str] = None
|
|
grading_score: Optional[str] = None
|
|
cost_price: Optional[float] = None
|
|
current_price: Optional[float] = None
|
|
status: str = "in_collection"
|
|
remark: Optional[str] = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
class PriceHistoryResponse(BaseModel):
|
|
"""价格历史响应"""
|
|
id: int
|
|
collection_id: Optional[int] = None
|
|
source: str
|
|
price: float
|
|
price_unit: str = "元/张"
|
|
price_type: str = "挂牌价"
|
|
url: Optional[str] = None
|
|
crawled_at: datetime
|
|
|
|
class CrawlLogResponse(BaseModel):
|
|
"""爬虫日志响应"""
|
|
id: int
|
|
source: str
|
|
status: str
|
|
items_count: int = 0
|
|
error_message: Optional[str] = None
|
|
started_at: Optional[datetime] = None
|
|
finished_at: Optional[datetime] = None
|
|
|
|
class StatisticsResponse(BaseModel):
|
|
"""统计信息响应"""
|
|
total_collections: int = 0
|
|
total_price_records: int = 0
|
|
today_price_records: int = 0
|
|
last_crawl_time: Optional[datetime] = None
|
|
category_stats: dict = {}
|