diff --git a/EPAServeur/Controllers/NotesApi.cs b/EPAServeur/Controllers/NotesApi.cs
index 7cefb0f..ed822a5 100644
--- a/EPAServeur/Controllers/NotesApi.cs
+++ b/EPAServeur/Controllers/NotesApi.cs
@@ -476,7 +476,7 @@ namespace IO.Swagger.Controllers
/// Une erreur est survenue sur le serveur
[HttpPut]
[Route("/api/notes/{idNote}")]
- [Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
+ //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState]
[SwaggerOperation("UpdateNote")]
[SwaggerResponse(statusCode: 200, type: typeof(DetailsNoteDTO), description: "Note modifiée avec succès")]
@@ -485,8 +485,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 UpdateNote([FromBody]DetailsNoteDTO body, [FromRoute][Required]long? idNote)
+ public virtual async Task UpdateNote([FromBody]DetailsNoteDTO body, [FromRoute][Required]long? idNote)
{
+ try
+ {
+ body = await noteService.UpdateNoteAsync(idNote, body);
+ }
+ catch(NoteIdImcompatibleException e)
+ {
+ ErreurDTO erreur = new ErreurDTO
+ {
+ Code = 415,
+ Message = e.Message,
+ };
+ return StatusCode(erreur.Code.Value, erreur);
+ }catch(NoteInvalideException e)
+ {
+ ErreurDTO erreur = new ErreurDTO
+ {
+ Code = 415,
+ Message = e.Message,
+ };
+ return StatusCode(erreur.Code.Value, erreur);
+ }
+ catch (DbUpdateConcurrencyException 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 (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(DetailsNoteDTO));
@@ -504,13 +556,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 \"idAuteur\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"dateCreation\" : \"2000-01-23T04:56:07.000+00:00\",\n \"dateMiseAjour\" : \"2000-01-23T04:56:07.000+00:00\",\n \"titre\" : \"titre\",\n \"texte\" : \"texte\",\n \"id\" : 0,\n \"collaborateur\" : {\n \"businessUnit\" : {\n \"agence\" : {\n \"bu\" : [ null, null ],\n \"id\" : 6,\n \"nom\" : \"nom\"\n },\n \"id\" : 0,\n \"nom\" : \"nom\"\n },\n \"mailApside\" : \"\",\n \"dateArrivee\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"dateDepart\" : \"2000-01-23T04:56:07.000+00:00\",\n \"nom\" : \"nom\",\n \"prenom\" : \"prenom\"\n }\n}";
-
- var example = exampleJson != null
- ? JsonConvert.DeserializeObject(exampleJson)
- : default(DetailsNoteDTO); //TODO: Change the data returned
- return new ObjectResult(example);
}
}
}
diff --git a/EPAServeur/IServices/INoteService.cs b/EPAServeur/IServices/INoteService.cs
index d38de0c..864a9c5 100644
--- a/EPAServeur/IServices/INoteService.cs
+++ b/EPAServeur/IServices/INoteService.cs
@@ -29,7 +29,8 @@ namespace EPAServeur.IServices
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);
-
+ DetailsNoteDTO UpdateNote(long? idNote, DetailsNoteDTO note);
+ Task UpdateNoteAsync(long? idNote, DetailsNoteDTO note);
}
diff --git a/EPAServeur/Services/NoteService.cs b/EPAServeur/Services/NoteService.cs
index ed3c1d0..43cae4f 100644
--- a/EPAServeur/Services/NoteService.cs
+++ b/EPAServeur/Services/NoteService.cs
@@ -177,6 +177,29 @@ namespace EPAServeur.Services
return AffichageNoteDTO.Count();
}
+
+ ///
+ /// Mettre à jour une note de manière async
+ ///
+ /// Id de la note à modifier
+ /// Note avec les informations à jour
+ /// La note mise à jour
+ public DetailsNoteDTO UpdateNote(long? idNote, DetailsNoteDTO note)
+ {
+ if (idNote != note.Id)
+ throw new NoteIdImcompatibleException("L'id de la note a mettre à jour et la note a mettre à jour sont incompatble");
+ CheckNoteValide(note);
+ Note noteToUpdate = context.Note.Find(idNote);
+ if (!noteToUpdate.DateCreation.Equals(note.DateCreation) || note.Collaborateur.Id != noteToUpdate.IdCollaborateur || note.IdAuteur != noteToUpdate.IdAuteur)
+ throw new NoteIdImcompatibleException("La note a mettre à jour et la note en base de données ne correspondent pas");
+ noteToUpdate.Titre = note.Titre;
+ noteToUpdate.Texte = note.Texte;
+ noteToUpdate.DateMiseAJour = DateTime.Now;
+ note.DateMiseAjour = DateTime.Now;
+ context.SaveChanges();
+ return NoteToDetailSDTO(noteToUpdate);
+ }
+
#endregion
#region Services Async
@@ -307,151 +330,29 @@ namespace EPAServeur.Services
return AffichageNoteDTO.Count();
}
+
+ ///
+ /// Mettre à jour une note
+ ///
+ /// Id de la note à modifier
+ /// Note avec les informations à jour
+ /// La note mise à jour
+ public async Task UpdateNoteAsync(long? idNote, DetailsNoteDTO note)
+ {
+ if (idNote != note.Id)
+ throw new NoteIdImcompatibleException("L'id de la note a mettre à jour et la note a mettre à jour sont incompatble");
+ CheckNoteValide(note);
+ Note noteToUpdate = await context.Note.FindAsync(idNote);
+ if (!noteToUpdate.DateCreation.Equals(note.DateCreation) || note.Collaborateur.Id != noteToUpdate.IdCollaborateur || note.IdAuteur != noteToUpdate.IdAuteur)
+ throw new NoteIdImcompatibleException("La note a mettre à jour et la note en base de données ne correspondent pas");
+ noteToUpdate.Titre = note.Titre;
+ noteToUpdate.Texte = note.Texte;
+ noteToUpdate.DateMiseAJour = DateTime.Now;
+ note.DateMiseAjour = DateTime.Now;
+ await context.SaveChangesAsync();
+ return NoteToDetailSDTO(noteToUpdate);
+ }
#endregion
- /*
-
- #region Services
- ///
- /// Récupérer la liste des notes qu'un auteur a écrit sur un collaborateur
- ///
- /// Id de l'auteur des notes à récupérer
- /// Id du collaborateur pour lesquelles les notes ont été écrites
- /// 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 GetNotesByCollaborateur(Guid? idAuteur, Guid? idCollaborateur, bool? asc, int? numPage, int? parPage, string texte, string tri)
- {
- //Stopwatch stopwatch = new Stopwatch();
- //stopwatch.Start();
- if (collaborateurService.GetCollaborateurById(idAuteur) == null)
- throw new ReferentNotFoundException();
- //stopwatch.Stop();
- //Console.WriteLine("Durée d'exécution GetProfil 1: {0}", stopwatch.Elapsed.TotalSeconds);
- //stopwatch.Restart();
- if (collaborateurService.GetCollaborateurById(idAuteur) == null || collaborateurService.GetCollaborateurById(idCollaborateur) == null)
- throw new CollaborateurNotFoundException();
- //stopwatch.Stop();
- //Console.WriteLine("Durée d'exécution GetProfil 2: {0}", stopwatch.Elapsed.TotalSeconds);
-
- if (texte == null)
- texte = "";
- else
- texte = texte.ToLower();
- int skip = (numPage.Value - 1) * parPage.Value;
- int take = parPage.Value;
- IEnumerable AffichageNoteDTO = (from n in context.Note
- where n.IdAuteur == idAuteur && n.IdCollaborateur == idCollaborateur
- select NoteToAffichageDTO(n, collaborateurService));
- AffichageNoteDTO = (from a in AffichageNoteDTO
- where a.Titre.ToLower().Contains(texte)
- select a).Skip(skip).Take(take);
- return AffichageNoteDTO;
- }
-
- ///
- /// Récupérer une note en fonction de son id
- ///
- /// Id de la note à récupérer
- /// L'objet DTO de la note correspondant à l'id passé en paramètre
- public DetailsNoteDTO GetNoteById(long? idNote)
- {
- Note note = context.Note.Find(idNote);
- if (note == null)
- throw new NoteNotFoundException();
- return NoteToDetailSDTO(note);
- }
-
- public IEnumerable GetNotes(bool? asc, int? numPage, int? parPage, string texte, string tri)
- {
- throw new NotImplementedException();
- }
-
- ///
- /// 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)
- {
- if (collaborateurService.GetCollaborateurById(idAuteur) == null)
- throw new CollaborateurNotFoundException();
- if (texte == null)
- texte = "";
- else
- texte = texte.ToLower();
- 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, collaborateurService));
- //stopwatch.Stop();
- //Console.WriteLine("Durée d'exécution numéro 1: {0}", stopwatch.Elapsed.TotalSeconds);
- //stopwatch.Restart();
- AffichageNoteDTO = (from a in AffichageNoteDTO
- where a.Collaborateur.ToLower().Contains(texte) || a.Titre.ToLower().Contains(texte)
- select a).Skip(skip).Take(take);
- //stopwatch.Stop();
- //Console.WriteLine("Durée d'exécution numéro 2: {0}", stopwatch.Elapsed.TotalSeconds);
- return AffichageNoteDTO;
- }
-
- ///
- /// Supprimer une note en fonction de son Id
- ///
- /// Id de la note à supprimer
- /// Si oui ou non la notea bien été supprimé
- public void SupprimerNote(long? idNote)
- {
- Note note = context.Note.Find(idNote);
- if (note == null)
- throw new NoteNotFoundException();
- context.Remove(note);
- context.SaveChanges();
- }
-
- ///
- /// Mettre à jour une note
- ///
- /// Id de la note à modifier
- ///
- ///
- public DetailsNoteDTO UpdateNote(long? idNote, DetailsNoteDTO note)
- {
- if (idNote != note.Id)
- throw new NoteIdImcompatibleException();
- if (!CheckNoteValide(note))
- throw new NoteInvalideException();
- Note noteToUpdate = context.Note.Find(idNote);
- noteToUpdate.Titre = note.Titre;
- noteToUpdate.Texte = note.Texte;
- noteToUpdate.DateMiseAJour = DateTime.Now;
- context.SaveChanges();
- return NoteToDetailSDTO(noteToUpdate);
- }
-
- ///
- /// Vérifier si un objet DetailsNoteDTO possède est valide pour ajout ou mise à jour
- ///
- /// Un objet DetailsNoteDTO est valide si aucune de ses propriétés n'est à null
- ///
- /// true si l'objet est valide, false sinon
- private bool CheckNoteValide(DetailsNoteDTO note)
- {
- return !(note == null || note.IdAuteur == null || note.Collaborateur == null || note.Collaborateur.Id == null || note.Titre == null || note.Texte == null) ;
- }
- #endregion
-
- */
#region fonctions privees
///