| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import json
- from datetime import datetime
- from typing import Optional, Dict, Any, List
- from pydantic import BaseModel, field_validator
- # --- Pydantic 数据模型 ---
- class CardImageResponse(BaseModel):
- """用于API响应的图片数据模型"""
- image_id: int
- image_name: Optional[str] = None
- image_path: str
- detection_json: Dict[str, Any]
- modified_json: Optional[Dict[str, Any]] = None
- created_at: datetime
- updated_at: datetime
- class Config:
- from_attributes = True # 兼容 ORM 模式
- @field_validator('detection_json', 'modified_json', mode='before')
- @classmethod
- def parse_json_string(cls, v):
- if v is None:
- return None
- if isinstance(v, str):
- try:
- return json.loads(v)
- except json.JSONDecodeError:
- raise ValueError("Invalid JSON string in database")
- return v
- class CardDetailResponse(BaseModel):
- """用于响应单个卡牌详细信息的模型,包含其所有图片信息"""
- card_id: int
- card_name: Optional[str] = None
- created_at: datetime
- updated_at: datetime
- images: List[CardImageResponse] = [] # 嵌套的图片列表
- class Config:
- from_attributes = True
- class ImageJsonPairResponse(BaseModel):
- """用于获取单个图片两个JSON数据的响应模型"""
- image_id: int
- detection_json: Dict[str, Any]
- modified_json: Optional[Dict[str, Any]] = None
- class Config:
- from_attributes = True
- @field_validator('detection_json', 'modified_json', mode='before')
- @classmethod
- def parse_json_string(cls, v):
- """
- 这个验证器会在Pydantic进行类型检查之前运行。
- 它负责将从数据库取出的JSON字符串转换为Python字典。
- """
- if v is None:
- return None
- if isinstance(v, str):
- try:
- return json.loads(v)
- except json.JSONDecodeError:
- raise ValueError("Invalid JSON string in database")
- return v
- # 用于 card list的结构
- class CardImageInfo(BaseModel):
- """用于在卡牌列表中展示的单张图片摘要信息"""
- image_id: int
- image_name: Optional[str] = None
- class CardListDetailResponse(BaseModel):
- """为新的卡牌列表接口定义的详细响应模型"""
- card_id: int
- card_name: Optional[str] = None
- created_at: datetime
- updated_at: datetime
- # 使用嵌套模型来表示每张图片的信息
- front_face: Optional[CardImageInfo] = None
- back_face: Optional[CardImageInfo] = None
- front_edge: Optional[CardImageInfo] = None
- back_edge: Optional[CardImageInfo] = None
- class Config:
- from_attributes = True
|