Files
SchotzIAD/backend/TrajetKmTracker.Api/Services/IAdresseCacheService.cs
T
MadJax e3f946f7d4 SchotzIAD KM Tracker : suivi des trajets kilométriques (Angular + .NET 8)
Application complète de saisie et de suivi des trajets kilométriques avec
calcul de distance routière (OpenRouteService), barème kilométrique, résumés
et régularisation annuelle.

Backend (ASP.NET Core .NET 8, EF Core, SQLite) :
- Trajets (CRUD, réordonnancement, insertion), calcul de distance ORS avec
  fallback Haversine, géométrie d'itinéraire stockée par trajet, recalcul en masse.
- Profil, véhicules (avec dénomination), carnet d'adresses nommées, cache d'adresses.
- Barème kilométrique : tranches multiples par puissance fiscale, borne max
  exclusive avec 'illimité' (KmMax nullable), coefficient à 3 décimales,
  recopie du dernier barème connu.
- Résumés mensuel/annuel, montants réglés, régularisation, export PDF.

Frontend (Angular 22, zoneless + signals) :
- Consultation par jour, navigation temporelle synchronisée, carte Leaflet,
  formulaire de trajet (adresses nommées, domicile, autocomplétion BAN).
- Détection de changement zoneless (indépendante de zone.js).

Hébergement : Docker Compose (nginx + backend), scripts run-dev.sh / run-docker.sh.
2026-09-14 02:08:27 +02:00

49 lines
2.4 KiB
C#

using TrajetKmTracker.Api.Models.DTOs;
namespace TrajetKmTracker.Api.Services;
/// <summary>
/// Gestion du Cache_Adresses : recherche locale des adresses déjà connues, mise en cache
/// (upsert) des adresses géocodées et politique d'éviction LRU.
/// </summary>
public interface IAdresseCacheService
{
/// <summary>
/// Recherche locale des adresses en cache correspondant au fragment fourni.
/// Retourne une liste vide si le fragment fait moins de 3 caractères (Requirement 9.3).
/// Les suggestions sont ordonnées de la plus récemment utilisée à la plus ancienne.
/// </summary>
/// <param name="query">Fragment de recherche (min. 3 caractères).</param>
/// <param name="limite">Nombre maximal de suggestions retournées (par défaut 5).</param>
Task<IReadOnlyList<AdresseCacheDto>> RechercherLocalAsync(
string query,
int limite = 5,
CancellationToken cancellationToken = default);
/// <summary>
/// Recherche l'entrée du cache correspondant exactement à l'adresse fournie (après normalisation).
/// Utilisé lors de la création d'un Trajet pour éviter un appel BAN (Requirement 9.2).
/// Met à jour la date de dernière utilisation de l'entrée trouvée.
/// </summary>
/// <returns>Les coordonnées et la géométrie si l'adresse est en cache, sinon <c>null</c>.</returns>
Task<AdresseCacheEntreeDto?> ObtenirParAdresseAsync(
string adresse,
CancellationToken cancellationToken = default);
/// <summary>
/// Insère l'adresse dans le cache si elle est absente, sinon met uniquement à jour sa date de
/// dernière utilisation sans modifier ses coordonnées (Requirements 9.1, 9.6). Applique ensuite
/// la politique d'éviction LRU (Requirement 9.5). L'ensemble s'exécute en transaction.
/// </summary>
/// <param name="adresse">Libellé de l'adresse (sera normalisé pour le matching).</param>
/// <param name="latitude">Latitude à utiliser si l'adresse est nouvelle.</param>
/// <param name="longitude">Longitude à utiliser si l'adresse est nouvelle.</param>
/// <param name="geometrieJson">Géométrie GeoJSON optionnelle si l'adresse est nouvelle.</param>
Task UpsertAdresseAsync(
string adresse,
double latitude,
double longitude,
string? geometrieJson = null,
CancellationToken cancellationToken = default);
}