Resolve VSN-1941 "Driver's planning"
Changements et fonctionnalités implémentées
1. Nouveaux endpoints REST pour l'application mobile Trois endpoints pour le planning des chauffeurs :
GET /api/planning/drivers/{driverId}/trips
- Liste des trajets assignés à un chauffeur
- Filtres : startDate, endDate, status, type, vehicleId, monthYear
- Support du format monthYear (ex: 2025-11) qui remplace startDate/endDate
- Par défaut, retourne les trajets du jour si aucune date n'est fournie
GET /api/planning/drivers/{driverId}/trips/{tripId}
- Détails d'un trajet spécifique
- Vérification que le trajet appartient au chauffeur
- Retourne un MobileTripDTO complet
PATCH /api/planning/drivers/{driverId}/trips/{tripId}/status
- Mise à jour du statut d'un trajet
- Validation des transitions de statut (prévu → en_cours → terminé)
- Gestion des erreurs avec codes HTTP appropriés
2. DTOs créés
- MobileTripDTO : DTO principal pour les trajets mobiles
- TripListResponseDTO : Wrapper pour la liste de trajets avec total
- TripStatusUpdateDTO : DTO pour la mise à jour de statut
- TripStopDTO : Informations sur les arrêts (préparé pour usage futur)
- VehicleInfoDTO : Informations sur le véhicule assigné
- DriverPlanningDTO : Informations de planning du chauffeur depuis le user service
- CircuitTripResponseDTO : Structure pour mapper la réponse du circuit service avec TripPointDTO et PassengerDetailsTripDTO
3. Fonctionnalités métier implémentées
Détermination automatique du statut
- Basée sur la date du trajet par rapport à la date actuelle :
Date future → "prevu" Date actuelle → "en_cours" Date passée → "termine"
- Filtrage avancé
Par statut : liste de statuts acceptés Par type : liste de types de trajets Par véhicule : filtre par vehicleId Par date : plage de dates ou mois/année (monthYear)
- Gestion des trajets multi-passagers
Extraction des heures depuis le circuit service pour les trajets avec plusieurs passagers startTime = premier pickupTime du premier tripPoint endTime = dernier pickupTime du dernier tripPoint (dernier drop-off) Fallback vers les heures de TripPlanning si le circuit service n'est pas disponible ou pour les trajets à un seul passager
4. Intégrations avec d'autres services
User Service
- Appel à /api/user/driver/{driverId}/planning pour récupérer :
Informations du chauffeur Véhicule assigné (VehicleInfoDTO)
- Appel unique par requête pour éviter les appels multiples
Gestion d'erreur avec fallback vers un véhicule mock si le service est indisponible
Circuit Service
- Appel à /api/circuit/trip/{tripId} pour récupérer les détails avec tripPoints
- Utilisation de NameUrl.getVsnCircuitServiceUrl() pour la cohérence avec les autres services
- Extraction des heures de pickup depuis les tripPoints pour les trajets multi-passagers
- Fallback automatique en cas d'erreur