← Phase 2 Overview / Transport Complet
🚆
Module 13 — Phase 2

Transport Complet & Alertes Temps Réel

Trains, bus longue distance, hébergements avancés (hostels), activités, alertes prix en temps réel et intégration multi-modale.

Backlog

User Stories

US13.1
En tant qu'utilisateur, je peux chercher trains et bus entre deux villes (Rome2Rio)
must 8pts
US13.2
En tant qu'utilisateur, je vois une comparaison multi-modale (avion vs train vs bus) avec prix et durée
must 8pts
US13.3
En tant qu'utilisateur, mes alertes prix sont vérifiées toutes les 15 min (vs 6h en Phase 1)
must 5pts
US13.4
En tant qu'utilisateur, je peux chercher des hostels et auberges de jeunesse (Hostelworld)
must 6pts
US13.5
En tant qu'utilisateur, je peux chercher des activités et expériences (Viator/GetYourGuide)
must 8pts
US13.6
En tant qu'utilisateur, le copilote inclut automatiquement les options transport dans ses itinéraires
must 5pts
US13.7
En tant qu'utilisateur, je vois les options de trajet depuis ma position GPS en temps réel
should 4pts
US13.8
En tant qu'utilisateur, je peux filtrer les activités par type, budget et durée
should 3pts
US13.9
En tant que système, les prix de vols sont vérifiés toutes les 15 min pour alertes actives
must 8pts
/transport (v2)

Endpoints API

GET /transport/multimodal ?from=&to=&date= — comparaison avion/train/bus 🔒 auth
GET /transport/trains ?from=&to=&date= — Rome2Rio trains 🔒 auth
GET /transport/buses ?from=&to=&date= — Rome2Rio bus 🔒 auth
GET /transport/hostels ?city=&checkin=&checkout=&adults= — Hostelworld 🔒 auth
GET /transport/activities ?place_id=&type=&budget_max= — Viator+GetYourGuide 🔒 auth
GET /transport/activities/:id Détail d'une activité public
GET /transport/nearby-options ?lat=&lng= — tous modes depuis position GPS 🔒 auth
GET /transport/price-alerts/status Prix actuels de toutes mes alertes 🔒 auth
PATCH /transport/price-alerts/:id Modifier seuil ou désactiver 🔒 auth
Schémas de données

Tables Transport v2

TABLE transport_options_cache
id UUID PRIMARY KEY origin TEXT -- IATA ou ville destination TEXT date DATE mode ENUM('flight','train','bus','ferry') provider TEXT price_usd DECIMAL(10,2) duration_min INT stops INT booking_url TEXT raw_data JSONB cached_at TIMESTAMPTZ DEFAULT NOW() expires_at TIMESTAMPTZ -- 15min pour alertes, 2h sinon
TABLE activities_cache
id UUID PRIMARY KEY place_id UUID REFERENCES places(id) provider ENUM('viator','getyourguide') provider_id TEXT title TEXT NOT NULL description TEXT photo_url TEXT price_usd DECIMAL(10,2) duration_hours FLOAT type TEXT[] rating FLOAT reviews_count INT booking_url TEXT cached_at TIMESTAMPTZ DEFAULT NOW()
Business Logic

Règles Métier

🔄
Rome2Rio multi-modal
API Rome2Rio retourne toutes les options (avion/train/bus/ferry/voiture) avec prix estimés. Reformatté en format NOMIIQ unifié. Cache 2h. Fallback Amadeus si Rome2Rio KO.
⏱️
Alertes prix temps réel
BullMQ worker toutes les 15 min : vérifier top 20 alertes les plus récentes (priority queue). Si prix ≤ seuil → FCM push + email + marquer notified_at. Anti-spam : 1 notif par alert par 6h max.
🎯
Activités dans les itinéraires IA
Le copilote v2 peut appeler get_activities(place_id, budget, type) comme outil LangGraph. Les activités Viator/GTG sont injectées dans le JSON itinéraire avec lien de réservation.
🏨
Hostels Hostelworld
API Hostelworld Affiliate. Filtres : dortoir/privé, petits-déjeuners, ambiance. Commission 12%. Affiché dans les résultats hébergement avec badge "Hostel" distinctif.
Critères d'acceptation
Résultats multi-modal affichés en < 4s (cache + parallel API calls)
Alertes prix : notification dans les 15 min suivant le passage sous le seuil
Activités disponibles pour 95% des destinations dans le top 500 NOMIIQ
Itinéraire IA avec transport et activités intégrés généré en < 25s