@ -20,6 +20,9 @@ using Microsoft.AspNetCore.Authorization;
using IO.Swagger.DTO ;
using IO.Swagger.DTO ;
using EPAServeur.IServices ;
using EPAServeur.IServices ;
using System.Threading.Tasks ;
using System.Threading.Tasks ;
using Microsoft.Extensions.Logging ;
using EPAServeur.Exceptions ;
using Microsoft.EntityFrameworkCore ;
namespace IO.Swagger.Controllers
namespace IO.Swagger.Controllers
{
{
@ -30,10 +33,13 @@ namespace IO.Swagger.Controllers
public class EngagementsApiController : ControllerBase
public class EngagementsApiController : ControllerBase
{
{
private readonly IEngagementService engagementService ;
private readonly IEngagementService engagementService ;
private readonly ILogger < EngagementsApiController > logger ;
public EngagementsApiController ( IEngagementService _ engagementService )
public EngagementsApiController ( IEngagementService _ engagementService , ILogger < EngagementsApiController > _l ogger )
{
{
engagementService = _ engagementService ;
engagementService = _ engagementService ;
logger = _l ogger ;
}
}
/// <summary>
/// <summary>
///
///
@ -54,19 +60,26 @@ namespace IO.Swagger.Controllers
[SwaggerOperation("GetEngagements")]
[SwaggerOperation("GetEngagements")]
[SwaggerResponse(statusCode: 200, type: typeof(List<EngagementDTO>), description: "OK")]
[SwaggerResponse(statusCode: 200, type: typeof(List<EngagementDTO>), description: "OK")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
public virtual IActionResult GetEngagements ( [ FromQuery ] [ Required ( ) ] bool? asc , [ FromQuery ] [ Required ( ) ] int? numPage , [ FromQuery ] [ Required ( ) ] int? parPAge , [ FromQuery ] long? idAgence , [ FromQuery ] string texte , [ FromQuery ] string tri )
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 )
{
{
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
logger . LogInformation ( "Récupération de la liste des engagements." ) ;
IEnumerable < EngagementDTO > engagements = engagementService . GetEngagements ( asc , numPage , parPAge , idAgence , texte , tri ) ;
if ( engagements = = null )
IEnumerable < EngagementDTO > engagements = null ;
try
{
{
ErreurDTO erreur = new ErreurDTO ( )
engagements = await engagementService . GetEngagementsAsync ( asc , numPage , parPAge , idAgence , texte , tri ) ;
}
catch ( ArgumentNullException )
{
{
Code = "404" ,
logger . LogError ( "Un des arguments passés dans la requête pour récupérer la liste des engagements est invalide." ) ;
Message = "Aucun engagement"
} ;
return NotFound ( erreur ) ;
}
}
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 ) ;
return Ok ( engagements ) ;
}
}
@ -90,20 +103,27 @@ namespace IO.Swagger.Controllers
[SwaggerOperation("GetEngagementsEnAttente")]
[SwaggerOperation("GetEngagementsEnAttente")]
[SwaggerResponse(statusCode: 200, type: typeof(List<EngagementDTO>), description: "OK")]
[SwaggerResponse(statusCode: 200, type: typeof(List<EngagementDTO>), description: "OK")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
public virtual IActionResult GetEngagementsEnAttente ( [ FromQuery ] [ Required ( ) ] bool? asc , [ FromQuery ] [ Required ( ) ] int? numPage , [ FromQuery ] [ Required ( ) ] int? parPAge , [ FromQuery ] long? idAgence , [ FromQuery ] string texte , [ FromQuery ] string tri )
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 )
{
{
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
logger . LogInformation ( "Récupération de la liste des engagements en attente." ) ;
IEnumerable < EngagementDTO > engagements = engagementService . GetEngagementsEnAttente ( asc , numPage , parPAge , idAgence , texte , tri ) ;
if ( engagements = = null )
IEnumerable < EngagementDTO > engagements = null ;
try
{
{
ErreurDTO erreur = new ErreurDTO ( )
engagements = await engagementService . GetEngagementsEnAttenteAsync ( asc , numPage , parPAge , idAgence , texte , tri ) ;
}
catch ( ArgumentNullException )
{
{
Code = "404" ,
logger . LogError ( "Un des arguments passés dans la requête pour récupérer la liste des engagements en attente est invalide." ) ;
Message = "Aucun engagement en attente"
}
} ;
catch ( Exception )
return NotFound ( erreur ) ;
{
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 ) ;
return Ok ( engagements ) ;
}
}
@ -128,18 +148,25 @@ namespace IO.Swagger.Controllers
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
[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 )
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 )
{
{
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
logger . LogInformation ( "Récupération de la liste des engagements répondus." ) ;
IEnumerable < EngagementDTO > engagements = await engagementService . GetEngagementsRepondus ( asc , numPage , parPAge , idAgence , texte , tri ) ;
if ( engagements = = null )
IEnumerable < EngagementDTO > engagements = null ;
try
{
{
ErreurDTO erreur = new ErreurDTO ( )
engagements = await engagementService . GetEngagementsRepondusAsync ( asc , numPage , parPAge , idAgence , texte , tri ) ;
}
catch ( ArgumentNullException )
{
{
Code = "404" ,
logger . LogError ( "Un des arguments passés dans la requête pour récupérer la liste des engagements répondus est invalide." ) ;
Message = "Aucun engagement en repondu"
}
} ;
catch ( Exception )
return NotFound ( erreur ) ;
{
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 ) ;
return Ok ( engagements ) ;
}
}
@ -159,10 +186,42 @@ namespace IO.Swagger.Controllers
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
public virtual async Task < IActionResult > RepondreEngagement ( [ FromBody ] EngagementDTO body , [ FromRoute ] [ Required ] long? idEngagement )
public virtual async Task < IActionResult > RepondreEngagement ( [ FromBody ] EngagementDTO body , [ FromRoute ] [ Required ] long? idEngagement )
{
{
//if (body != null && body.Realise == false && string.IsNullOrWhiteSpace(body.RaisonNonRealisable))
logger . LogInformation ( "Tentative de mise à jour de l'engagement {idEngagement}." , idEngagement ) ;
// return null; // A traiter ! Retourner une erreur
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 ) ;
}
EngagementDTO engagement = await engagementService . RepondreEngagement ( body , idEngagement ) ;
logger . LogInformation ( "Mise à jour de l'engagement {idEngagement} réussie." ) ;
return Ok ( engagement ) ;
return Ok ( engagement ) ;
}
}