""" StarSystem Pydantic Models 恒星系统数据模型(用于API) """ from typing import Optional, List from pydantic import BaseModel, Field from datetime import datetime class StarSystemBase(BaseModel): """恒星系统基础模型""" name: str = Field(..., description="恒星系名称") name_zh: Optional[str] = Field(None, description="中文名称") host_star_name: str = Field(..., description="主恒星名称") # 位置信息 distance_pc: Optional[float] = Field(None, description="距离地球(秒差距)") distance_ly: Optional[float] = Field(None, description="距离地球(光年)") ra: Optional[float] = Field(None, description="赤经(度)") dec: Optional[float] = Field(None, description="赤纬(度)") position_x: Optional[float] = Field(None, description="笛卡尔坐标 X(pc)") position_y: Optional[float] = Field(None, description="笛卡尔坐标 Y(pc)") position_z: Optional[float] = Field(None, description="笛卡尔坐标 Z(pc)") # 恒星参数 spectral_type: Optional[str] = Field(None, description="光谱类型") radius_solar: Optional[float] = Field(None, description="恒星半径(太阳半径)") mass_solar: Optional[float] = Field(None, description="恒星质量(太阳质量)") temperature_k: Optional[float] = Field(None, description="表面温度(K)") magnitude: Optional[float] = Field(None, description="视星等") luminosity_solar: Optional[float] = Field(None, description="光度(太阳光度)") # 显示属性 color: Optional[str] = Field(None, description="显示颜色(HEX)") # 描述 description: Optional[str] = Field(None, description="描述") details: Optional[str] = Field(None, description="详细信息(Markdown)") class StarSystemCreate(StarSystemBase): """创建恒星系统""" pass class StarSystemUpdate(BaseModel): """更新恒星系统(所有字段可选)""" name: Optional[str] = None name_zh: Optional[str] = None host_star_name: Optional[str] = None distance_pc: Optional[float] = None distance_ly: Optional[float] = None ra: Optional[float] = None dec: Optional[float] = None position_x: Optional[float] = None position_y: Optional[float] = None position_z: Optional[float] = None spectral_type: Optional[str] = None radius_solar: Optional[float] = None mass_solar: Optional[float] = None temperature_k: Optional[float] = None magnitude: Optional[float] = None luminosity_solar: Optional[float] = None color: Optional[str] = None description: Optional[str] = None details: Optional[str] = None class StarSystemResponse(StarSystemBase): """恒星系统响应模型""" id: int planet_count: int = Field(default=0, description="已知行星数量") created_at: datetime updated_at: datetime class Config: from_attributes = True class StarSystemWithBodies(StarSystemResponse): """包含天体的恒星系统""" bodies: List[dict] = Field(default_factory=list, description="关联的天体列表") body_count: int = Field(default=0, description="天体数量") class StarSystemListResponse(BaseModel): """恒星系统列表响应""" total: int systems: List[StarSystemResponse] class StarSystemStatistics(BaseModel): """恒星系统统计信息""" total_systems: int = Field(..., description="总恒星系统数") exo_systems: int = Field(..., description="系外恒星系统数") total_planets: int = Field(..., description="总行星数") exo_planets: int = Field(..., description="系外行星数") solar_system_planets: int = Field(..., description="太阳系行星数") nearest_systems: List[dict] = Field(default_factory=list, description="最近的10个恒星系统")