cosmo/backend/app/models/star_system.py

101 lines
3.9 KiB
Python
Raw Normal View History

2025-12-08 10:55:38 +00:00
"""
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="笛卡尔坐标 Xpc")
position_y: Optional[float] = Field(None, description="笛卡尔坐标 Ypc")
position_z: Optional[float] = Field(None, description="笛卡尔坐标 Zpc")
# 恒星参数
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="已知行星数量")
star_count: int = Field(default=1, 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个恒星系统")