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