- 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>
163 lines
9.7 KiB
SQL
163 lines
9.7 KiB
SQL
-- Скрипт для заполнения воздушных судов для всех операторов
|
||
|
||
-- Добавляем воздушные суда для операторов, у которых их еще нет
|
||
|
||
DO $$
|
||
DECLARE
|
||
-- ID операторов
|
||
smartavia_id TEXT;
|
||
azimuth_id TEXT;
|
||
yakutia_id TEXT;
|
||
|
||
-- ID типов ВС (используем популярные типы)
|
||
boeing737_id TEXT;
|
||
airbus320_id TEXT;
|
||
sukhoi_superjet_id TEXT;
|
||
boeing777_id TEXT;
|
||
airbus330_id TEXT;
|
||
atr72_id TEXT;
|
||
BEGIN
|
||
-- Получаем ID операторов
|
||
SELECT id INTO smartavia_id FROM organizations WHERE name = 'Smartavia' AND kind = 'operator' LIMIT 1;
|
||
SELECT id INTO azimuth_id FROM organizations WHERE name = 'Азимут' AND kind = 'operator' LIMIT 1;
|
||
SELECT id INTO yakutia_id FROM organizations WHERE name = 'Якутия' AND kind = 'operator' LIMIT 1;
|
||
|
||
-- Получаем ID типов ВС
|
||
SELECT id INTO boeing737_id FROM aircraft_types WHERE manufacturer = 'Boeing' AND model = '737-800' LIMIT 1;
|
||
SELECT id INTO airbus320_id FROM aircraft_types WHERE manufacturer = 'Airbus' AND model = 'A320' LIMIT 1;
|
||
SELECT id INTO sukhoi_superjet_id FROM aircraft_types WHERE manufacturer = 'Sukhoi' AND model = 'Superjet 100' LIMIT 1;
|
||
SELECT id INTO boeing777_id FROM aircraft_types WHERE manufacturer = 'Boeing' AND model = '777-300ER' LIMIT 1;
|
||
SELECT id INTO airbus330_id FROM aircraft_types WHERE manufacturer = 'Airbus' AND model = 'A330-300' LIMIT 1;
|
||
SELECT id INTO atr72_id FROM aircraft_types WHERE manufacturer = 'ATR' AND model = '72-600' LIMIT 1;
|
||
|
||
-- Если типов ВС нет, используем первый доступный тип
|
||
IF boeing737_id IS NULL THEN
|
||
SELECT id INTO boeing737_id FROM aircraft_types LIMIT 1;
|
||
END IF;
|
||
IF airbus320_id IS NULL THEN
|
||
SELECT id INTO airbus320_id FROM aircraft_types LIMIT 1;
|
||
END IF;
|
||
IF sukhoi_superjet_id IS NULL THEN
|
||
SELECT id INTO sukhoi_superjet_id FROM aircraft_types LIMIT 1;
|
||
END IF;
|
||
|
||
-- Smartavia - добавляем Boeing 737
|
||
IF smartavia_id IS NOT NULL AND boeing737_id IS NOT NULL THEN
|
||
INSERT INTO aircraft (id, registration_number, aircraft_type_id, operator_id, serial_number, current_status, total_time, total_cycles, created_at, updated_at)
|
||
VALUES
|
||
(gen_random_uuid()::text, 'RA-89060', boeing737_id, smartavia_id, 'LN-12345', 'in_service', 15000.5, 8500, NOW(), NOW()),
|
||
(gen_random_uuid()::text, 'RA-89061', boeing737_id, smartavia_id, 'LN-12346', 'in_service', 12000.0, 7200, NOW(), NOW()),
|
||
(gen_random_uuid()::text, 'RA-89062', boeing737_id, smartavia_id, 'LN-12347', 'maintenance', 18000.2, 10200, NOW(), NOW())
|
||
ON CONFLICT (registration_number) DO NOTHING;
|
||
END IF;
|
||
|
||
-- Азимут - добавляем Sukhoi Superjet 100
|
||
IF azimuth_id IS NOT NULL AND sukhoi_superjet_id IS NOT NULL THEN
|
||
INSERT INTO aircraft (id, registration_number, aircraft_type_id, operator_id, serial_number, current_status, total_time, total_cycles, created_at, updated_at)
|
||
VALUES
|
||
(gen_random_uuid()::text, 'RA-89070', sukhoi_superjet_id, azimuth_id, '95001', 'in_service', 8000.5, 4500, NOW(), NOW()),
|
||
(gen_random_uuid()::text, 'RA-89071', sukhoi_superjet_id, azimuth_id, '95002', 'in_service', 7500.0, 4200, NOW(), NOW()),
|
||
(gen_random_uuid()::text, 'RA-89072', sukhoi_superjet_id, azimuth_id, '95003', 'in_service', 9200.3, 5100, NOW(), NOW()),
|
||
(gen_random_uuid()::text, 'RA-89073', sukhoi_superjet_id, azimuth_id, '95004', 'in_service', 6800.8, 3800, NOW(), NOW())
|
||
ON CONFLICT (registration_number) DO NOTHING;
|
||
END IF;
|
||
|
||
-- Якутия - добавляем ATR 72 и Boeing 737
|
||
IF yakutia_id IS NOT NULL THEN
|
||
IF atr72_id IS NOT NULL THEN
|
||
INSERT INTO aircraft (id, registration_number, aircraft_type_id, operator_id, serial_number, current_status, total_time, total_cycles, created_at, updated_at)
|
||
VALUES
|
||
(gen_random_uuid()::text, 'RA-89090', atr72_id, yakutia_id, 'ATR-001', 'in_service', 12000.5, 15000, NOW(), NOW()),
|
||
(gen_random_uuid()::text, 'RA-89091', atr72_id, yakutia_id, 'ATR-002', 'in_service', 11000.0, 13800, NOW(), NOW())
|
||
ON CONFLICT (registration_number) DO NOTHING;
|
||
END IF;
|
||
|
||
IF boeing737_id IS NOT NULL THEN
|
||
INSERT INTO aircraft (id, registration_number, aircraft_type_id, operator_id, serial_number, current_status, total_time, total_cycles, created_at, updated_at)
|
||
VALUES
|
||
(gen_random_uuid()::text, 'RA-89092', boeing737_id, yakutia_id, 'LN-89001', 'in_service', 20000.0, 11500, NOW(), NOW()),
|
||
(gen_random_uuid()::text, 'RA-89093', boeing737_id, yakutia_id, 'LN-89002', 'in_service', 18500.5, 10800, NOW(), NOW())
|
||
ON CONFLICT (registration_number) DO NOTHING;
|
||
END IF;
|
||
END IF;
|
||
|
||
-- Также добавляем дополнительные ВС для операторов, у которых их мало
|
||
-- S7 Airlines - добавляем еще несколько
|
||
IF EXISTS (SELECT 1 FROM organizations WHERE name = 'S7 Airlines' AND kind = 'operator') THEN
|
||
SELECT id INTO smartavia_id FROM organizations WHERE name = 'S7 Airlines' AND kind = 'operator' LIMIT 1;
|
||
IF boeing737_id IS NOT NULL THEN
|
||
INSERT INTO aircraft (id, registration_number, aircraft_type_id, operator_id, serial_number, current_status, total_time, total_cycles, created_at, updated_at)
|
||
VALUES
|
||
(gen_random_uuid()::text, 'RA-73004', boeing737_id, smartavia_id, 'LN-73004', 'in_service', 16000.0, 9000, NOW(), NOW()),
|
||
(gen_random_uuid()::text, 'RA-73005', boeing737_id, smartavia_id, 'LN-73005', 'in_service', 14000.5, 8200, NOW(), NOW())
|
||
ON CONFLICT (registration_number) DO NOTHING;
|
||
END IF;
|
||
END IF;
|
||
|
||
-- Аэрофлот - добавляем еще несколько
|
||
IF EXISTS (SELECT 1 FROM organizations WHERE name = 'Аэрофлот - Российские авиалинии' AND kind = 'operator') THEN
|
||
SELECT id INTO smartavia_id FROM organizations WHERE name = 'Аэрофлот - Российские авиалинии' AND kind = 'operator' LIMIT 1;
|
||
IF airbus330_id IS NOT NULL THEN
|
||
INSERT INTO aircraft (id, registration_number, aircraft_type_id, operator_id, serial_number, current_status, total_time, total_cycles, created_at, updated_at)
|
||
VALUES
|
||
(gen_random_uuid()::text, 'RA-89004', airbus330_id, smartavia_id, 'MSN-89004', 'in_service', 25000.0, 8500, NOW(), NOW()),
|
||
(gen_random_uuid()::text, 'RA-89005', airbus330_id, smartavia_id, 'MSN-89005', 'in_service', 23000.5, 7800, NOW(), NOW())
|
||
ON CONFLICT (registration_number) DO NOTHING;
|
||
END IF;
|
||
|
||
IF boeing777_id IS NOT NULL THEN
|
||
INSERT INTO aircraft (id, registration_number, aircraft_type_id, operator_id, serial_number, current_status, total_time, total_cycles, created_at, updated_at)
|
||
VALUES
|
||
(gen_random_uuid()::text, 'RA-89006', boeing777_id, smartavia_id, 'LN-89006', 'in_service', 30000.0, 6500, NOW(), NOW())
|
||
ON CONFLICT (registration_number) DO NOTHING;
|
||
END IF;
|
||
END IF;
|
||
|
||
-- Победа - добавляем еще несколько
|
||
IF EXISTS (SELECT 1 FROM organizations WHERE name = 'Победа' AND kind = 'operator') THEN
|
||
SELECT id INTO smartavia_id FROM organizations WHERE name = 'Победа' AND kind = 'operator' LIMIT 1;
|
||
IF boeing737_id IS NOT NULL THEN
|
||
INSERT INTO aircraft (id, registration_number, aircraft_type_id, operator_id, serial_number, current_status, total_time, total_cycles, created_at, updated_at)
|
||
VALUES
|
||
(gen_random_uuid()::text, 'RA-89082', boeing737_id, smartavia_id, 'LN-89082', 'in_service', 13000.0, 7500, NOW(), NOW()),
|
||
(gen_random_uuid()::text, 'RA-89083', boeing737_id, smartavia_id, 'LN-89083', 'in_service', 11000.5, 6800, NOW(), NOW())
|
||
ON CONFLICT (registration_number) DO NOTHING;
|
||
END IF;
|
||
END IF;
|
||
|
||
-- Россия - добавляем еще несколько
|
||
IF EXISTS (SELECT 1 FROM organizations WHERE name = 'Россия' AND kind = 'operator') THEN
|
||
SELECT id INTO smartavia_id FROM organizations WHERE name = 'Россия' AND kind = 'operator' LIMIT 1;
|
||
IF boeing737_id IS NOT NULL THEN
|
||
INSERT INTO aircraft (id, registration_number, aircraft_type_id, operator_id, serial_number, current_status, total_time, total_cycles, created_at, updated_at)
|
||
VALUES
|
||
(gen_random_uuid()::text, 'RA-73703', boeing737_id, smartavia_id, 'LN-73703', 'in_service', 17000.0, 9500, NOW(), NOW()),
|
||
(gen_random_uuid()::text, 'RA-73704', boeing737_id, smartavia_id, 'LN-73704', 'in_service', 15000.5, 8800, NOW(), NOW())
|
||
ON CONFLICT (registration_number) DO NOTHING;
|
||
END IF;
|
||
END IF;
|
||
|
||
-- Уральские авиалинии - добавляем еще несколько
|
||
IF EXISTS (SELECT 1 FROM organizations WHERE name = 'Уральские авиалинии' AND kind = 'operator') THEN
|
||
SELECT id INTO smartavia_id FROM organizations WHERE name = 'Уральские авиалинии' AND kind = 'operator' LIMIT 1;
|
||
IF airbus320_id IS NOT NULL THEN
|
||
INSERT INTO aircraft (id, registration_number, aircraft_type_id, operator_id, serial_number, current_status, total_time, total_cycles, created_at, updated_at)
|
||
VALUES
|
||
(gen_random_uuid()::text, 'RA-89052', airbus320_id, smartavia_id, 'MSN-89052', 'in_service', 19000.0, 10500, NOW(), NOW()),
|
||
(gen_random_uuid()::text, 'RA-89053', airbus320_id, smartavia_id, 'MSN-89053', 'in_service', 17500.5, 9800, NOW(), NOW())
|
||
ON CONFLICT (registration_number) DO NOTHING;
|
||
END IF;
|
||
END IF;
|
||
|
||
END $$;
|
||
|
||
-- Проверка результата
|
||
SELECT
|
||
o.name as operator_name,
|
||
COUNT(a.id) as aircraft_count
|
||
FROM organizations o
|
||
LEFT JOIN aircraft a ON a.operator_id = o.id
|
||
WHERE o.kind = 'operator'
|
||
GROUP BY o.id, o.name
|
||
ORDER BY o.name;
|