cosmo_backend/app/models/db/star_system.py

55 lines
1.6 KiB
Python
Raw Normal View History

2025-12-06 09:06:10 +00:00
"""
StarSystem ORM Model
恒星系统数据模型
"""
from sqlalchemy import Column, Integer, String, Text, Double, TIMESTAMP, func
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.orm import relationship
from app.database import Base
class StarSystem(Base):
"""恒星系统表"""
__tablename__ = 'star_systems'
id = Column(Integer, primary_key=True, index=True)
name = Column(String(200), unique=True, nullable=False, index=True)
name_zh = Column(String(200))
host_star_name = Column(String(200), nullable=False, index=True)
# 位置信息(系外恒星系)
distance_pc = Column(Double)
distance_ly = Column(Double)
ra = Column(Double)
dec = Column(Double)
position_x = Column(Double)
position_y = Column(Double)
position_z = Column(Double)
# 恒星物理参数
spectral_type = Column(String(20))
radius_solar = Column(Double)
mass_solar = Column(Double)
temperature_k = Column(Double)
magnitude = Column(Double)
luminosity_solar = Column(Double)
# 显示属性
color = Column(String(20))
planet_count = Column(Integer, default=0)
# 描述信息
description = Column(Text)
details = Column(Text)
extra_data = Column(JSONB)
# 时间戳
created_at = Column(TIMESTAMP, server_default=func.now())
updated_at = Column(TIMESTAMP, server_default=func.now(), onupdate=func.now())
# 关系
celestial_bodies = relationship("CelestialBody", back_populates="star_system", cascade="all, delete-orphan")
def __repr__(self):
return f"<StarSystem(id={self.id}, name='{self.name}', planet_count={self.planet_count})>"