diff --git a/Controllers/CollaborateursApi.cs b/Controllers/CollaborateursApi.cs index 53f2158..1e2f473 100644 --- a/Controllers/CollaborateursApi.cs +++ b/Controllers/CollaborateursApi.cs @@ -23,6 +23,7 @@ using Microsoft.Extensions.Logging; using EPAServeur.Exceptions; using IO.Swagger.ClientCollaborateur; using Microsoft.AspNetCore.Server.Kestrel.Core; +using System.Threading.Tasks; namespace IO.Swagger.Controllers { @@ -55,7 +56,7 @@ namespace IO.Swagger.Controllers [SwaggerResponse(statusCode: 200, type: typeof(CollaborateurDTO), description: "OK")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n'a pas été trouvée")] - public virtual IActionResult GetCollaborateurById([FromRoute][Required]Guid? idCollaborateur) + public virtual async Task GetCollaborateurById([FromRoute][Required]Guid? idCollaborateur) { //TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(403, default(ErreurDTO)); @@ -63,7 +64,7 @@ namespace IO.Swagger.Controllers CollaborateurDTO collaborateurDTO = null; try { - collaborateurDTO = collaborateurService.GetCollaborateurById(idCollaborateur); + collaborateurDTO = await collaborateurService.GetCollaborateurByIdAsync(idCollaborateur); } catch (ApiException) { @@ -103,7 +104,7 @@ namespace IO.Swagger.Controllers [SwaggerResponse(statusCode: 200, type: typeof(CollaborateurDTO), description: "OK")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n'a pas été trouvée")] - public virtual IActionResult GetCollaborateurByMail([FromRoute][Required]string mail) + public virtual async Task GetCollaborateurByMail([FromRoute][Required]string mail) { //TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(403, default(ErreurDTO)); @@ -111,7 +112,7 @@ namespace IO.Swagger.Controllers CollaborateurDTO collaborateurDTO = null; try { - collaborateurDTO = collaborateurService.GetCollaborateurByMail(mail); + collaborateurDTO = await collaborateurService.GetCollaborateurByMailAsync(mail); } catch (CollaborateurNotFoundException) { @@ -156,7 +157,7 @@ namespace IO.Swagger.Controllers [SwaggerOperation("GetCollaborateurs")] [SwaggerResponse(statusCode: 200, type: typeof(List), description: "OK")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] - public virtual IActionResult GetCollaborateurs([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) + public virtual async Task GetCollaborateurs([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) { //TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(403, default(ErreurDTO)); @@ -164,7 +165,7 @@ namespace IO.Swagger.Controllers IEnumerable collaborateurs = null; try { - collaborateurs = collaborateurService.GetCollaborateurs(asc, numPage, parPAge, fonctions, idAgence, idBU, texte, tri); + collaborateurs = await collaborateurService.GetCollaborateursAsync(asc, numPage, parPAge, fonctions, idAgence, idBU, texte, tri); } catch(ApiException) { @@ -200,12 +201,12 @@ namespace IO.Swagger.Controllers [SwaggerResponse(statusCode: 200, type: typeof(List), description: "OK")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n'a pas été trouvée")] - public virtual IActionResult GetCollaborateursByReferent([FromQuery][Required()]bool? asc, [FromRoute][Required]Guid? idReferent, [FromQuery][Required()]int? numPage, [FromQuery][Required()]int? parPAge, [FromQuery]string texte, [FromQuery]string tri) + public virtual async Task GetCollaborateursByReferent([FromQuery][Required()]bool? asc, [FromRoute][Required]Guid? idReferent, [FromQuery][Required()]int? numPage, [FromQuery][Required()]int? parPAge, [FromQuery]string texte, [FromQuery]string tri) { //TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(403, default(ErreurDTO)); logger.LogInformation("Récupération de la liste des collaborateurs du référent {idReferent}",idReferent); - IEnumerable collaborateurs = collaborateurService.GetCollaborateursByReferent(idReferent, asc, numPage, parPAge, texte, tri); + IEnumerable collaborateurs = await collaborateurService.GetCollaborateursByReferentAsync(idReferent, asc, numPage, parPAge, texte, tri); try { collaborateurs = collaborateurService.GetCollaborateursByReferent(idReferent, asc, numPage, parPAge, texte, tri); @@ -247,7 +248,7 @@ namespace IO.Swagger.Controllers [SwaggerResponse(statusCode: 200, type: typeof(ProfilDTO), description: "OK")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n'a pas été trouvée")] - public virtual IActionResult GetProfilCollaborateurByMail([FromRoute][Required]string mail) + public virtual async Task GetProfilCollaborateurByMailAsync([FromRoute][Required]string mail) { //TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(403, default(ErreurDTO)); @@ -255,7 +256,7 @@ namespace IO.Swagger.Controllers ProfilDTO collaborateurDTO = null; try { - collaborateurDTO = collaborateurService.GetProfilByMail(mail); + collaborateurDTO = await collaborateurService.GetProfilByMailAsync(mail); } catch (ApiException) { diff --git a/DTO/EpInformationDTO.cs b/DTO/EpInformationDTO.cs index 9188543..3e287d6 100644 --- a/DTO/EpInformationDTO.cs +++ b/DTO/EpInformationDTO.cs @@ -80,7 +80,7 @@ namespace IO.Swagger.DTO /// [Required] [DataMember(Name="referent")] - public CollaborateurDTO Referent { get; set; } + public ReferentDTO Referent { get; set; } /// /// Returns the string presentation of the object diff --git a/IServices/ICollaborateurService.cs b/IServices/ICollaborateurService.cs index e556ccc..3a43321 100644 --- a/IServices/ICollaborateurService.cs +++ b/IServices/ICollaborateurService.cs @@ -12,10 +12,17 @@ namespace EPAServeur.IServices public interface ICollaborateurService { CollaborateurDTO GetCollaborateurById(Guid? id); + Task GetCollaborateurByIdAsync(Guid? id); CollaborateurDTO GetCollaborateurByMail(string mail); + Task GetCollaborateurByMailAsync(string mail); ProfilDTO GetProfilById(Guid? idCollaborateur); + Task GetProfilByIdAsync(Guid? idCollaborateur); ProfilDTO GetProfilByMail(string mail); + Task GetProfilByMailAsync(string mail); IEnumerable GetCollaborateurs(bool? asc, int? numPage, int? parPage, List fonctions, long? idAgence, long? idBU, string texte, string tri); + Task> GetCollaborateursAsync(bool? asc, int? numPage, int? parPage, List fonctions, long? idAgence, long? idBU, string texte, string tri); IEnumerable GetCollaborateursByReferent(Guid? idReferent, bool? asc, int? numPage, int? parPage, string texte, string tri); + Task> GetCollaborateursByReferentAsync(Guid? idReferent, bool? asc, int? numPage, int? parPage, string texte, string tri); + } } diff --git a/Services/CollaborateurService.cs b/Services/CollaborateurService.cs index 55d58b1..37137b6 100644 --- a/Services/CollaborateurService.cs +++ b/Services/CollaborateurService.cs @@ -47,6 +47,19 @@ namespace EPAServeur.Services return GetCollaborateurDTO(collaborateur); } + /// + /// Récupérer un collaborateur en fonction d'un id de manière asynchrone + /// + /// Identifiant du collaborateur à renvoyer + /// Le collaborateur corresponant à l'id en paramètre + public async Task GetCollaborateurByIdAsync(Guid? id) + { + Collaborateur collaborateur = await collaborateurApi.ChercherCollabIdAsync(id); + if (collaborateur == null) + throw new CollaborateurNotFoundException(); + return GetCollaborateurDTO(collaborateur); + } + /// /// Récupérer un collaborateur en fonction d'un mail /// @@ -60,6 +73,19 @@ namespace EPAServeur.Services return GetCollaborateurDTO(collaborateur); } + /// + /// Récupérer un collaborateur en fonction d'un mail de manière asynchrone + /// + /// Mail du collaborateur à renvoyer + /// Le collaborateur correspondant au mail en paramètre + public async Task GetCollaborateurByMailAsync(string mail) + { + Collaborateur collaborateur = await collaborateurApi.ChercherCollabMailAsync(mail); + if (collaborateur == null) + throw new CollaborateurNotFoundException(); + return GetCollaborateurDTO(collaborateur); + } + /// /// Récupérer la liste de tous les collaborateurs /// @@ -103,6 +129,49 @@ namespace EPAServeur.Services return collaborateursDTO; } + /// + /// Récupérer la liste de tous les collaborateurs de manière asynchrone + /// + /// + /// Précise si la liste est trié dans l'ordre croissant ou décroissant + /// Numéro de la page qui est affiché du côté front + /// Nombre de collaborateurs à renvoyer + /// Liste des fonctions + /// id de l'agence à laquelle appartient les collaborateurs à récupérer + /// + /// permet de récupérer les collaborateurs dont le nom + prénom ou le prénom + nom contient le texte + /// Choisir l'attribut par lequel est trié la liste + /// + /// idBU est à prendre en compte avant l'idAgence + /// idAgence n'est à prendre en compte que si idBU est nul + /// + /// + /// Renvoie la liste des collaborateurs en fonction des paramètres + public async Task> GetCollaborateursAsync(bool? asc, int? numPage, int? parPage, List fonctions, long? idAgence, long? idBU, string texte, string tri) + { + if (texte == null) + texte = ""; + else + texte = texte.ToLower(); + IEnumerable collaborateurs; + IEnumerable collaborateursDTO; + if (idBU != null) + collaborateurs = await collaborateurApi.ChercherCollabBUAsync(idBU); + else if (idAgence != null) + collaborateurs = await collaborateurApi.ChercherCollabAgenceAsync(idAgence); + else + collaborateurs = await collaborateurApi.ChercherCollabAsync(); + if (collaborateurs == null) + return new List(); + int skip = (numPage.Value - 1) * parPage.Value; + int take = parPage.Value; + collaborateursDTO = (from c in collaborateurs + where (c.Nom + " " + c.Prenom).ToLower().Contains(texte) || (c.Prenom + " " + c.Nom).ToLower().Contains(texte) + select GetCollaborateurDTO(c)).Skip(skip).Take(take); + + return collaborateursDTO; + } + /// /// Récupérer les collaborateurs d'un référent /// @@ -141,6 +210,44 @@ namespace EPAServeur.Services return collaborateursDTO; } + /// + /// Récupérer les collaborateurs d'un référent de manière asynchrone + /// + /// id du référent des collaborateurs à récupérer + /// Précise si la liste est trié dans l'ordre croissant ou décroissant + /// Numéro de la page qui est affiché du côté front + /// Nombre de collaborateurs à renvoyer + /// permet de récupérer les collaborateurs dont le nom + prénom ou le prénom + nom contient le texte + /// Choisir l'attribut par lequel est trié la liste + /// Renvoyer les collaborateurs du référent dont l'id est passé en paramètre + public async Task> GetCollaborateursByReferentAsync(Guid? idReferent, bool? asc, int? numPage, int? parPage, string texte, string tri) + { + /* + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + stopwatch.Stop(); + Console.WriteLine("Durée d'exécution numéro 1: {0}", stopwatch.Elapsed.TotalSeconds); + stopwatch.Restart(); + stopwatch.Stop(); + Console.WriteLine("Durée d'exécution numéro 1: {0}", stopwatch.Elapsed.TotalSeconds); + */ + Collaborateur referent = await collaborateurApi.ChercherCollabIdAsync(idReferent); + if (referent == null) + throw new ReferentNotFoundException(); + + if (texte == null) + texte = ""; + else + texte = texte.ToLower(); + IEnumerable collaborateurs = await collaborateurApi.ChercherCollabRefAsync(idReferent); + int skip = (numPage.Value - 1) * parPage.Value; + int take = parPage.Value; + IEnumerable collaborateursDTO = (from c in collaborateurs + where (c.Nom + " " + c.Prenom).ToLower().Contains(texte) || (c.Prenom + " " + c.Nom).ToLower().Contains(texte) + select GetCollaborateurDTO(c)).Skip(skip).Take(take); + return collaborateursDTO; + } + /// /// Récupérer le profil d'un collaborateur par mail /// @@ -154,6 +261,19 @@ namespace EPAServeur.Services return GetProfilDTO(collaborateur); } + /// + /// Récupérer le profil d'un collaborateur par mail de manière asynchrone + /// + /// mail du collaborateur dont on cherche le profil + /// Renvoie le profil correspondant au mail passé en paramètre + public async Task GetProfilByMailAsync(string mail) + { + Collaborateur collaborateur = await collaborateurApi.ChercherCollabMailAsync(mail); + if (collaborateur == null) + throw new CollaborateurNotFoundException(); + return GetProfilDTO(collaborateur); + } + /// /// Récupérer un profil d'un collaborateur par l'id /// @@ -174,6 +294,27 @@ namespace EPAServeur.Services throw new CollaborateurNotFoundException(); return GetProfilDTO(collaborateur); } + + /// + /// Récupérer un profil d'un collaborateur par l'id de manière asynchrone + /// + /// id du collaborateur dont on cherche le profil + /// Renvoie le profil correspondant à l'id passé en paramètre + public async Task GetProfilByIdAsync(Guid? idCollaborateur) + { + //Stopwatch stopwatch = new Stopwatch(); + //stopwatch.Start(); + Collaborateur collaborateur = await collaborateurApi.ChercherCollabIdAsync(idCollaborateur); + //stopwatch.Stop(); + //Console.WriteLine("Durée d'exécution GetProfil: {0}", stopwatch.Elapsed.TotalSeconds); + //stopwatch.Restart(); + //stopwatch.Stop(); + //Console.WriteLine("Durée d'exécution numéro 1: {0}", stopwatch.Elapsed.TotalSeconds); + + if (collaborateur == null) + throw new CollaborateurNotFoundException(); + return GetProfilDTO(collaborateur); + } #endregion #region DTO To Object