cosmo/backend/app/models/star_system.py

101 lines
3.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"""
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个恒星系统")