Mise à jour de la récupération des notes en fonction de l'id de l'auteur

develop
Yanaël GRETTE 4 years ago
parent 8360570eea
commit 7bbc7e2d4b
  1. 100
      EPAServeur/Controllers/NotesApi.cs
  2. 4
      EPAServeur/IServices/INoteService.cs
  3. 169
      EPAServeur/Services/NoteService.cs

@ -321,7 +321,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>
[HttpGet] [HttpGet]
[Route("/api/notes/auteur/{idAuteur}")] [Route("/api/notes/auteur/{idAuteur}")]
[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState] [ValidateModelState]
[SwaggerOperation("GetNotesAuteur")] [SwaggerOperation("GetNotesAuteur")]
[SwaggerResponse(statusCode: 200, type: typeof(List<AffichageNoteDTO>), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(List<AffichageNoteDTO>), 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: 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&#x27;a pas été trouvée")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "La ressource n&#x27;a pas été trouvée")]
[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 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<IActionResult> GetNotesAuteur([FromRoute][Required]Guid? idAuteur, [FromQuery]bool? asc, [FromQuery]int? numPage, [FromQuery][Range(5, 100)]int? parPAge, [FromQuery]string texte, [FromQuery]string tri)
{ {
IEnumerable<AffichageNoteDTO> 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(..), ... //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<AffichageNoteDTO>)); // return StatusCode(200, default(List<AffichageNoteDTO>));
@ -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(..), ... //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)); // 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<List<AffichageNoteDTO>>(exampleJson)
: default(List<AffichageNoteDTO>); //TODO: Change the data returned
return new ObjectResult(example);
} }
/// <summary> /// <summary>
@ -370,8 +400,8 @@ namespace IO.Swagger.Controllers
/// <response code="404">La ressource n&#x27;a pas été trouvée</response> /// <response code="404">La ressource n&#x27;a pas été trouvée</response>
/// <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/notes/{idAuteur}/count")] [Route("/api/notes/auteur/{idAuteur}/count")]
[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState] [ValidateModelState]
[SwaggerOperation("GetNotesAuteurCount")] [SwaggerOperation("GetNotesAuteurCount")]
[SwaggerResponse(statusCode: 200, type: typeof(long?), description: "OK")] [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: 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&#x27;a pas été trouvée")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "La ressource n&#x27;a pas été trouvée")]
[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 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<IActionResult> 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(..), ... //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?)); // 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(..), ... //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)); // return StatusCode(500, default(ErreurDTO));
string exampleJson = null;
exampleJson = "0";
var example = exampleJson != null
? JsonConvert.DeserializeObject<long?>(exampleJson)
: default(long?); //TODO: Change the data returned
return new ObjectResult(example);
} }
/// <summary> /// <summary>

@ -25,6 +25,10 @@ namespace EPAServeur.IServices
void SupprimerNoteAsync(long? idNote); void SupprimerNoteAsync(long? idNote);
DetailsNoteDTO GetNoteById(long? idNote); DetailsNoteDTO GetNoteById(long? idNote);
Task<DetailsNoteDTO> GetNoteByIdAsync(long? idNote); Task<DetailsNoteDTO> GetNoteByIdAsync(long? idNote);
IEnumerable<AffichageNoteDTO> GetNotesByAuteur(Guid? idAuteur, bool? asc, int? numPage, int? parPAge, string texte, string tri);
Task<IEnumerable<AffichageNoteDTO>> GetNotesByAuteurAsync(Guid? idAuteur, bool? asc, int? numPage, int? parPAge, string texte, string tri);
int GetNotesByAuteurCount(Guid? idAuteur, string texte);
Task<int> GetNotesByAuteurCountAsync(Guid? idAuteur, string texte);

@ -106,6 +106,77 @@ namespace EPAServeur.Services
return NoteToDetailSDTO(note); return NoteToDetailSDTO(note);
} }
/// <summary>
/// Récupérer la liste des notes qu'un auteur a écrit sur un collaborateur
/// </summary>
/// <param name="idAuteur">Id de l'auteur des notes à récupérer</param>
/// <param name="asc">Précise si la liste est trié dans l'ordre croissant ou décroissant</param>
/// <param name="numPage">Numéro de la page qui est affiché du côté front</param>
/// <param name="parPage">Nombre de notes à renvoyer</param>
/// <param name="texte">permet de récupérer les notes les informations du collaborateur ou le titre de la note contient le texte</param>
/// <param name="tri">Choisir l'attribut par lequel est trié la liste</param>
/// <returns>Retour la liste des notes à afficher</returns>
public IEnumerable<AffichageNoteDTO> 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> AffichageNoteDTO = (from n in context.Note
where n.IdAuteur == idAuteur
select NoteToAffichageDTO(n));
*/
IEnumerable<Note> notes = (from n in context.Note
where n.IdAuteur == idAuteur
select n);
IEnumerable<AffichageNoteDTO> 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);
}
/// <summary>
/// Récupérer le nombre de notes qu'un auteur a écrit
/// </summary>
/// <param name="idAuteur">Id de l'auteur des notes à récupérer</param>
/// <param name="texte">permet de récupérer les notes les informations du collaborateur ou le titre de la note contient le texte</param>
/// <returns>Le nombre de notes</returns>
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<Note> notes = (from n in context.Note
where n.IdAuteur == idAuteur
select n);
IEnumerable<AffichageNoteDTO> 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 #endregion
#region Services Async #region Services Async
@ -173,6 +244,69 @@ namespace EPAServeur.Services
return await NoteToDetailSDTOAsync(note); return await NoteToDetailSDTOAsync(note);
} }
/// <summary>
/// Récupérer la liste des notes qu'un auteur a écrit sur un collaborateur
/// </summary>
/// <param name="idAuteur">Id de l'auteur des notes à récupérer</param>
/// <param name="asc">Précise si la liste est trié dans l'ordre croissant ou décroissant</param>
/// <param name="numPage">Numéro de la page qui est affiché du côté front</param>
/// <param name="parPage">Nombre de notes à renvoyer</param>
/// <param name="texte">permet de récupérer les notes les informations du collaborateur ou le titre de la note contient le texte</param>
/// <param name="tri">Choisir l'attribut par lequel est trié la liste</param>
/// <returns>Retour la liste des notes à afficher</returns>
public async Task<IEnumerable<AffichageNoteDTO>> 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<Note> notes = context.Note.Where(n => n.IdAuteur == idAuteur);
var task = notes.Select(n => NoteToAffichageDTOAsync(n));
IEnumerable<AffichageNoteDTO> 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);
}
/// <summary>
/// Récupérer le nombre de notes qu'un auteur a écrit
/// </summary>
/// <param name="idAuteur">Id de l'auteur des notes à récupérer</param>
/// <param name="texte">permet de récupérer les notes les informations du collaborateur ou le titre de la note contient le texte</param>
/// <returns>Le nombre de notes</returns>
public async Task<int> 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<Note> notes = context.Note.Where(n => n.IdAuteur == idAuteur);
var task = notes.Select(n => NoteToAffichageDTOAsync(n));
IEnumerable<AffichageNoteDTO> 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 #endregion
/* /*
@ -379,15 +513,42 @@ namespace EPAServeur.Services
/// <param name="note">Note à transformer</param> /// <param name="note">Note à transformer</param>
/// <param name="collaborateurService">Service collaborateur pour récupérer les informations des collaborateurs</param> /// <param name="collaborateurService">Service collaborateur pour récupérer les informations des collaborateurs</param>
/// <returns>La note transformée pour être affichée</returns> /// <returns>La note transformée pour être affichée</returns>
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); 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;
}
/// <summary>
/// Transformer un objet note en objet pour afficher un note dans dans un tableau
/// </summary>
/// <param name="note">Note à transformer</param>
/// <param name="collaborateurService">Service collaborateur pour récupérer les informations des collaborateurs</param>
/// <returns>La note transformée pour être affichée</returns>
private async Task<AffichageNoteDTO> 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() AffichageNoteDTO affichage = new AffichageNoteDTO()
{ {
Id = note.IdNote, Id = note.IdNote,
IdCollaborateur = note.IdCollaborateur, IdCollaborateur = note.IdCollaborateur,
Collaborateur = collaborateur.Prenom + collaborateur.Nom, Collaborateur = infoCollab,
Titre = note.Titre, Titre = note.Titre,
DateMiseAJour = note.DateMiseAJour DateMiseAJour = note.DateMiseAJour
}; };
@ -403,7 +564,7 @@ namespace EPAServeur.Services
{ {
CollaborateurDTO collaborateur = collaborateurService.GetCollaborateurById(note.IdCollaborateur); CollaborateurDTO collaborateur = collaborateurService.GetCollaborateurById(note.IdCollaborateur);
if (collaborateur == null) 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() DetailsNoteDTO details = new DetailsNoteDTO()
{ {
Id = note.IdNote, Id = note.IdNote,

Loading…
Cancel
Save