using Microsoft.AspNetCore.Mvc; using SchotzIadKmTracker.Api.Models.DTOs; using SchotzIadKmTracker.Api.Services; using SchotzIadKmTracker.Api.Services.Exceptions; namespace SchotzIadKmTracker.Api.Controllers; /// /// Endpoints des résumés kilométriques : Résumé_Mensuel et Résumé_Annuel. /// Le filtre par véhicule est optionnel (Véhicule_Courant utilisé si omis). /// Les paramètres hors bornes (mois ∉ [1, 12], année ∉ [2000, 2100]) sont /// rejetés avec un code HTTP 400 (Exigences 3.6, 3.8, 4.1). /// [ApiController] [Route("api/resumes")] public class ResumesController : ControllerBase { private readonly IResumeService _resumeService; public ResumesController(IResumeService resumeService) { _resumeService = resumeService; } /// /// Retourne le Résumé_Mensuel d'un (année, mois) pour le véhicule indiqué /// (Véhicule_Courant si est omis). Rejette (400) /// les paramètres hors bornes (Exigences 3.6, 3.8). /// [HttpGet("mensuel/{annee:int}/{mois:int}")] [ProducesResponseType(typeof(ResumeMensuelDto), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task> GetResumeMensuel( int annee, int mois, [FromQuery] int? vehiculeId, CancellationToken cancellationToken) { try { var resume = await _resumeService.GetResumeMensuelAsync(annee, mois, vehiculeId, cancellationToken); return Ok(resume); } catch (ResumeParametreInvalideException ex) { return Problem(detail: ex.Message, statusCode: StatusCodes.Status400BadRequest); } } /// /// Retourne le Résumé_Annuel d'une année (12 résumés mensuels) pour le véhicule /// indiqué (Véhicule_Courant si est omis). Rejette (400) /// une année hors bornes (Exigences 3.6, 4.1). /// [HttpGet("annuel/{annee:int}")] [ProducesResponseType(typeof(ResumeAnnuelDto), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task> GetResumeAnnuel( int annee, [FromQuery] int? vehiculeId, CancellationToken cancellationToken) { try { var resume = await _resumeService.GetResumeAnnuelAsync(annee, vehiculeId, cancellationToken); return Ok(resume); } catch (ResumeParametreInvalideException ex) { return Problem(detail: ex.Message, statusCode: StatusCodes.Status400BadRequest); } } }