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.
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using TrajetKmTracker.Api.Models.DTOs;
|
||||
using TrajetKmTracker.Api.Services;
|
||||
|
||||
namespace TrajetKmTracker.Api.Controllers;
|
||||
|
||||
/// <summary>
|
||||
/// Endpoint d'autocomplétion locale des adresses déjà géocodées (Cache_Adresses).
|
||||
/// La recherche exige au moins 3 caractères ; en deçà, une liste vide est retournée
|
||||
/// (Exigence 9.3).
|
||||
/// </summary>
|
||||
[ApiController]
|
||||
[Route("api/adresses")]
|
||||
public class AdressesController : ControllerBase
|
||||
{
|
||||
private readonly IAdresseCacheService _adresseCacheService;
|
||||
|
||||
public AdressesController(IAdresseCacheService adresseCacheService)
|
||||
{
|
||||
_adresseCacheService = adresseCacheService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche dans le Cache_Adresses les suggestions correspondant au fragment <paramref name="q"/>
|
||||
/// (min. 3 caractères), ordonnées de la plus récemment utilisée à la plus ancienne.
|
||||
/// </summary>
|
||||
[HttpGet("search")]
|
||||
[ProducesResponseType(typeof(IReadOnlyList<AdresseCacheDto>), StatusCodes.Status200OK)]
|
||||
public async Task<ActionResult<IReadOnlyList<AdresseCacheDto>>> Search(
|
||||
[FromQuery] string? q,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
var suggestions = await _adresseCacheService.RechercherLocalAsync(
|
||||
q ?? string.Empty,
|
||||
cancellationToken: cancellationToken);
|
||||
|
||||
return Ok(suggestions);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user