Files
ferrovia-panel/migrations/test_data_perturbations.sql
2026-08-25 01:23:13 +02:00

205 lines
5.2 KiB
SQL

-- ============================================================================
-- DONNÉES DE TEST: Perturbations
-- Description: Jeux de données pour tester le système de perturbations
-- ============================================================================
-- Note: Ces données sont à insérer APRÈS avoir des horaires existants dans la base
-- Exemple 1: Retard sur un train
-- Remplacer 'HORAIRE_ID_1' par un véritable ID d'horaire existant
INSERT INTO perturbations (
horaire_id,
type_perturbation,
duree_retard_minutes,
cause,
cause_details,
date_debut,
date_fin,
actif,
notes
) VALUES (
(SELECT id FROM horaires LIMIT 1), -- Premier horaire de la base
'retard',
25,
'incident_technique',
'Panne de signalisation à Paris-Montparnasse',
NOW(),
NOW() + INTERVAL '2 hours',
true,
'Retard estimé de 25 minutes sur l''ensemble du parcours'
);
-- Exemple 2: Suppression de train avec substitution
INSERT INTO perturbations (
horaire_id,
type_perturbation,
duree_retard_minutes,
cause,
cause_details,
sillon_substitution_id,
date_debut,
date_fin,
actif,
notes
) VALUES (
(SELECT id FROM horaires LIMIT 1 OFFSET 1), -- Deuxième horaire
'suppression',
NULL,
'mouvement_social',
'Grève nationale du personnel roulant',
(SELECT id FROM horaires LIMIT 1 OFFSET 2), -- Train de substitution
NOW(),
NOW() + INTERVAL '1 day',
true,
'Train supprimé - Report sur le train suivant disponible'
);
-- Exemple 3: Modification de parcours
DO $$
DECLARE
v_perturbation_id UUID;
v_horaire_id UUID;
BEGIN
-- Récupérer un horaire avec des gares desservies
SELECT h.id INTO v_horaire_id
FROM horaires h
WHERE EXISTS (
SELECT 1 FROM horaires_gares_desservies hgd
WHERE hgd.horaire_id = h.id
)
LIMIT 1;
IF v_horaire_id IS NULL THEN
RAISE NOTICE 'Aucun horaire avec gares desservies trouvé, test ignoré';
RETURN;
END IF;
-- Créer la perturbation
INSERT INTO perturbations (
horaire_id,
type_perturbation,
duree_retard_minutes,
cause,
cause_details,
date_debut,
actif,
notes
) VALUES (
v_horaire_id,
'modification_parcours',
NULL,
'travaux',
'Travaux de maintenance sur la voie entre Lyon et Valence',
NOW(),
true,
'Modification du parcours : certaines gares ne seront pas desservies'
) RETURNING id INTO v_perturbation_id;
-- Ajouter des modifications de parcours
-- Supprimer une gare du parcours
INSERT INTO perturbations_modifications_parcours (
perturbation_id,
type_modification,
gare_id,
gare_nom,
ordre
) SELECT
v_perturbation_id,
'gare_supprimee',
gare_id,
gare_nom,
ordre
FROM horaires_gares_desservies
WHERE horaire_id = v_horaire_id
LIMIT 1;
RAISE NOTICE 'Perturbation de modification de parcours créée avec succès';
END $$;
-- Exemple 4: Retard causé par les conditions météorologiques
INSERT INTO perturbations (
horaire_id,
type_perturbation,
duree_retard_minutes,
cause,
cause_details,
date_debut,
date_fin,
actif,
notes
) VALUES (
(SELECT id FROM horaires LIMIT 1 OFFSET 3),
'retard',
45,
'conditions_meteorologiques',
'Fortes chutes de neige en Auvergne-Rhône-Alpes',
NOW(),
NOW() + INTERVAL '4 hours',
true,
'Circulation ralentie sur l''ensemble des lignes'
);
-- Exemple 5: Perturbation inactive (historique)
INSERT INTO perturbations (
horaire_id,
type_perturbation,
duree_retard_minutes,
cause,
cause_details,
date_debut,
date_fin,
actif,
notes
) VALUES (
(SELECT id FROM horaires LIMIT 1 OFFSET 4),
'retard',
10,
'affluence',
'Affluence exceptionnelle lors du départ',
NOW() - INTERVAL '1 day',
NOW() - INTERVAL '1 day' + INTERVAL '30 minutes',
false,
'Perturbation terminée - Retard résorbé'
);
-- Afficher un résumé des perturbations de test créées
SELECT
'Données de test créées' as statut,
COUNT(*) as nombre_perturbations_test,
COUNT(*) FILTER (WHERE actif = true) as perturbations_actives,
COUNT(*) FILTER (WHERE actif = false) as perturbations_inactives
FROM perturbations
WHERE notes LIKE '%test%' OR notes LIKE '%Test%';
-- Afficher les perturbations créées
SELECT
p.id,
p.type_perturbation,
p.duree_retard_minutes,
p.cause,
p.actif,
h.numero_train,
h.gare_depart_nom,
h.gare_arrivee_nom
FROM perturbations p
JOIN horaires h ON p.horaire_id = h.id
ORDER BY p.created_at DESC
LIMIT 10;
-- ============================================================================
-- NETTOYAGE DES DONNÉES DE TEST
-- ============================================================================
-- Décommenter pour supprimer toutes les données de test
/*
DELETE FROM perturbations_modifications_parcours
WHERE perturbation_id IN (
SELECT id FROM perturbations
WHERE notes LIKE '%test%' OR notes LIKE '%Test%'
);
DELETE FROM perturbations
WHERE notes LIKE '%test%' OR notes LIKE '%Test%';
SELECT 'Données de test supprimées' as statut;
*/