@ -19,6 +19,16 @@ using IO.Swagger.Security;
using Microsoft.AspNetCore.Authorization ;
using Microsoft.AspNetCore.Authorization ;
using IO.Swagger.DTO ;
using IO.Swagger.DTO ;
using IO.Swagger.Enum ;
using IO.Swagger.Enum ;
using EPAServeur.Attributes ;
using EPAServeur.IServices ;
using Microsoft.Extensions.Logging ;
using Microsoft.AspNetCore.Hosting ;
using Microsoft.Extensions.Hosting ;
using Microsoft.AspNetCore.Http ;
using System.Threading.Tasks ;
using EPAServeur.Exceptions ;
using Microsoft.EntityFrameworkCore ;
using Microsoft.AspNetCore.Authentication.JwtBearer ;
namespace IO.Swagger.Controllers
namespace IO.Swagger.Controllers
{
{
@ -28,12 +38,23 @@ namespace IO.Swagger.Controllers
[ApiController]
[ApiController]
public class EngagementsApiController : ControllerBase
public class EngagementsApiController : ControllerBase
{
{
private readonly IEngagementService engagementService ;
private readonly ILogger < EngagementsApiController > logger ;
private readonly IWebHostEnvironment env ;
public EngagementsApiController ( IEngagementService _ engagementService , ILogger < EngagementsApiController > _l ogger , IWebHostEnvironment _ env )
{
engagementService = _ engagementService ;
logger = _l ogger ;
env = _ env ;
}
/// <summary>
/// <summary>
///
///
/// </summary>
/// </summary>
/// <remarks>Récupérer la liste des engagements.</remarks>
/// <remarks>Récupérer la liste des engagements.</remarks>
/// <param name="etatsEngagement">Etats de l'engagement</param>
/// <param name="idBUs">liste des ids des BU auxquelles les données sont rattachées</param>
/// <param name="idBUs">liste des ids des BU auxquelles les données sont rattachées</param>
/// <param name="etatsEngagement">Etats de l'engagement</param>
/// <param name="asc">Indique si les données sont récupérées dans l'ordre croissant ou non</param>
/// <param name="asc">Indique si les données sont récupérées dans l'ordre croissant ou non</param>
/// <param name="numPage">Numéro de la page du tableau à afficher</param>
/// <param name="numPage">Numéro de la page du tableau à afficher</param>
/// <param name="parPAge">Nombre d’élément maximum à afficher dans le tableau</param>
/// <param name="parPAge">Nombre d’élément maximum à afficher dans le tableau</param>
@ -45,41 +66,49 @@ namespace IO.Swagger.Controllers
/// <response code="500">Une erreur est survenue sur le serveur</response>
/// <response code="500">Une erreur est survenue sur le serveur</response>
[HttpGet]
[HttpGet]
[Route("/api/engagements")]
[Route("/api/engagements")]
[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName )]
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme, Roles = "RH" )]
[ValidateModelState]
[ValidateModelState]
[SwaggerOperation("GetEngagements")]
[SwaggerOperation("GetEngagements")]
[SwaggerResponse(statusCode: 200, type: typeof(List<EngagementDTO>), description: "OK")]
[SwaggerResponse(statusCode: 200, type: typeof(List<EngagementDTO>), description: "OK")]
[SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L'utilisateur souhaitant accéder à la ressource n'est pas authentifié")]
[SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L'utilisateur souhaitant accéder à la ressource n'est pas authentifié")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")]
[SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")]
[SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")]
public virtual IActionResult GetEngagements ( [ FromQuery ] List < EtatEngagement > etatsEngagement , [ FromQuery ] List < long? > idBUs , [ FromQuery ] bool? asc , [ FromQuery ] int? numPage , [ FromQuery ] [ Range ( 5 , 1 0 0 ) ] int? parPAge , [ FromQuery ] string texte , [ FromQuery ] string tri )
public virtual async Task < IActionResult > GetEngagements ( [ FromQuery ] [ CannotBeEmpty ] List < long > idBUs , [ FromQuery ] List < EtatEngagement > etatsEngagement , [ FromQuery ] bool? asc , [ FromQuery ] int? numPage , [ FromQuery ] [ Range ( 5 , 1 0 0 ) ] int? parPAge , [ 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(..), ...
if ( env . IsDevelopment ( ) )
// return StatusCode(200, default(List<EngagementDTO>)) ;
logger . LogInformation ( "Récupération de la liste des engagements." ) ;
//TODO: Uncomment the next line to return response 401 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
IEnumerable < EngagementDTO > engagements ;
// return StatusCode(401, default(ErreurDTO));
//TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
try
// return StatusCode(403, default(ErreurDTO));
{
engagements = await engagementService . GetEngagementsAsync ( idBUs , etatsEngagement , asc , numPage , parPAge , texte , tri ) ;
}
catch ( Exception e )
{
logger . LogError ( e . Message ) ;
ErreurDTO erreur = new ErreurDTO ( )
{
Code = StatusCodes . Status500InternalServerError ,
Message = "Une erreur inconnue est survenue sur le serveur."
} ;
return StatusCode ( erreur . Code . Value , erreur ) ;
}
//TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
if ( env . IsDevelopment ( ) )
// return StatusCode(500, default(ErreurDTO));
logger . LogInformation ( "Liste des engagements récupérée." ) ;
string exampleJson = null ;
exampleJson = "[ {\n \"action\" : \"action\",\n \"id\" : 4,\n \"dispositif\" : \"dispositif\",\n \"modalite\" : \"modalite\",\n \"dateLimite\" : \"2000-01-23T04:56:07.000+00:00\",\n \"etatEngagement\" : \"EnAttente\",\n \"raisonNonRealisable\" : \"raisonNonRealisable\"\n}, {\n \"action\" : \"action\",\n \"id\" : 4,\n \"dispositif\" : \"dispositif\",\n \"modalite\" : \"modalite\",\n \"dateLimite\" : \"2000-01-23T04:56:07.000+00:00\",\n \"etatEngagement\" : \"EnAttente\",\n \"raisonNonRealisable\" : \"raisonNonRealisable\"\n} ]" ;
var example = exampleJson ! = null
return Ok ( engagements ) ;
? JsonConvert . DeserializeObject < List < EngagementDTO > > ( exampleJson )
: default ( List < EngagementDTO > ) ; //TODO: Change the data returned
return new ObjectResult ( example ) ;
}
}
/// <summary>
/// <summary>
///
///
/// </summary>
/// </summary>
/// <remarks>Récupérer le nombre total d’engagements.</remarks>
/// <remarks>Récupérer le nombre total d’engagements.</remarks>
/// <param name="etatsEngagement">Etats de l'engagement</param>
/// <param name="idBUs">liste des ids des BU auxquelles les données sont rattachées</param>
/// <param name="idBUs">liste des ids des BU auxquelles les données sont rattachées</param>
/// <param name="etatsEngagement">Etats de l'engagement</param>
/// <param name="asc">Indique si les données sont récupérées dans l'ordre croissant ou non</param>
/// <param name="asc">Indique si les données sont récupérées dans l'ordre croissant ou non</param>
/// <param name="numPage">Numéro de la page du tableau à afficher</param>
/// <param name="numPage">Numéro de la page du tableau à afficher</param>
/// <param name="parPAge">Nombre d’élément maximum à afficher dans le tableau</param>
/// <param name="parPAge">Nombre d’élément maximum à afficher dans le tableau</param>
@ -91,33 +120,41 @@ namespace IO.Swagger.Controllers
/// <response code="500">Une erreur est survenue sur le serveur</response>
/// <response code="500">Une erreur est survenue sur le serveur</response>
[HttpGet]
[HttpGet]
[Route("/api/engagements/count")]
[Route("/api/engagements/count")]
[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName )]
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme, Roles = "RH" )]
[ValidateModelState]
[ValidateModelState]
[SwaggerOperation("GetEngagementsCount")]
[SwaggerOperation("GetEngagementsCount")]
[SwaggerResponse(statusCode: 200, type: typeof(long?), description: "OK")]
[SwaggerResponse(statusCode: 200, type: typeof(long?), description: "OK")]
[SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L'utilisateur souhaitant accéder à la ressource n'est pas authentifié")]
[SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L'utilisateur souhaitant accéder à la ressource n'est pas authentifié")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")]
[SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")]
[SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")]
public virtual IActionResult GetEngagementsCount ( [ FromQuery ] List < EtatEngagement > etatsEngagement , [ FromQuery ] List < long? > idBUs , [ FromQuery ] bool? asc , [ FromQuery ] int? numPage , [ FromQuery ] [ Range ( 5 , 1 0 0 ) ] int? parPAge , [ FromQuery ] string texte , [ FromQuery ] string tri )
public virtual async Task < IActionResult > GetEngagementsCount ( [ FromQuery ] [ CannotBeEmpty ] List < long > idBUs , [ FromQuery ] List < EtatEngagement > etatsEngagement , [ FromQuery ] bool? asc , [ FromQuery ] int? numPage , [ FromQuery ] [ Range ( 5 , 1 0 0 ) ] int? parPAge , [ 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(..), ...
if ( env . IsDevelopment ( ) )
// return StatusCode(200, default(long?)) ;
logger . LogInformation ( "Récupération du nombre total d'engagements." ) ;
//TODO: Uncomment the next line to return response 401 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
long count ;
// return StatusCode(401, default(ErreurDTO));
//TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
try
// return StatusCode(403, default(ErreurDTO));
{
count = await engagementService . GetEngagementsCountAsync ( idBUs , etatsEngagement , asc , numPage , parPAge , texte , tri ) ;
}
catch ( Exception e )
{
logger . LogError ( e . Message ) ;
//TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
ErreurDTO erreur = new ErreurDTO ( )
// return StatusCode(500, default(ErreurDTO));
{
string exampleJson = null ;
Code = StatusCodes . Status500InternalServerError ,
exampleJson = "0" ;
Message = "Une erreur inconnue est survenue sur le serveur."
} ;
var example = exampleJson ! = null
return StatusCode ( erreur . Code . Value , erreur ) ;
? JsonConvert . DeserializeObject < long? > ( exampleJson )
}
: default ( long? ) ; //TODO: Change the data returned
return new ObjectResult ( example ) ;
if ( env . IsDevelopment ( ) )
logger . LogInformation ( "Nombre total d'engagement récupéré." ) ;
return Ok ( count ) ;
}
}
/// <summary>
/// <summary>
@ -134,7 +171,7 @@ namespace IO.Swagger.Controllers
/// <response code="500">Une erreur est survenue sur le serveur</response>
/// <response code="500">Une erreur est survenue sur le serveur</response>
[HttpPut]
[HttpPut]
[Route("/api/engagements/{idEngagement}")]
[Route("/api/engagements/{idEngagement}")]
[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName )]
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme, Roles = "RH" )]
[ValidateModelState]
[ValidateModelState]
[SwaggerOperation("UpdateEngagement")]
[SwaggerOperation("UpdateEngagement")]
[SwaggerResponse(statusCode: 200, type: typeof(EngagementDTO), description: "Engagement modifié avec succès")]
[SwaggerResponse(statusCode: 200, type: typeof(EngagementDTO), description: "Engagement modifié avec succès")]
@ -143,32 +180,95 @@ namespace IO.Swagger.Controllers
[SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "La ressource n'a pas été trouvée")]
[SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "La ressource n'a pas été trouvée")]
[SwaggerResponse(statusCode: 415, type: typeof(ErreurDTO), description: "L’opération ne peut pas être effectuée car certaines données sont manquantes")]
[SwaggerResponse(statusCode: 415, type: typeof(ErreurDTO), description: "L’opération ne peut pas être effectuée car certaines données sont manquantes")]
[SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")]
[SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")]
public virtual IActionResult UpdateEngagement ( [ FromBody ] EngagementDTO body , [ FromRoute ] [ Required ] long? idEngagement )
public virtual async Task < IActionResult > UpdateEngagement ( [ FromBody ] EngagementDTO body , [ FromRoute ] [ Required ] long idEngagement )
{
{
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
if ( env . IsDevelopment ( ) )
// return StatusCode(200, default(EngagementDTO)) ;
logger . LogInformation ( "Mise à jour de l'engagement d'id {idEngagement}." , idEngagement ) ;
//TODO: Uncomment the next line to return response 401 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
try
// return StatusCode(401, default(ErreurDTO));
{
body = await engagementService . RepondreEngagementAsync ( body , idEngagement ) ;
}
catch ( EngagementInvalidException e )
{
if ( env . IsDevelopment ( ) )
logger . LogInformation ( e . Message ) ;
//TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
ErreurDTO erreur = new ErreurDTO ( )
// return StatusCode(403, default(ErreurDTO));
{
Code = StatusCodes . Status415UnsupportedMediaType ,
Message = e . Message ,
} ;
//TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
return StatusCode ( erreur . Code . Value , erreur . Message ) ;
// return StatusCode(404, default(ErreurDTO));
}
catch ( EngagementIncompatibleIdException e )
{
if ( env . IsDevelopment ( ) )
logger . LogInformation ( e . Message ) ;
ErreurDTO erreur = new ErreurDTO ( )
{
Code = StatusCodes . Status415UnsupportedMediaType ,
Message = e . Message ,
} ;
return StatusCode ( erreur . Code . Value , erreur . Message ) ;
}
catch ( EngagementNotFoundException e )
{
if ( env . IsDevelopment ( ) )
logger . LogInformation ( e . Message ) ;
//TODO: Uncomment the next line to return response 415 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
ErreurDTO erreur = new ErreurDTO ( )
// return StatusCode(415, default(ErreurDTO));
{
Code = StatusCodes . Status404NotFound ,
Message = e . Message
} ;
return NotFound ( erreur ) ;
}
catch ( DbUpdateConcurrencyException e )
{
logger . LogError ( e . Message ) ;
ErreurDTO erreur = new ErreurDTO ( )
{
Code = StatusCodes . Status500InternalServerError ,
Message = string . Format ( "L'engagement {0} n'a pas pu être supprimé car il est pris par une autre ressource." , idEngagement )
} ;
return StatusCode ( erreur . Code . Value , erreur ) ;
}
catch ( DbUpdateException e )
{
logger . LogError ( e . Message ) ;
ErreurDTO erreur = new ErreurDTO ( )
{
Code = StatusCodes . Status500InternalServerError ,
Message = "Une erreur est survenue sur le serveur lors de la suppression de l'engagement."
} ;
return StatusCode ( erreur . Code . Value , erreur ) ;
}
catch ( Exception e )
{
logger . LogError ( e . Message ) ;
ErreurDTO erreur = new ErreurDTO ( )
{
Code = StatusCodes . Status500InternalServerError ,
Message = "Une erreur inconnue est survenue sur le serveur."
} ;
return StatusCode ( erreur . Code . Value , erreur ) ;
}
//TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
if ( env . IsDevelopment ( ) )
// return StatusCode(500, default(ErreurDTO));
logger . LogInformation ( "Update effectué avec succès." ) ;
string exampleJson = null ;
exampleJson = "{\n \"action\" : \"action\",\n \"id\" : 4,\n \"dispositif\" : \"dispositif\",\n \"modalite\" : \"modalite\",\n \"dateLimite\" : \"2000-01-23T04:56:07.000+00:00\",\n \"etatEngagement\" : \"EnAttente\",\n \"raisonNonRealisable\" : \"raisonNonRealisable\"\n}" ;
var example = exampleJson ! = null
return Ok ( body ) ;
? JsonConvert . DeserializeObject < EngagementDTO > ( exampleJson )
: default ( EngagementDTO ) ; //TODO: Change the data returned
return new ObjectResult ( example ) ;
}
}
}
}
}
}