/ *
* 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
{
/// <summary>
///
/// </summary>
[ApiController]
public class EngagementsApiController : ControllerBase
{
private readonly IEngagementService engagementService ;
private readonly ILogger < EngagementsApiController > logger ;
public EngagementsApiController ( IEngagementService _ engagementService , ILogger < EngagementsApiController > _l ogger )
{
engagementService = _ engagementService ;
logger = _l ogger ;
}
/// <summary>
///
/// </summary>
/// <remarks>Récupérer la liste des engagements</remarks>
/// <param name="asc">Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false)</param>
/// <param name="numPage">Numéro de la page du tableau qui affiche les données</param>
/// <param name="parPAge">Nombre d'éléments affiché sur chaque page du tableau</param>
/// <param name="idAgence">id de l'agence à laquelle sont rattachées les données à récupérer</param>
/// <param name="texte">Texte permettant d'identifier l'objet rechercher</param>
/// <param name="tri">Colonne du tableau sur lequel le tri s'effectue</param>
/// <response code="200">OK</response>
/// <response code="403">Acces interdit</response>
[HttpGet]
[Route("/api/engagements")]
//[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState]
[SwaggerOperation("GetEngagements")]
[SwaggerResponse(statusCode: 200, type: typeof(List<EngagementDTO>), description: "OK")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
public virtual async Task < IActionResult > 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 < EngagementDTO > 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 ) ;
}
/// <summary>
///
/// </summary>
/// <remarks>Récupérer la liste des engagements en attente</remarks>
/// <param name="asc">Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false)</param>
/// <param name="numPage">Numéro de la page du tableau qui affiche les données</param>
/// <param name="parPAge">Nombre d'éléments affiché sur chaque page du tableau</param>
/// <param name="idAgence">id de l'agence à laquelle sont rattachées les données à récupérer</param>
/// <param name="texte">Texte permettant d'identifier l'objet rechercher</param>
/// <param name="tri">Colonne du tableau sur lequel le tri s'effectue</param>
/// <response code="200">OK</response>
/// <response code="403">Acces interdit</response>
[HttpGet]
[Route("/api/engagements/enattente")]
//[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState]
[SwaggerOperation("GetEngagementsEnAttente")]
[SwaggerResponse(statusCode: 200, type: typeof(List<EngagementDTO>), description: "OK")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
public virtual async Task < IActionResult > 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 < EngagementDTO > 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 ) ;
}
/// <summary>
///
/// </summary>
/// <remarks>Récupérer la liste des engagements ayant reçu une réponse</remarks>
/// <param name="asc">Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false)</param>
/// <param name="numPage">Numéro de la page du tableau qui affiche les données</param>
/// <param name="parPAge">Nombre d'éléments affiché sur chaque page du tableau</param>
/// <param name="idAgence">id de l'agence à laquelle sont rattachées les données à récupérer</param>
/// <param name="texte">Texte permettant d'identifier l'objet rechercher</param>
/// <param name="tri">Colonne du tableau sur lequel le tri s'effectue</param>
/// <response code="200">OK</response>
/// <response code="403">Acces interdit</response>
[HttpGet]
[Route("/api/engagements/repondus")]
//[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState]
[SwaggerOperation("GetEngagementsRepondus")]
[SwaggerResponse(statusCode: 200, type: typeof(List<EngagementDTO>), description: "OK")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
public virtual async Task < IActionResult > 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 < EngagementDTO > 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 ) ;
}
/// <summary>
///
/// </summary>
/// <remarks>Donnez une réponse à un engagement</remarks>
/// <param name="body"></param>
/// <param name="idEngagement">id engagement</param>
/// <response code="200">Engagement mise à jour</response>
/// <response code="403">Acces interdit</response>
[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 < IActionResult > 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 ) ;
}
}
}