diff --git a/EPAServeur/Controllers/NotesApi.cs b/EPAServeur/Controllers/NotesApi.cs
index b9b91cf..7cefb0f 100644
--- a/EPAServeur/Controllers/NotesApi.cs
+++ b/EPAServeur/Controllers/NotesApi.cs
@@ -321,7 +321,7 @@ namespace IO.Swagger.Controllers
/// Une erreur est survenue sur le serveur
[HttpGet]
[Route("/api/notes/auteur/{idAuteur}")]
- [Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
+ //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState]
[SwaggerOperation("GetNotesAuteur")]
[SwaggerResponse(statusCode: 200, type: typeof(List), description: "OK")]
@@ -329,8 +329,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 GetNotesAuteur([FromRoute][Required]Guid? idAuteur, [FromQuery]bool? asc, [FromQuery]int? numPage, [FromQuery][Range(5, 100)]int? parPAge, [FromQuery]string texte, [FromQuery]string tri)
- {
+ public virtual async Task GetNotesAuteur([FromRoute][Required]Guid? idAuteur, [FromQuery]bool? asc, [FromQuery]int? numPage, [FromQuery][Range(5, 100)]int? parPAge, [FromQuery]string texte, [FromQuery]string tri)
+ {
+ IEnumerable affichageNotes;
+ try
+ {
+ affichageNotes = await noteService.GetNotesByAuteurAsync(idAuteur, asc, numPage, parPAge, texte, tri);
+ //affichageNotes = noteService.GetNotesByAuteur(idAuteur, asc, numPage, parPAge, texte, tri);
+ }
+ catch(ReferentNotFoundException e)
+ {
+ ErreurDTO erreurDTO = new ErreurDTO()
+ {
+ Code = 404,
+ Message = e.Message,
+ };
+ return NotFound(erreurDTO);
+ }
+ catch(ApiException e)
+ {
+ logger.LogError(e.Message);
+ ErreurDTO erreur = new ErreurDTO()
+ {
+ Code = 500,
+ Message = "Une erreur est survenue lors de la récupération des informations collaborateurs",
+ };
+ 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",
+ Message = e.StackTrace,
+ };
+ return StatusCode(500, erreur);
+ }
+ return Ok(affichageNotes);
//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));
@@ -345,13 +382,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 \"idCollaborateur\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"dateMiseAJour\" : \"2000-01-23T04:56:07.000+00:00\",\n \"titre\" : \"titre\",\n \"id\" : 0,\n \"collaborateur\" : \"collaborateur\"\n}, {\n \"idCollaborateur\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"dateMiseAJour\" : \"2000-01-23T04:56:07.000+00:00\",\n \"titre\" : \"titre\",\n \"id\" : 0,\n \"collaborateur\" : \"collaborateur\"\n} ]";
-
- var example = exampleJson != null
- ? JsonConvert.DeserializeObject>(exampleJson)
- : default(List); //TODO: Change the data returned
- return new ObjectResult(example);
}
///
@@ -370,8 +400,8 @@ namespace IO.Swagger.Controllers
/// La ressource n'a pas été trouvée
/// Une erreur est survenue sur le serveur
[HttpGet]
- [Route("/api/notes/{idAuteur}/count")]
- [Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
+ [Route("/api/notes/auteur/{idAuteur}/count")]
+ //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState]
[SwaggerOperation("GetNotesAuteurCount")]
[SwaggerResponse(statusCode: 200, type: typeof(long?), description: "OK")]
@@ -379,8 +409,43 @@ 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 GetNotesAuteurCount([FromRoute][Required]Guid? idAuteur, [FromQuery]bool? asc, [FromQuery]int? numPage, [FromQuery][Range(5, 100)]int? parPAge, [FromQuery]string texte, [FromQuery]string tri)
- {
+ public virtual async Task GetNotesAuteurCount([FromRoute][Required]Guid? idAuteur, [FromQuery]bool? asc, [FromQuery]int? numPage, [FromQuery][Range(5, 100)]int? parPAge, [FromQuery]string texte, [FromQuery]string tri)
+ {
+ int notes;
+ try
+ {
+ notes = await noteService.GetNotesByAuteurCountAsync(idAuteur, texte);
+ }
+ catch(ApiException e)
+ {
+ logger.LogError(e.Message);
+ ErreurDTO erreurDTO = new ErreurDTO()
+ {
+ Code = 500,
+ Message = "Une erreur est survenue lors de la récupération des informations collaborateurs",
+ };
+ return StatusCode(500, erreurDTO);
+ }
+ catch(ReferentNotFoundException e)
+ {
+ ErreurDTO erreurDTO = new ErreurDTO()
+ {
+ Code = 404,
+ Message = e.Message,
+ };
+ return NotFound(erreurDTO);
+ }
+ catch(Exception e)
+ {
+ logger.LogError(e.Message);
+ ErreurDTO erreurDTO = new ErreurDTO()
+ {
+ Code = 500,
+ Message = "Une erreur inconnue es survenue sur le serveur",
+ };
+ return StatusCode(500, erreurDTO);
+ }
+ return Ok(notes);
//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(long?));
@@ -395,13 +460,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 = "0";
-
- var example = exampleJson != null
- ? JsonConvert.DeserializeObject(exampleJson)
- : default(long?); //TODO: Change the data returned
- return new ObjectResult(example);
}
///
diff --git a/EPAServeur/IServices/INoteService.cs b/EPAServeur/IServices/INoteService.cs
index 2326e69..d38de0c 100644
--- a/EPAServeur/IServices/INoteService.cs
+++ b/EPAServeur/IServices/INoteService.cs
@@ -25,6 +25,10 @@ namespace EPAServeur.IServices
void SupprimerNoteAsync(long? idNote);
DetailsNoteDTO GetNoteById(long? idNote);
Task GetNoteByIdAsync(long? idNote);
+ IEnumerable GetNotesByAuteur(Guid? idAuteur, bool? asc, int? numPage, int? parPAge, string texte, string tri);
+ Task> GetNotesByAuteurAsync(Guid? idAuteur, bool? asc, int? numPage, int? parPAge, string texte, string tri);
+ int GetNotesByAuteurCount(Guid? idAuteur, string texte);
+ Task GetNotesByAuteurCountAsync(Guid? idAuteur, string texte);
diff --git a/EPAServeur/Services/NoteService.cs b/EPAServeur/Services/NoteService.cs
index 2ce9ca7..ed3c1d0 100644
--- a/EPAServeur/Services/NoteService.cs
+++ b/EPAServeur/Services/NoteService.cs
@@ -106,6 +106,77 @@ namespace EPAServeur.Services
return NoteToDetailSDTO(note);
}
+
+ ///
+ /// Récupérer la liste des notes qu'un auteur a écrit sur un collaborateur
+ ///
+ /// Id de l'auteur des notes à 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 notes à renvoyer
+ /// permet de récupérer les notes les informations du collaborateur ou le titre de la note contient le texte
+ /// Choisir l'attribut par lequel est trié la liste
+ /// Retour la liste des notes à afficher
+ public IEnumerable GetNotesByAuteur(Guid? idAuteur, bool? asc, int? numPage, int? parPage, string texte, string tri)
+ {
+ Collaborateur auteur = collaborateurApi.ChercherCollabId(idAuteur);
+ if (auteur == null)
+ throw new ReferentNotFoundException("L'auteur de la note n'existe pas");
+
+ int skip = (numPage.Value - 1) * parPage.Value;
+ int take = parPage.Value;
+ //Stopwatch stopwatch = new Stopwatch();
+ //stopwatch.Start();
+ /*
+ * IEnumerable AffichageNoteDTO = (from n in context.Note
+ where n.IdAuteur == idAuteur
+ select NoteToAffichageDTO(n));
+ */
+ IEnumerable notes = (from n in context.Note
+ where n.IdAuteur == idAuteur
+ select n);
+ IEnumerable AffichageNoteDTO = (from n in notes
+ select NoteToAffichageDTO(n));
+
+ if (texte != null)
+ {
+ texte = texte.ToLower();
+ AffichageNoteDTO = (from a in AffichageNoteDTO
+ where a.Collaborateur.ToLower().Contains(texte) || a.Titre.ToLower().Contains(texte)
+ select a);
+ }
+ return AffichageNoteDTO.Skip(skip).Take(take);
+ }
+
+ ///
+ /// Récupérer le nombre de notes qu'un auteur a écrit
+ ///
+ /// Id de l'auteur des notes à récupérer
+ /// permet de récupérer les notes les informations du collaborateur ou le titre de la note contient le texte
+ /// Le nombre de notes
+ public int GetNotesByAuteurCount(Guid? idAuteur, string texte)
+ {
+ Collaborateur auteur = collaborateurApi.ChercherCollabId(idAuteur);
+ if (auteur == null)
+ throw new ReferentNotFoundException("L'auteur de la note n'existe pas");
+
+ IEnumerable notes = (from n in context.Note
+ where n.IdAuteur == idAuteur
+ select n);
+ IEnumerable AffichageNoteDTO = (from n in notes
+ select NoteToAffichageDTO(n));
+
+ if (texte != null)
+ {
+ texte = texte.ToLower();
+ AffichageNoteDTO = (from a in AffichageNoteDTO
+ where a.Collaborateur.ToLower().Contains(texte) || a.Titre.ToLower().Contains(texte)
+ select a);
+ }
+
+ return AffichageNoteDTO.Count();
+ }
+
#endregion
#region Services Async
@@ -173,6 +244,69 @@ namespace EPAServeur.Services
return await NoteToDetailSDTOAsync(note);
}
+ ///
+ /// Récupérer la liste des notes qu'un auteur a écrit sur un collaborateur
+ ///
+ /// Id de l'auteur des notes à 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 notes à renvoyer
+ /// permet de récupérer les notes les informations du collaborateur ou le titre de la note contient le texte
+ /// Choisir l'attribut par lequel est trié la liste
+ /// Retour la liste des notes à afficher
+ public async Task> GetNotesByAuteurAsync(Guid? idAuteur, bool? asc, int? numPage, int? parPage, string texte, string tri)
+ {
+ Collaborateur auteur = await collaborateurApi.ChercherCollabIdAsync(idAuteur);
+ if (auteur == null)
+ throw new ReferentNotFoundException("L'auteur de la note n'existe pas");
+
+ int skip = (numPage.Value - 1) * parPage.Value;
+ int take = parPage.Value;
+
+ IEnumerable notes = context.Note.Where(n => n.IdAuteur == idAuteur);
+
+ var task = notes.Select(n => NoteToAffichageDTOAsync(n));
+ IEnumerable AffichageNoteDTO = await Task.WhenAll(task);
+
+ if (texte != null)
+ {
+ texte = texte.ToLower();
+ AffichageNoteDTO = (from a in AffichageNoteDTO
+ where a.Collaborateur.ToLower().Contains(texte) || a.Titre.ToLower().Contains(texte)
+ select a);
+ }
+
+ return AffichageNoteDTO.Skip(skip).Take(take);
+ }
+
+ ///
+ /// Récupérer le nombre de notes qu'un auteur a écrit
+ ///
+ /// Id de l'auteur des notes à récupérer
+ /// permet de récupérer les notes les informations du collaborateur ou le titre de la note contient le texte
+ /// Le nombre de notes
+ public async Task GetNotesByAuteurCountAsync(Guid? idAuteur, string texte)
+ {
+ Collaborateur auteur = await collaborateurApi.ChercherCollabIdAsync(idAuteur);
+ if (auteur == null)
+ throw new ReferentNotFoundException("L'auteur de la note n'existe pas");
+
+ IEnumerable notes = context.Note.Where(n => n.IdAuteur == idAuteur);
+
+ var task = notes.Select(n => NoteToAffichageDTOAsync(n));
+ IEnumerable AffichageNoteDTO = await Task.WhenAll(task);
+
+ if (texte != null)
+ {
+ texte = texte.ToLower();
+ AffichageNoteDTO = (from a in AffichageNoteDTO
+ where a.Collaborateur.ToLower().Contains(texte) || a.Titre.ToLower().Contains(texte)
+ select a);
+ }
+
+ return AffichageNoteDTO.Count();
+ }
+
#endregion
/*
@@ -379,15 +513,42 @@ namespace EPAServeur.Services
/// Note à transformer
/// Service collaborateur pour récupérer les informations des collaborateurs
/// La note transformée pour être affichée
- private AffichageNoteDTO NoteToAffichageDTO(Note note)
+ private AffichageNoteDTO NoteToAffichageDTO(Note note)
{
- //CollaborateurDTO collaborateur = collaborateurService.GetCollaborateurById(note.IdCollaborateur);
+ /*
+ string infoCollab = "Aucun collaborateur lié";
Collaborateur collaborateur = collaborateurApi.ChercherCollabId((Guid?)note.IdCollaborateur);
+ if (collaborateur != null)
+ infoCollab = collaborateur.Prenom + collaborateur.Nom;
+ */
+ AffichageNoteDTO affichage = new AffichageNoteDTO()
+ {
+ Id = note.IdNote,
+ IdCollaborateur = note.IdCollaborateur,
+ Collaborateur = "ui",
+ Titre = note.Titre,
+ DateMiseAJour = note.DateMiseAJour
+ };
+ return affichage;
+ }
+
+ ///
+ /// Transformer un objet note en objet pour afficher un note dans dans un tableau
+ ///
+ /// Note à transformer
+ /// Service collaborateur pour récupérer les informations des collaborateurs
+ /// La note transformée pour être affichée
+ private async Task NoteToAffichageDTOAsync(Note note)
+ {
+ string infoCollab = "Aucun collaborateur lié";
+ Collaborateur collaborateur = await collaborateurApi.ChercherCollabIdAsync((Guid?)note.IdCollaborateur);
+ if (collaborateur != null)
+ infoCollab = collaborateur.Prenom + " " + collaborateur.Nom;
AffichageNoteDTO affichage = new AffichageNoteDTO()
{
Id = note.IdNote,
IdCollaborateur = note.IdCollaborateur,
- Collaborateur = collaborateur.Prenom + collaborateur.Nom,
+ Collaborateur = infoCollab,
Titre = note.Titre,
DateMiseAJour = note.DateMiseAJour
};
@@ -403,7 +564,7 @@ namespace EPAServeur.Services
{
CollaborateurDTO collaborateur = collaborateurService.GetCollaborateurById(note.IdCollaborateur);
if (collaborateur == null)
- throw new CollaborateurNotFoundException("Il est impossible de récupérer une note donc le collaborateur n'existe plus");
+ throw new CollaborateurNotFoundException("Il est impossible de récupérer une note dont le collaborateur n'existe plus");
DetailsNoteDTO details = new DetailsNoteDTO()
{
Id = note.IdNote,