diff --git a/Controllers/ReferentsApi.cs b/Controllers/ReferentsApi.cs index 764b287..cf5c6ad 100644 --- a/Controllers/ReferentsApi.cs +++ b/Controllers/ReferentsApi.cs @@ -21,6 +21,9 @@ using Microsoft.AspNetCore.Authorization; using IO.Swagger.Security; using System.Linq; using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using IO.Swagger.ClientCollaborateur; +using EPAServeur.Exceptions; namespace IO.Swagger.Controllers { @@ -31,10 +34,12 @@ namespace IO.Swagger.Controllers public class ReferentsApiController : ControllerBase { private readonly IReferentService referentService; + private readonly ILogger logger; - public ReferentsApiController(IReferentService _referentService) + public ReferentsApiController(IReferentService _referentService, ILogger _logger) { referentService = _referentService; + logger = _logger; } /// @@ -55,16 +60,36 @@ namespace IO.Swagger.Controllers [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n'a pas été trouvée")] public virtual async Task GetReferentById([FromRoute][Required]Guid? idReferent) { - ReferentDTO referentDTO = await referentService.GetReferentByIdAsync(idReferent); - if (referentDTO == null) + logger.LogInformation("Récupération du référent {idReferent}.", idReferent); + + ReferentDTO referentDTO = null; + + try + { + referentDTO = await referentService.GetReferentByIdAsync(idReferent); + } + catch (ApiException) + { + logger.LogError("Une erreur est survenue lors de la communication avec le service Collaborateur pour récupérer le référent par son id {idReferent}.", idReferent); + } + catch (ReferentNotFoundException) { + logger.LogError("Le référent {idReferent} est introuvable.", idReferent); ErreurDTO erreurDTO = new ErreurDTO() { Code = "404", Message = "Le référent n'existe pas", }; + return NotFound(erreurDTO); } + catch (Exception) + { + logger.LogError("Une erreur inconnue est survenue lors de la récupération du référent {idReferent}.", idReferent); + } + + logger.LogInformation("Référent {idReferent} récupéré.", idReferent); + return Ok(referentDTO); } @@ -92,7 +117,7 @@ namespace IO.Swagger.Controllers public virtual IActionResult GetReferents([FromQuery][Required()]bool? asc, [FromQuery][Required()]int? numPage, [FromQuery][Required()]int? parPAge, [FromQuery]List fonctions, [FromQuery]long? idAgence, [FromQuery]long? idBU, [FromQuery]string texte, [FromQuery]string tri) { //IEnumerable referentDTOs = referentService.GetReferents(asc,numPage,parPAge,fonctions,idAgence,idBU,texte,tri); - return Ok(); + return NoContent(); } /// @@ -113,16 +138,36 @@ namespace IO.Swagger.Controllers [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n'a pas été trouvée")] public virtual async Task GetReferentActuelCollaborateur([FromRoute][Required] Guid? idCollaborateur) { - ReferentDTO referentDTO = await referentService.GetReferentActuelCollaborateurAsync(idCollaborateur); - if (referentDTO == null) + logger.LogInformation("Récupération du référent actuel du collaborateur {idCollaborateur}.", idCollaborateur); + + ReferentDTO referentDTO = null; + + try + { + referentDTO = await referentService.GetReferentActuelCollaborateurAsync(idCollaborateur); + } + catch (ApiException) { + logger.LogError("Une erreur est survenue lors de la communication avec le service Collaborateur pour récupérer le référent actuel du collaborateur {idCollaborateur}.", idCollaborateur); + } + catch (ReferentNotFoundException) + { + logger.LogError("Le référent actuel du collaborateur {idCollaborateur} est introuvable.", idCollaborateur); ErreurDTO erreurDTO = new ErreurDTO() { Code = "404", - Message = "Aucun référent pour le collaborateur", + Message = "Aucun référent actuel pour le collaborateur", }; + return NotFound(erreurDTO); } + catch (Exception) + { + logger.LogError("Une erreur inconnue est survenue lors de la récupération du référent actuel du collaborateur {idCollaborateur}.", idCollaborateur); + } + + logger.LogInformation("Référent actuel du collaborateur {idCollaborateur} récupéré.", idCollaborateur); + return Ok(referentDTO); } @@ -149,17 +194,49 @@ namespace IO.Swagger.Controllers [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n'a pas été trouvée")] public virtual async Task GetReferentsByCollaborateur([FromQuery][Required()] bool? asc, [FromRoute][Required] Guid? idCollaborateur, [FromQuery][Required()] int? numPage, [FromQuery][Required()] int? parPAge, [FromQuery] string texte, [FromQuery] string tri) { - IEnumerable referentDTO = await referentService.GetReferentsByCollaborateurAsync(asc,idCollaborateur,numPage,parPAge,texte,tri); - if (referentDTO.Count() == 0) + logger.LogInformation("Récupération de la liste des référents du collaborateur {idCollaborateur}.", idCollaborateur); + + IEnumerable referentDTOs = null; + + try + { + referentDTOs = await referentService.GetReferentsByCollaborateurAsync(asc, idCollaborateur, numPage, parPAge, texte, tri); + } + catch (ApiException) + { + logger.LogError("Une erreur est survenue lors de la communication avec le service collaborateur lors de la récupération de la liste des référents du collaborateur {idReferent}.", idCollaborateur); + } + catch (CollaborateurNotFoundException) + { + ErreurDTO erreurDTO = new ErreurDTO() + { + Code = "404", + Message = "Le collaborateur n'existe pas", + }; + + return NotFound(erreurDTO); + } + catch (Exception) + { + logger.LogError("Une erreur inconnue est survenue lors de la récupération des référents du collaborateur {idCollaborateur}.", idCollaborateur); + } + + if (referentDTOs.Count() == 0) { + logger.LogInformation("Aucun référent pour le collaborateur {idCollaborateur}.", idCollaborateur); + ErreurDTO erreurDTO = new ErreurDTO() { Code = "404", Message = "Aucun référent pour le collaborateur", }; + return NotFound(erreurDTO); } - return Ok(referentDTO); + + logger.LogInformation("Liste des référents du collaborateur {idCollaborateur} récupérée", idCollaborateur); + + return Ok(referentDTOs); } } } diff --git a/Services/ReferentService.cs b/Services/ReferentService.cs index 765e9da..dcabe51 100644 --- a/Services/ReferentService.cs +++ b/Services/ReferentService.cs @@ -1,4 +1,5 @@ -using EPAServeur.IServices; +using EPAServeur.Exceptions; +using EPAServeur.IServices; using IO.Swagger.ApiCollaborateur; using IO.Swagger.DTO; using IO.Swagger.ModelCollaborateur; @@ -35,8 +36,9 @@ namespace EPAServeur.Services public ReferentDTO GetReferentById(Guid? idReferent) { Referent referent = referentApi.ChercherRefId(idReferent); + if (referent == null) - return null; + throw new ReferentNotFoundException(); return GetReferentDTO(referent); } @@ -49,8 +51,9 @@ namespace EPAServeur.Services public async Task GetReferentByIdAsync(Guid? idReferent) { Referent referent = await referentApi.ChercherRefIdAsync(idReferent); + if (referent == null) - return null; + throw new ReferentNotFoundException(); return GetReferentDTO(referent); } @@ -65,7 +68,7 @@ namespace EPAServeur.Services Referent referent = referentApi.ChercherRefActuelCollabId(idCollaborateur); if (referent == null) - return null; + throw new ReferentNotFoundException(); return GetReferentDTO(referent); } @@ -80,10 +83,11 @@ namespace EPAServeur.Services Referent referent = await referentApi.ChercherRefActuelCollabIdAsync(idCollaborateur); if (referent == null) - return null; + throw new ReferentNotFoundException(); return GetReferentDTO(referent); } + /// /// Récupère la liste des référents pour une agence /// @@ -95,63 +99,64 @@ namespace EPAServeur.Services /// /// /// - /// - + /// public IEnumerable GetReferents(bool? asc, int? numPage, int? parPAge, List fonctions, long? idAgence, long? idBU, string texte, string tri) { - //IEnumerable collaborateurs; // A changer (Sera utilisé pour récupérer la liste des référents par fonction - IEnumerable referents = null; // A changer - IEnumerable referentDTOs = null; // A changer - //List ids = fonctions.Select(guid => (Guid?)Guid.Parse(guid)).ToList(); + throw new NotImplementedException(); - //collaborateurs = collaborateurApi.ChercherCollab(ids); - if (texte == null) - texte = ""; - else - texte = texte.ToLower(); + ////IEnumerable collaborateurs; // A changer (Sera utilisé pour récupérer la liste des référents par fonction + //IEnumerable referents = null; // A changer + //IEnumerable referentDTOs = null; // A changer + ////List ids = fonctions.Select(guid => (Guid?)Guid.Parse(guid)).ToList(); - int skip = (numPage.Value - 1) * parPAge.Value; - int take = parPAge.Value; + ////collaborateurs = collaborateurApi.ChercherCollab(ids); + //if (texte == null) + // texte = ""; + //else + // texte = texte.ToLower(); - if (idBU != null) - { + //int skip = (numPage.Value - 1) * parPAge.Value; + //int take = parPAge.Value; - } - else - { + //if (idBU != null) + //{ - } + //} + //else + //{ - if (idAgence != null) - { - try - { - - } - catch (Exception ex) - { - throw; - } - } - else - { - try - { + //} - } - catch (Exception ex) - { - throw; - } - } + //if (idAgence != null) + //{ + // try + // { + // } + // catch (Exception ex) + // { + // throw; + // } + //} + //else + //{ + // try + // { - if (referents == null) - return new List(); + // } + // catch (Exception ex) + // { + // throw; + // } + //} - referentDTOs = referents.Where(referent => (referent.Nom + " " + referent.Prenom).ToLower().Contains(texte) || (referent.Prenom + " " + referent.Nom).ToLower().Contains(texte)).Select(referent => GetReferentDTO(referent)); - return referentDTOs; + //if (referents == null) + // return new List(); + + //referentDTOs = referents.Where(referent => (referent.Nom + " " + referent.Prenom).ToLower().Contains(texte) || (referent.Prenom + " " + referent.Nom).ToLower().Contains(texte)).Select(referent => GetReferentDTO(referent)); + + //return referentDTOs; } /// @@ -169,56 +174,58 @@ namespace EPAServeur.Services public async Task> GetReferentsAsync(bool? asc, int? numPage, int? parPAge, List fonctions, long? idAgence, long? idBU, string texte, string tri) { - IEnumerable referents = null ; // A changer - IEnumerable referentDTOs = null; // A changer + throw new NotImplementedException(); - if (texte == null) - texte = ""; - else - texte = texte.ToLower(); + //IEnumerable referents = null ; // A changer + //IEnumerable referentDTOs = null; // A changer - int skip = (numPage.Value - 1) * parPAge.Value; - int take = parPAge.Value; + //if (texte == null) + // texte = ""; + //else + // texte = texte.ToLower(); - if (idBU != null) - { + //int skip = (numPage.Value - 1) * parPAge.Value; + //int take = parPAge.Value; - } - else - { + //if (idBU != null) + //{ - } + //} + //else + //{ - if (idAgence != null) - { - try - { - - } - catch (Exception ex) - { - throw; - } - } - else - { - try - { - - } - catch (Exception ex) - { - throw; - } - } + //} + //if (idAgence != null) + //{ + // try + // { - if (referents == null) - return new List(); + // } + // catch (Exception ex) + // { + // throw; + // } + //} + //else + //{ + // try + // { - referentDTOs = referents.Where(referent => (referent.Nom + " " + referent.Prenom).ToLower().Contains(texte) || (referent.Prenom + " " + referent.Nom).ToLower().Contains(texte)).Select(referent => GetReferentDTO(referent)); + // } + // catch (Exception ex) + // { + // throw; + // } + //} - return referentDTOs; + + //if (referents == null) + // return new List(); + + //referentDTOs = referents.Where(referent => (referent.Nom + " " + referent.Prenom).ToLower().Contains(texte) || (referent.Prenom + " " + referent.Nom).ToLower().Contains(texte)).Select(referent => GetReferentDTO(referent)); + + //return referentDTOs; } @@ -248,8 +255,16 @@ namespace EPAServeur.Services if (idCollaborateur == null) return new List(); + Collaborateur collaborateur = collaborateurApi.ChercherCollabId(idCollaborateur); + + if (collaborateur == null) + throw new CollaborateurNotFoundException(); referents = referentApi.ChercherRefCollabId(idCollaborateur); + + if (referents == null) + return new List(); + referentDTOs = referents.Where(referent => (referent.Nom + " " + referent.Prenom).ToLower().Contains(texte) || (referent.Prenom + " " + referent.Nom).ToLower().Contains(texte)).Select(referent => GetReferentDTO(referent)); return referentDTOs; @@ -281,8 +296,16 @@ namespace EPAServeur.Services if (idCollaborateur == null) return new List(); + Collaborateur collaborateur = await collaborateurApi.ChercherCollabIdAsync(idCollaborateur); + + if (collaborateur == null) + throw new CollaborateurNotFoundException(); referents = await referentApi.ChercherRefCollabIdAsync(idCollaborateur); + + if (referents == null) + return new List(); + referentDTOs = referents.Where(referent => (referent.Nom + " " + referent.Prenom).ToLower().Contains(texte) || (referent.Prenom + " " + referent.Nom).ToLower().Contains(texte)).Select(referent => GetReferentDTO(referent)); return referentDTOs;