100 lines
3.8 KiB
Python
100 lines
3.8 KiB
Python
|
|
"""
|
|||
|
|
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个恒星系统")
|