klg-asutk-app/backend/app/db/seed_aircraft_demo.py
Yuriy 0150aba4f5 Consolidation: KLG ASUTK + PAPA integration
- Unify API: lib/api.ts uses /api/v1, inbox uses /api/inbox (rewrites)
- Remove localhost refs: openapi, inbox page
- Add rewrites: /api/inbox|tmc -> inbox-server, /api/v1 -> FastAPI
- Add stub routes: knowledge/insights, recommendations, search, log-error
- Transfer from PAPA: prompts (inspection, tmc), scripts, supabase, data/tmc-requests
- Fix inbox-server: ORDER BY created_at, package.json
- Remove redundant app/api/inbox/files route (rewrites handle it)
- knowledge/ in gitignore (large PDFs)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 17:18:31 +03:00

112 lines
6.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Скрипт для заполнения воздушных судов (самолёты и вертолёты).
Работает с SQLite и PostgreSQL. Требует seed_organizations и seed_aircraft_types.
Данные из seed_aircraft.sql и seed_helicopters.sql.
"""
from app.db.session import SessionLocal
from app.models.aircraft import Aircraft, AircraftType
from app.models.organization import Organization
# (registration_number, manufacturer, model, operator_name, serial_number, status, total_time, total_cycles)
_AIRCRAFT = [
# seed_aircraft.sql: Smartavia, Boeing 737-800
("RA-89060", "Boeing", "737-800", "Smartavia", "LN-12345", "in_service", 15000.5, 8500),
("RA-89061", "Boeing", "737-800", "Smartavia", "LN-12346", "in_service", 12000.0, 7200),
("RA-89062", "Boeing", "737-800", "Smartavia", "LN-12347", "maintenance", 18000.2, 10200),
# Азимут, Sukhoi Superjet 100
("RA-89070", "Sukhoi", "Superjet 100", "Азимут", "95001", "in_service", 8000.5, 4500),
("RA-89071", "Sukhoi", "Superjet 100", "Азимут", "95002", "in_service", 7500.0, 4200),
("RA-89072", "Sukhoi", "Superjet 100", "Азимут", "95003", "in_service", 9200.3, 5100),
("RA-89073", "Sukhoi", "Superjet 100", "Азимут", "95004", "in_service", 6800.8, 3800),
# Якутия: ATR 72-600, Boeing 737-800
("RA-89090", "ATR", "72-600", "Якутия", "ATR-001", "in_service", 12000.5, 15000),
("RA-89091", "ATR", "72-600", "Якутия", "ATR-002", "in_service", 11000.0, 13800),
("RA-89092", "Boeing", "737-800", "Якутия", "LN-89001", "in_service", 20000.0, 11500),
("RA-89093", "Boeing", "737-800", "Якутия", "LN-89002", "in_service", 18500.5, 10800),
# S7, Boeing 737-800
("RA-73004", "Boeing", "737-800", "S7 Airlines", "LN-73004", "in_service", 16000.0, 9000),
("RA-73005", "Boeing", "737-800", "S7 Airlines", "LN-73005", "in_service", 14000.5, 8200),
# Аэрофлот: A330-300, 777-300ER
("RA-89004", "Airbus", "A330-300", "Аэрофлот - Российские авиалинии", "MSN-89004", "in_service", 25000.0, 8500),
("RA-89005", "Airbus", "A330-300", "Аэрофлот - Российские авиалинии", "MSN-89005", "in_service", 23000.5, 7800),
("RA-89006", "Boeing", "777-300ER", "Аэрофлот - Российские авиалинии", "LN-89006", "in_service", 30000.0, 6500),
# Победа, Россия, Уральские
("RA-89082", "Boeing", "737-800", "Победа", "LN-89082", "in_service", 13000.0, 7500),
("RA-89083", "Boeing", "737-800", "Победа", "LN-89083", "in_service", 11000.5, 6800),
("RA-73703", "Boeing", "737-800", "Россия", "LN-73703", "in_service", 17000.0, 9500),
("RA-73704", "Boeing", "737-800", "Россия", "LN-73704", "in_service", 15000.5, 8800),
("RA-89052", "Airbus", "A320", "Уральские авиалинии", "MSN-89052", "in_service", 19000.0, 10500),
("RA-89053", "Airbus", "A320", "Уральские авиалинии", "MSN-89053", "in_service", 17500.5, 9800),
# Вертолёты (seed_helicopters): Ми-8, Ми-26, Ми-171, Ка-32, Ка-226, Ансат
("RA-12345", "Миль", "Ми-8", "Аэрофлот - Российские авиалинии", "08-001", "in_service", 15000.0, 8500),
("RA-12346", "Миль", "Ми-8", "S7 Airlines", "08-002", "in_service", 12000.5, 7200),
("RA-12347", "Миль", "Ми-8", "Уральские авиалинии", "08-003", "maintenance", 18000.0, 10200),
("RA-12348", "Миль", "Ми-8", "Аэрофлот - Российские авиалинии", "08-004", "in_service", 14000.0, 8000),
("RA-12349", "Миль", "Ми-8", "S7 Airlines", "08-005", "in_service", 16000.5, 9200),
("RA-12450", "Миль", "Ми-26", "Аэрофлот - Российские авиалинии", "26-001", "in_service", 20000.0, 5500),
("RA-12451", "Миль", "Ми-26", "Уральские авиалинии", "26-002", "in_service", 18500.5, 5100),
("RA-12550", "Миль", "Ми-171", "Аэрофлот - Российские авиалинии", "171-001", "in_service", 8000.0, 4500),
("RA-12551", "Миль", "Ми-171", "S7 Airlines", "171-002", "in_service", 7500.5, 4200),
("RA-12552", "Миль", "Ми-171", "Уральские авиалинии", "171-003", "in_service", 9200.0, 5100),
("RA-12650", "Камов", "Ка-32", "Аэрофлот - Российские авиалинии", "32-001", "in_service", 11000.0, 6500),
("RA-12651", "Камов", "Ка-32", "S7 Airlines", "32-002", "maintenance", 13000.5, 7500),
("RA-12750", "Камов", "Ка-226", "Аэрофлот - Российские авиалинии", "226-001", "in_service", 5000.0, 3000),
("RA-12751", "Камов", "Ка-226", "Уральские авиалинии", "226-002", "in_service", 4500.5, 2800),
("RA-12850", "Казанский вертолетный завод", "Ансат", "Аэрофлот - Российские авиалинии", "ANS-001", "in_service", 3000.0, 2000),
("RA-12851", "Казанский вертолетный завод", "Ансат", "S7 Airlines", "ANS-002", "in_service", 2800.5, 1900),
("RA-12852", "Казанский вертолетный завод", "Ансат", "Уральские авиалинии", "ANS-003", "in_service", 3200.0, 2100),
]
def _get_type_id(db, manufacturer: str, model: str) -> str | None:
t = db.query(AircraftType).filter(
AircraftType.manufacturer == manufacturer, AircraftType.model == model
).first()
return str(t.id) if t else None
def _get_operator_id(db, name: str) -> str | None:
o = db.query(Organization).filter(
Organization.name == name, Organization.kind == "operator"
).first()
return str(o.id) if o else None
def seed_aircraft_demo():
db = SessionLocal()
created = 0
skipped = 0
try:
for reg, manuf, model, op_name, serial, status, t_h, t_c in _AIRCRAFT:
if db.query(Aircraft).filter(Aircraft.registration_number == reg).first():
skipped += 1
continue
type_id = _get_type_id(db, manuf, model)
op_id = _get_operator_id(db, op_name)
if not type_id or not op_id:
skipped += 1
continue
db.add(Aircraft(
registration_number=reg,
aircraft_type_id=type_id,
operator_id=op_id,
serial_number=serial,
current_status=status,
total_time=float(t_h),
total_cycles=int(t_c),
))
created += 1
db.commit()
total = db.query(Aircraft).count()
print(f"ВС: добавлено {created}, пропущено {skipped}, всего {total}")
except Exception as e:
db.rollback()
raise
finally:
db.close()
if __name__ == "__main__":
seed_aircraft_demo()