from datetime import date, datetime from pydantic import BaseModel from typing import Optional # --- Stock --- class StockItem(BaseModel): code: str name: str class KlineItem(BaseModel): date: str open: float close: float high: float low: float volume: float class RealtimeQuote(BaseModel): code: str name: str price: float change: float # 涨跌额 change_pct: float # 涨跌幅 % high: float low: float open: float prev_close: float volume: float amount: float # --- Collection --- class StockInput(BaseModel): code: str name: str added_date: str # YYYY-MM-DD class CollectionCreate(BaseModel): name: str stocks: list[StockInput] = [] class CollectionUpdate(BaseModel): name: Optional[str] = None class CollectionStockOut(BaseModel): model_config = {"from_attributes": True} id: int stock_code: str stock_name: str added_date: date class CollectionOut(BaseModel): model_config = {"from_attributes": True} id: int name: str short_code: Optional[str] created_at: datetime stocks: list[CollectionStockOut] class CollectionListItem(BaseModel): id: int name: str stock_count: int short_code: Optional[str] created_at: datetime # --- Share --- class ShareResponse(BaseModel): short_code: str url: str class CollectionShareOut(BaseModel): collection: CollectionOut stocks_data: dict # code -> {kline: [...], realtime: {...}}