/* * API du serveur de l'application de digitalisation des EP * * API qui sra utilisée afin de faire communiquer le client et le serveur ainsi que le serveur et la boîte noire. * * OpenAPI spec version: 1.3.4 * * Generated by: https://github.com/swagger-api/swagger-codegen.git */ using System; using System.Collections.Generic; using Microsoft.AspNetCore.Mvc; using Swashbuckle.AspNetCore.Annotations; using Swashbuckle.AspNetCore.SwaggerGen; using Newtonsoft.Json; using System.ComponentModel.DataAnnotations; using IO.Swagger.Attributes; using IO.Swagger.Security; using Microsoft.AspNetCore.Authorization; using IO.Swagger.DTO; using EPAServeur.IServices; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using EPAServeur.Exceptions; using Microsoft.EntityFrameworkCore; namespace IO.Swagger.Controllers { /// /// /// [ApiController] public class EngagementsApiController : ControllerBase { private readonly IEngagementService engagementService; private readonly ILogger logger; public EngagementsApiController(IEngagementService _engagementService, ILogger _logger) { engagementService = _engagementService; logger = _logger; } /// /// /// /// Récupérer la liste des engagements /// Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false) /// Numéro de la page du tableau qui affiche les données /// Nombre d'éléments affiché sur chaque page du tableau /// id de l'agence à laquelle sont rattachées les données à récupérer /// Texte permettant d'identifier l'objet rechercher /// Colonne du tableau sur lequel le tri s'effectue /// OK /// Acces interdit [HttpGet] [Route("/api/engagements")] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("GetEngagements")] [SwaggerResponse(statusCode: 200, type: typeof(List), description: "OK")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] public virtual async Task GetEngagements([FromQuery][Required()]bool? asc, [FromQuery][Required()]int? numPage, [FromQuery][Required()]int? parPAge, [FromQuery]long? idAgence, [FromQuery]string texte, [FromQuery]string tri) { logger.LogInformation("Récupération de la liste des engagements."); IEnumerable engagements = null; try { engagements = await engagementService.GetEngagementsAsync(asc, numPage, parPAge, idAgence, texte, tri); } catch (ArgumentNullException) { logger.LogError("Un des arguments passés dans la requête pour récupérer la liste des engagements est invalide."); } catch (Exception) { logger.LogError("Une erreur inconnue est survenue lors de la récupération de la liste des engagements."); } logger.LogInformation("Liste des engagements récupérée."); return Ok(engagements); } /// /// /// /// Récupérer la liste des engagements en attente /// Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false) /// Numéro de la page du tableau qui affiche les données /// Nombre d'éléments affiché sur chaque page du tableau /// id de l'agence à laquelle sont rattachées les données à récupérer /// Texte permettant d'identifier l'objet rechercher /// Colonne du tableau sur lequel le tri s'effectue /// OK /// Acces interdit [HttpGet] [Route("/api/engagements/enattente")] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("GetEngagementsEnAttente")] [SwaggerResponse(statusCode: 200, type: typeof(List), description: "OK")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] public virtual async Task GetEngagementsEnAttente([FromQuery][Required()]bool? asc, [FromQuery][Required()]int? numPage, [FromQuery][Required()]int? parPAge, [FromQuery]long? idAgence, [FromQuery]string texte, [FromQuery]string tri) { logger.LogInformation("Récupération de la liste des engagements en attente."); IEnumerable engagements = null; try { engagements = await engagementService.GetEngagementsEnAttenteAsync(asc, numPage, parPAge, idAgence, texte, tri); } catch (ArgumentNullException) { logger.LogError("Un des arguments passés dans la requête pour récupérer la liste des engagements en attente est invalide."); } catch (Exception) { logger.LogError("Une erreur inconnue est survenue lors de la récupération de la liste des engagements en attente."); } logger.LogInformation("Liste des engagements en attente récupérée."); return Ok(engagements); } /// /// /// /// Récupérer la liste des engagements ayant reçu une réponse /// Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false) /// Numéro de la page du tableau qui affiche les données /// Nombre d'éléments affiché sur chaque page du tableau /// id de l'agence à laquelle sont rattachées les données à récupérer /// Texte permettant d'identifier l'objet rechercher /// Colonne du tableau sur lequel le tri s'effectue /// OK /// Acces interdit [HttpGet] [Route("/api/engagements/repondus")] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("GetEngagementsRepondus")] [SwaggerResponse(statusCode: 200, type: typeof(List), description: "OK")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] public virtual async Task GetEngagementsRepondus([FromQuery][Required()]bool? asc, [FromQuery][Required()]int? numPage, [FromQuery][Required()]int? parPAge, [FromQuery]long? idAgence, [FromQuery]string texte, [FromQuery]string tri) { logger.LogInformation("Récupération de la liste des engagements répondus."); IEnumerable engagements = null; try { engagements = await engagementService.GetEngagementsRepondusAsync(asc, numPage, parPAge, idAgence, texte, tri); } catch (ArgumentNullException) { logger.LogError("Un des arguments passés dans la requête pour récupérer la liste des engagements répondus est invalide."); } catch (Exception) { logger.LogError("Une erreur inconnue est survenue lors de la récupération de la liste des engagements répondus."); } logger.LogInformation("Liste des engagements répondus récupérée."); return Ok(engagements); } /// /// /// /// Donnez une réponse à un engagement /// /// id engagement /// Engagement mise à jour /// Acces interdit [HttpPut] [Route("/api/engagements/{idEngagement}/repondre")] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("RepondreEngagement")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] public virtual async Task RepondreEngagement([FromBody]EngagementDTO body, [FromRoute][Required]long? idEngagement) { logger.LogInformation("Tentative de mise à jour de l'engagement {idEngagement}.", idEngagement); EngagementDTO engagement = null; try { engagement = await engagementService.RepondreEngagementAsync(body, idEngagement); } catch (EngagementInvalidException ex) { logger.LogWarning("Des données sont manquants, l'engagement {idEngagement} ne peut pas être mise à jour.", idEngagement); ErreurDTO erreur = new ErreurDTO() { Code = "400", Message = ex.Message }; return BadRequest(erreur); } catch (EngagementIncompatibleIdException) { logger.LogError("L'id de l'engagement à mettre à jour {body.Id} et l'id de l'engagement avec les nouvelles informations {idEngagement} sont différents.", body.Id, idEngagement); } catch (DbUpdateConcurrencyException) { logger.LogError("L'engagement {idEngagement} n'a pas pu être mise à jour car il est pris par une autre ressource.", idEngagement); } catch (DbUpdateException) { logger.LogError("Une erreur est survenue dans la base de données lors de la mise à jour de l'engagement {idEngagement}.", idEngagement); } catch (Exception) { logger.LogError("Une erreur inconnue est survenue lors de la mise à jour de l'engagement {idEngagement}.", idEngagement); } logger.LogInformation("Mise à jour de l'engagement {idEngagement} réussie."); return Ok(engagement); } } }