cosmo/backend/app/models/db/star_system.py

55 lines
1.6 KiB
Python

"""
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})>"