From 59af0e29c8c0a1b7f9aa633517708ef39bdc25fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yana=C3=ABl=20GRETTE?= Date: Thu, 18 Feb 2021 14:37:42 +0100 Subject: [PATCH] =?UTF-8?q?Impl=C3=A9mentation=20de=20l'API=20des=20demand?= =?UTF-8?q?es=20de=20d=C3=A9l=C3=A9gations=20avec=20validation=20des=20tes?= =?UTF-8?q?ts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/DemandeDelegationApiTests.cs | 18 +-- .../Controllers/DemandesDelegationApi.cs | 133 +++++++++++++++--- .../IServices/IDemandeDelegationService.cs | 2 +- .../Services/DemandeDelegationService.cs | 2 +- 4 files changed, 118 insertions(+), 37 deletions(-) diff --git a/EPAServeur.Tests/Controllers/DemandeDelegationApiTests.cs b/EPAServeur.Tests/Controllers/DemandeDelegationApiTests.cs index 3e1a380..492bae3 100644 --- a/EPAServeur.Tests/Controllers/DemandeDelegationApiTests.cs +++ b/EPAServeur.Tests/Controllers/DemandeDelegationApiTests.cs @@ -72,7 +72,7 @@ namespace EPAServeur.Tests.Controllers } [Test] - public void UpdateDemandeDelegation_Refusee() + public void UpdateDemandeDelegation() { DemandesDelegationApiController demandesDelegationApiController = new DemandesDelegationApiController(demandeDelegationService, logger); DemandeDelegationDTO demandeDTO = new DemandeDelegationDTO() @@ -89,22 +89,6 @@ namespace EPAServeur.Tests.Controllers Assert.IsInstanceOf(result.Value); } - [Test] - public void UpdateDemandeDelegation_Validee() - { - DemandesDelegationApiController demandesDelegationApiController = new DemandesDelegationApiController(demandeDelegationService, logger); - DemandeDelegationDTO demandeDTO = new DemandeDelegationDTO() - { - Id = 2, - DateDemande = new DateTime(), - RaisonDemande = "Raison demande", - EtatDemande = EtatDemande.Validee, - }; - Task task = demandesDelegationApiController.UpdateDemandeDelegation(demandeDTO, demandeDTO.Id); - OkObjectResult result = task.Result as OkObjectResult; - Assert.AreEqual(200, result.StatusCode); - Assert.IsInstanceOf(null, result.Value); - } #endregion } } diff --git a/EPAServeur/Controllers/DemandesDelegationApi.cs b/EPAServeur/Controllers/DemandesDelegationApi.cs index 54b0a22..8af5796 100644 --- a/EPAServeur/Controllers/DemandesDelegationApi.cs +++ b/EPAServeur/Controllers/DemandesDelegationApi.cs @@ -18,6 +18,11 @@ using IO.Swagger.Attributes; using IO.Swagger.Security; using Microsoft.AspNetCore.Authorization; using IO.Swagger.DTO; +using EPAServeur.IServices; +using Microsoft.Extensions.Logging; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using EPAServeur.Exceptions; namespace IO.Swagger.Controllers { @@ -26,7 +31,24 @@ namespace IO.Swagger.Controllers /// [ApiController] public class DemandesDelegationApiController : ControllerBase - { + { + + /// + /// Services des demandes de délégation + /// + private readonly IDemandeDelegationService demandeDelegationService; + + /// + /// Logger du contrôleur + /// + private readonly ILogger logger; + + public DemandesDelegationApiController(IDemandeDelegationService _demandeDelegationService, ILogger _logger) + { + demandeDelegationService = _demandeDelegationService; + logger = _logger; + } + /// /// /// @@ -47,8 +69,45 @@ namespace IO.Swagger.Controllers [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: 404, type: typeof(ErreurDTO), description: "La ressource n'a pas été trouvée")] [SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")] - public virtual IActionResult GetDemandesDelegationReferent([FromRoute][Required]Guid? idReferent) - { + public virtual async Task GetDemandesDelegationReferent([FromRoute][Required]Guid? idReferent) + { + IEnumerable demandeDelegations; + + try + { + demandeDelegations = await demandeDelegationService.RecupererDemandesDelegation(idReferent); + } + catch (ReferentNotFoundException e) + { + ErreurDTO erreur = new ErreurDTO() + { + Code = 404, + Message = e.Message, + }; + return NotFound(erreur); + } + catch (DbUpdateException e) + { + logger.LogError(e.Message); + ErreurDTO erreur = new ErreurDTO + { + Code = 500, + Message = "Une erreur est survenue sur le serveur", + }; + return StatusCode(erreur.Code.Value, erreur); + } + catch (Exception e) + { + logger.LogError(e.Message); + ErreurDTO erreur = new ErreurDTO + { + Code = 500, + Message = "Une erreur inconnue est survenue sur le serveur", + }; + return StatusCode(erreur.Code.Value, erreur); + } + return Ok(demandeDelegations); + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(List)); @@ -63,13 +122,6 @@ namespace IO.Swagger.Controllers //TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(500, default(ErreurDTO)); - string exampleJson = null; - exampleJson = "[ {\n \"raisonDemande\" : \"raisonDemande\",\n \"raisonRefus\" : \"raisonRefus\",\n \"dateReponse\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : 6,\n \"dateDemande\" : \"2000-01-23T04:56:07.000+00:00\"\n}, {\n \"raisonDemande\" : \"raisonDemande\",\n \"raisonRefus\" : \"raisonRefus\",\n \"dateReponse\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : 6,\n \"dateDemande\" : \"2000-01-23T04:56:07.000+00:00\"\n} ]"; - - var example = exampleJson != null - ? JsonConvert.DeserializeObject>(exampleJson) - : default(List); //TODO: Change the data returned - return new ObjectResult(example); } /// @@ -95,8 +147,60 @@ namespace IO.Swagger.Controllers [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: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")] - public virtual IActionResult UpdateDemandeDelegation([FromBody]DemandeDelegationDTO body, [FromRoute][Required]long? idDemandeDelegation) + public virtual async Task UpdateDemandeDelegation([FromBody]DemandeDelegationDTO body, [FromRoute][Required]long? idDemandeDelegation) { + try + { + body = await demandeDelegationService.UpdateDemandeDelegation(idDemandeDelegation, body); + } + catch (DemandeDelegationIncompatibleException e) + { + ErreurDTO erreur = new ErreurDTO() + { + Code = 415, + Message = e.Message, + }; + return StatusCode(erreur.Code.Value, erreur); + } + catch (DemandeDelegationInvalidException e) + { + ErreurDTO erreur = new ErreurDTO() + { + Code = 415, + Message = e.Message, + }; + return StatusCode(erreur.Code.Value, erreur); + } + catch (DemandeDelegationNotFoundException e) + { + ErreurDTO erreur = new ErreurDTO() + { + Code = 415, + Message = e.Message, + }; + return StatusCode(erreur.Code.Value, erreur); + } + catch (DbUpdateException e) + { + logger.LogError(e.Message); + ErreurDTO erreur = new ErreurDTO + { + Code = 500, + Message = "Une erreur est survenue sur le serveur", + }; + return StatusCode(erreur.Code.Value, erreur); + } + catch (Exception e) + { + logger.LogError(e.Message); + ErreurDTO erreur = new ErreurDTO + { + Code = 500, + Message = "Une erreur inconnue est survenue sur le serveur", + }; + return StatusCode(erreur.Code.Value, erreur); + } + return Ok(body); //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(DemandeDelegationDTO)); @@ -114,13 +218,6 @@ namespace IO.Swagger.Controllers //TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(500, default(ErreurDTO)); - string exampleJson = null; - exampleJson = "{\n \"raisonDemande\" : \"raisonDemande\",\n \"raisonRefus\" : \"raisonRefus\",\n \"dateReponse\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : 6,\n \"dateDemande\" : \"2000-01-23T04:56:07.000+00:00\"\n}"; - - var example = exampleJson != null - ? JsonConvert.DeserializeObject(exampleJson) - : default(DemandeDelegationDTO); //TODO: Change the data returned - return new ObjectResult(example); } } } diff --git a/EPAServeur/IServices/IDemandeDelegationService.cs b/EPAServeur/IServices/IDemandeDelegationService.cs index ec6fa80..c4f463a 100644 --- a/EPAServeur/IServices/IDemandeDelegationService.cs +++ b/EPAServeur/IServices/IDemandeDelegationService.cs @@ -8,7 +8,7 @@ namespace EPAServeur.IServices { public interface IDemandeDelegationService { - public Task UpdateDemandeDelegation(long id, DemandeDelegationDTO demandeDelegationDTO); + public Task UpdateDemandeDelegation(long? id, DemandeDelegationDTO demandeDelegationDTO); public Task> RecupererDemandesDelegation(Guid? idReferent); } } diff --git a/EPAServeur/Services/DemandeDelegationService.cs b/EPAServeur/Services/DemandeDelegationService.cs index 25e130f..8d15ead 100644 --- a/EPAServeur/Services/DemandeDelegationService.cs +++ b/EPAServeur/Services/DemandeDelegationService.cs @@ -47,7 +47,7 @@ namespace EPAServeur.Services } - public async Task UpdateDemandeDelegation(long id, DemandeDelegationDTO demandeDelegationDTO) + public async Task UpdateDemandeDelegation(long? id, DemandeDelegationDTO demandeDelegationDTO) { if (id != demandeDelegationDTO.Id) throw new DemandeDelegationIncompatibleException("La demande de délégation ne correspond pas avec l'identifiant reçu");