39 lines
1.9 KiB
Python
39 lines
1.9 KiB
Python
|
|
"""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())
|