feat: réutilisation des coordonnées déjà géocodées (domicile, insertion de trajets)

Expose les coordonnées déjà géocodées dans ProfilDto
(DomicileLatitude/Longitude) et TrajetDto (DepartLatitude/Longitude,
ArriveeLatitude/Longitude) afin que le Frontend les réutilise sans
déclencher un nouveau géocodage BAN :

- Bouton « Utiliser mon domicile » (trajet-form) : utilise désormais
  les coordonnées du Profil au lieu de forcer un re-géocodage.
- Actions « insérer avant/après » (trajet-list) : transmettent les
  coordonnées déjà connues du point de fin repris au formulaire
  d'insertion.

Le résumé mensuel (ResumeService) résout les coordonnées via le
Cache_Adresses pour chaque trajet (nouvelle méthode
ConstruireResumeMensuelAvecCoordonneesAsync) ; le résumé annuel reste
inchangé pour éviter des lookups de cache inutiles sur une vue qui
n'affiche pas le détail des trajets.

Met à jour design.md et design-requirements.md (Requirements 10 et 11)
pour refléter le nouveau contrat d'API.
This commit is contained in:
2026-10-13 20:52:04 +02:00
parent 7695deae10
commit d015ca1c98
13 changed files with 170 additions and 35 deletions
@@ -98,7 +98,7 @@ public class TrajetService : ITrajetService
}
return new TrajetCreationResult(
Trajet: ToDto(trajet),
Trajet: ToDto(trajet, distanceResult),
Avertissement: distanceResult.Avertissement,
Message: distanceResult.Avertissement ? distanceResult.Message : null);
}
@@ -224,7 +224,7 @@ public class TrajetService : ITrajetService
}
return new TrajetUpdateResult(
Trajet: ToDto(trajet),
Trajet: ToDto(trajet, distanceResult),
Avertissement: avertissement,
Message: messageAvertissement);
}
@@ -438,7 +438,15 @@ public class TrajetService : ITrajetService
return parsed;
}
private static TrajetDto ToDto(Trajet t) =>
/// <summary>
/// Construit le <see cref="TrajetDto"/> de retour, enrichi des coordonnées déjà résolues
/// par <paramref name="distanceResult"/> (calcul de distance effectué dans le même appel),
/// afin que le frontend puisse les réutiliser sans re-géocoder (ex. insertion d'un trajet
/// reprenant cette adresse). <c>null</c> si aucun calcul n'a eu lieu dans cet appel (adresses
/// inchangées à la modification) : aucune régression, ce DTO n'étant pas la source utilisée
/// pour l'insertion (voir ResumeService, qui résout les coordonnées via le Cache_Adresses).
/// </summary>
private static TrajetDto ToDto(Trajet t, DistanceCalculationResult? distanceResult = null) =>
new(
t.Id,
t.Date,
@@ -450,5 +458,9 @@ public class TrajetService : ITrajetService
t.Position,
t.VehiculeId,
t.PuissanceFiscale,
t.AllerRetour);
t.AllerRetour,
distanceResult?.DepartLatitude,
distanceResult?.DepartLongitude,
distanceResult?.ArriveeLatitude,
distanceResult?.ArriveeLongitude);
}