using Microsoft.AspNetCore.Mvc; using SchotzIadKmTracker.Api.Models.DTOs; using SchotzIadKmTracker.Api.Services; using SchotzIadKmTracker.Api.Services.Exceptions; namespace SchotzIadKmTracker.Api.Controllers; /// /// Endpoint de gestion de la configuration globale de l'application : lecture et modification /// de la précision d'arrondi des distances (Precision_Distance, 0/1/2 décimales). /// [ApiController] [Route("api/parametres-application")] public class ParametresApplicationController : ControllerBase { private readonly IPrecisionDistanceService _precisionDistanceService; public ParametresApplicationController(IPrecisionDistanceService precisionDistanceService) { _precisionDistanceService = precisionDistanceService; } /// /// Retourne la configuration courante (crée la ligne singleton avec la valeur par défaut /// (2) si elle est absente). /// [HttpGet] [ProducesResponseType(typeof(ParametresApplicationDto), StatusCodes.Status200OK)] public async Task> Get(CancellationToken cancellationToken) { var precision = await _precisionDistanceService.ObtenirAsync(cancellationToken); return Ok(new ParametresApplicationDto(precision)); } /// /// Modifie la précision des distances. Rejette (400) si la valeur n'est pas 0, 1 ou 2. /// [HttpPut] [ProducesResponseType(typeof(ParametresApplicationDto), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task> Put( [FromBody] SavePrecisionDistanceDto dto, CancellationToken cancellationToken) { try { var precision = await _precisionDistanceService.DefinirAsync(dto.PrecisionDistanceKm, cancellationToken); return Ok(new ParametresApplicationDto(precision)); } catch (PrecisionDistanceInvalideException ex) { return Problem(detail: ex.Message, statusCode: StatusCodes.Status400BadRequest); } } }