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

39 lines
1.9 KiB
Python
Raw Normal View History

2026-07-21 12:09:51 +00:00
"""Rocket configuration ORM model."""
from sqlalchemy import Boolean, Column, Double, Integer, String, Text, TIMESTAMP, func
from sqlalchemy.dialects.postgresql import JSONB
from app.database import Base
class RocketConfig(Base):
"""Two-stage launch vehicle configuration used by the simulator."""
__tablename__ = "rocket_configs"
id = Column(Integer, primary_key=True, autoincrement=True)
code = Column(String(50), unique=True, nullable=False, index=True)
name = Column(String(100), nullable=False)
name_zh = Column(String(100), nullable=True)
manufacturer = Column(String(100), nullable=True)
country = Column(String(100), nullable=True)
launch_site_name = Column(String(120), nullable=False, default="Equatorial Launch Site")
launch_latitude_deg = Column(Double, nullable=False, default=0)
launch_longitude_deg = Column(Double, nullable=False, default=0)
description = Column(Text, nullable=True)
color = Column(String(20), nullable=False, default="#f8fafc")
height_m = Column(Double, nullable=False)
diameter_m = Column(Double, nullable=False)
payload_mass_kg = Column(Double, nullable=False, default=0)
drag_coefficient = Column(Double, nullable=False, default=0.4)
reference_area_m2 = Column(Double, nullable=False)
target_orbit_km = Column(Double, nullable=False, default=200)
target_velocity_mps = Column(Double, nullable=False, default=7800)
separation_delay_seconds = Column(Double, nullable=False, default=2)
second_stage_ignition_delay_seconds = Column(Double, nullable=False, default=1)
stage_1 = Column(JSONB, nullable=False)
stage_2 = Column(JSONB, nullable=False)
is_active = Column(Boolean, nullable=False, default=True, index=True)
sort_order = Column(Integer, nullable=False, default=0)
created_at = Column(TIMESTAMP, server_default=func.now())
updated_at = Column(TIMESTAMP, server_default=func.now(), onupdate=func.now())