Mise à jour de l'ajout d'une note

develop
Yanaël GRETTE 4 years ago
parent 194e67135c
commit 39519bfc34
  1. 104
      EPAServeur/Controllers/NotesApi.cs
  2. 8
      EPAServeur/IServices/INoteService.cs
  3. 368
      EPAServeur/Services/NoteService.cs

@ -18,6 +18,11 @@ using IO.Swagger.Attributes;
using IO.Swagger.Security; using IO.Swagger.Security;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using IO.Swagger.DTO; using IO.Swagger.DTO;
using EPAServeur.IServices;
using Microsoft.Extensions.Logging;
using IO.Swagger.ClientCollaborateur;
using EPAServeur.Exceptions;
using Microsoft.EntityFrameworkCore;
namespace IO.Swagger.Controllers namespace IO.Swagger.Controllers
{ {
@ -27,6 +32,24 @@ namespace IO.Swagger.Controllers
[ApiController] [ApiController]
public class NotesApiController : ControllerBase public class NotesApiController : ControllerBase
{ {
/// <summary>
/// Service des note
/// </summary>
private readonly INoteService noteService;
/// <summary>
/// Logger du contrôleur
/// </summary>
private readonly ILogger<NotesApiController> logger;
public NotesApiController(INoteService _noteService, ILogger<NotesApiController> _logger)
{
noteService = _noteService;
logger = _logger;
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
@ -39,8 +62,8 @@ 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>
[HttpPost] [HttpPost]
[Route("/api/notes/")] [Route("/api/notes/")]
[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState] //[ValidateModelState]
[SwaggerOperation("AddNote")] [SwaggerOperation("AddNote")]
[SwaggerResponse(statusCode: 201, type: typeof(DetailsNoteDTO), description: "Note créée avec succès")] [SwaggerResponse(statusCode: 201, type: typeof(DetailsNoteDTO), description: "Note créée avec succès")]
[SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L&#x27;utilisateur souhaitant accéder à la ressource n&#x27;est pas authentifié")] [SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L&#x27;utilisateur souhaitant accéder à la ressource n&#x27;est pas authentifié")]
@ -49,6 +72,77 @@ namespace IO.Swagger.Controllers
[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 AddNote([FromBody]DetailsNoteDTO body) public virtual IActionResult AddNote([FromBody]DetailsNoteDTO body)
{ {
try
{
body = noteService.AjouterNote(body);
}
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 données collaborateurs",
};
return StatusCode(erreur.Code.Value, erreur);
}
catch(NoteInvalideException e)
{
ErreurDTO erreur = new ErreurDTO()
{
Code = 415,
Message = e.Message,
};
return StatusCode(erreur.Code.Value, erreur.Message);
}
catch(ReferentNotFoundException e)
{
ErreurDTO erreur = new ErreurDTO()
{
Code = 404,
Message = e.Message,
};
return NotFound(erreur);
}
catch(CollaborateurNotFoundException e)
{
ErreurDTO erreur = new ErreurDTO()
{
Code = 404,
Message = e.Message,
};
return NotFound(erreur);
}
catch(CollaborateurPartiException e)
{
ErreurDTO erreur = new ErreurDTO()
{
Code = 415,
Message = e.Message,
};
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 Created("",body);
//TODO: Uncomment the next line to return response 201 or use other options such as return this.NotFound(), return this.BadRequest(..), ... //TODO: Uncomment the next line to return response 201 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(201, default(DetailsNoteDTO)); // return StatusCode(201, default(DetailsNoteDTO));
@ -63,13 +157,7 @@ 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 \"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<DetailsNoteDTO>(exampleJson)
: default(DetailsNoteDTO); //TODO: Change the data returned
return new ObjectResult(example);
} }
/// <summary> /// <summary>

@ -10,7 +10,7 @@ namespace EPAServeur.IServices
{ {
public interface INoteService public interface INoteService
{ {
//bool? asc, int? numPage, int? parPAge, string texte, string tri) /*
public IEnumerable<AffichageNoteDTO> GetNotes(bool? asc, int? numPage, int? parPAge, string texte, string tri); public IEnumerable<AffichageNoteDTO> GetNotes(bool? asc, int? numPage, int? parPAge, string texte, string tri);
public IEnumerable<AffichageNoteDTO> GetNotesByAuteur(Guid? idAuteur, bool? asc, int? numPage, int? parPAge, string texte, string tri); public IEnumerable<AffichageNoteDTO> GetNotesByAuteur(Guid? idAuteur, bool? asc, int? numPage, int? parPAge, string texte, string tri);
public DetailsNoteDTO GetNoteById(long? idNote); public DetailsNoteDTO GetNoteById(long? idNote);
@ -18,5 +18,11 @@ namespace EPAServeur.IServices
public DetailsNoteDTO AjouterNote(DetailsNoteDTO nouvelleNote); public DetailsNoteDTO AjouterNote(DetailsNoteDTO nouvelleNote);
public void SupprimerNote(long? idNote); public void SupprimerNote(long? idNote);
public DetailsNoteDTO UpdateNote(long? idNote, DetailsNoteDTO note); public DetailsNoteDTO UpdateNote(long? idNote, DetailsNoteDTO note);
*/
DetailsNoteDTO AjouterNote(DetailsNoteDTO note);
Task<DetailsNoteDTO> AjouterNoteAsync(DetailsNoteDTO note);
} }
} }

@ -2,6 +2,7 @@
using EPAServeur.Exceptions; using EPAServeur.Exceptions;
using EPAServeur.IServices; using EPAServeur.IServices;
using EPAServeur.Models.Notes; using EPAServeur.Models.Notes;
using IO.Swagger.ApiCollaborateur;
using IO.Swagger.DTO; using IO.Swagger.DTO;
using IO.Swagger.ModelCollaborateur; using IO.Swagger.ModelCollaborateur;
using System; using System;
@ -18,180 +19,290 @@ namespace EPAServeur.Services
public class NoteService : INoteService public class NoteService : INoteService
{ {
#region Variables #region Variables
/*
/// <summary> /// <summary>
/// API pour accéder aux données collaborateur en passant par le service collaborateur /// Service collaborateur pour récupérer les données collaborateurs
/// </summary> /// </summary>
private readonly ICollaborateurService collaborateurService; private readonly ICollaborateurService collaborateurService;
*/
private readonly ICollaborateurApi collaborateurApi;
/// <summary> /// <summary>
/// Contexte pour interagir avec la base de données MySQL du serveur EP /// Contexte pour interagir avec la base de données MySQL du serveur EP
/// </summary> /// </summary>
private readonly EpContext context; private readonly EpContext context;
#endregion #endregion
#region Constructeurs #region Constructeurs
public NoteService(ICollaborateurService _collaborateurService, EpContext _context) public NoteService(ICollaborateurApi _collaborateurApi, EpContext _context)
{ {
collaborateurService = _collaborateurService; //collaborateurService = _collaborateurService;
collaborateurApi = _collaborateurApi;
context = _context; context = _context;
} }
#endregion #endregion
#region Services Sync
/// <summary> /// <summary>
/// Ajouter une nouvelle note dans la base de données /// Ajouter une nouvelle note dans la base de données
/// </summary> /// </summary>
/// <param name="nouvelleNote">La nouvelle note a ajouté en base</param> /// <param name="nouvelleNote">La nouvelle note a ajouté en base</param>
/// <returns></returns> /// <returns>La nouvelle note ajouté</returns>
public DetailsNoteDTO AjouterNote(DetailsNoteDTO nouvelleNote) public DetailsNoteDTO AjouterNote(DetailsNoteDTO nouvelleNote)
{ {
if (!IsDetailsNoteValide(nouvelleNote)) //vérifier qu'il n'y a aucune valeur null
throw new NoteInvalideException(); CheckNoteValide(nouvelleNote);
//vérifier que le référent existe
Collaborateur auteur = collaborateurApi.ChercherCollabId(nouvelleNote.IdAuteur);
CheckReferent(auteur);
//vérifier que le collaborateur existe
Collaborateur collaborateur = collaborateurApi.ChercherCollabId(nouvelleNote.Collaborateur.Id);
CheckCollaborateur(collaborateur);
//transformer la note DTO en Note
Note note = DetailsNoteDTOToNouvelleNote(nouvelleNote); Note note = DetailsNoteDTOToNouvelleNote(nouvelleNote);
//ajouter la note et sauvegarder
context.Note.Add(note); context.Note.Add(note);
context.SaveChanges(); context.SaveChanges();
return NoteToDetailSDTO(note); nouvelleNote.Id = note.IdNote;
return nouvelleNote;
} }
#region Services
/// <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="idCollaborateur">Id du collaborateur pour lesquelles les notes ont été écrites</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> 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> 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;
}
#endregion
#region Services Async
/// <summary> /// <summary>
/// Récupérer une note en fonction de son id /// Ajouter une nouvelle note dans la base de données de manière async
/// </summary> /// </summary>
/// <param name="idNote">Id de la note à récupérer</param> /// <param name="nouvelleNote">La nouvelle note a ajouté en base</param>
/// <returns>L'objet DTO de la note correspondant à l'id passé en paramètre</returns> /// <returns>La nouvelle note ajouté</returns>
public DetailsNoteDTO GetNoteById(long? idNote) public async Task<DetailsNoteDTO> AjouterNoteAsync(DetailsNoteDTO nouvelleNote)
{ {
Note note = context.Note.Find(idNote); //vérifier qu'il n'y a aucune valeur null
if (note == null) CheckNoteValide(nouvelleNote);
throw new NoteNotFoundException();
return NoteToDetailSDTO(note);
}
public IEnumerable<AffichageNoteDTO> GetNotes(bool? asc, int? numPage, int? parPage, string texte, string tri) //vérifier que le référent existe
{ Collaborateur auteur = await collaborateurApi.ChercherCollabIdAsync((Guid?)nouvelleNote.IdAuteur);
throw new NotImplementedException(); CheckReferent(auteur);
}
/// <summary> //vérifier que le collaborateur existe
/// Récupérer la liste des notes qu'un auteur a écrit sur un collaborateur Collaborateur collaborateur = await collaborateurApi.ChercherCollabIdAsync(nouvelleNote.Collaborateur.Id);
/// </summary> CheckCollaborateur(collaborateur);
/// <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> //transformer la note DTO en Note
/// <param name="numPage">Numéro de la page qui est affiché du côté front</param> Note note = DetailsNoteDTOToNouvelleNote(nouvelleNote);
/// <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> //ajouter la note et sauvegarder
/// <param name="tri">Choisir l'attribut par lequel est trié la liste</param> await context.Note.AddAsync(note);
/// <returns>Retour la liste des notes à afficher</returns> await context.SaveChangesAsync();
public IEnumerable<AffichageNoteDTO> GetNotesByAuteur(Guid? idAuteur, bool? asc, int? numPage, int? parPage, string texte, string tri) nouvelleNote.Id = note.IdNote;
{ return nouvelleNote;
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> 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;
} }
#endregion
/*
#region Services
/// <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="idCollaborateur">Id du collaborateur pour lesquelles les notes ont été écrites</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> 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> 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;
}
/// <summary>
/// Récupérer une note en fonction de son id
/// </summary>
/// <param name="idNote">Id de la note à récupérer</param>
/// <returns>L'objet DTO de la note correspondant à l'id passé en paramètre</returns>
public DetailsNoteDTO GetNoteById(long? idNote)
{
Note note = context.Note.Find(idNote);
if (note == null)
throw new NoteNotFoundException();
return NoteToDetailSDTO(note);
}
public IEnumerable<AffichageNoteDTO> GetNotes(bool? asc, int? numPage, int? parPage, string texte, string tri)
{
throw new NotImplementedException();
}
/// <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)
{
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> 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;
}
/// <summary>
/// Supprimer une note en fonction de son Id
/// </summary>
/// <param name="idNote">Id de la note à supprimer</param>
/// <returns>Si oui ou non la notea bien été supprimé</returns>
public void SupprimerNote(long? idNote)
{
Note note = context.Note.Find(idNote);
if (note == null)
throw new NoteNotFoundException();
context.Remove(note);
context.SaveChanges();
}
/// <summary>
/// Mettre à jour une note
/// </summary>
/// <param name="idNote">Id de la note à modifier</param>
/// <param name="note"></param>
/// <returns></returns>
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);
}
/// <summary>
/// Vérifier si un objet DetailsNoteDTO possède est valide pour ajout ou mise à jour
/// </summary>
/// <remarks> Un objet DetailsNoteDTO est valide si aucune de ses propriétés n'est à null</remarks>
/// <param name="note"></param>
/// <returns>true si l'objet est valide, false sinon</returns>
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
/// <summary> /// <summary>
/// Supprimer une note en fonction de son Id /// Vérfier si la note est valide
/// </summary> /// </summary>
/// <param name="idNote">Id de la note à supprimer</param> /// <param name="note">La note a vérifié</param>
/// <returns>Si oui ou non la notea bien été supprimé</returns> private void CheckNoteValide(DetailsNoteDTO note)
public void SupprimerNote(long? idNote)
{ {
Note note = context.Note.Find(idNote); //vérifier que la note n'est pas null
if (note == null) if (note == null)
throw new NoteNotFoundException(); throw new NoteInvalideException("Aucune note n'a été reçue");
context.Remove(note);
context.SaveChanges(); //vérfier que la note a bien un auteur
if (note.IdAuteur == null || !note.IdAuteur.HasValue)
throw new NoteInvalideException("Il impossible d'enregistrer sans donnée sur la personne qui l'a écrite");
//vérifier que la note est bien lié à un collaboarteur identifiable sur le serveur distant (avec une id)
if (note.Collaborateur == null || note.Collaborateur.Id == null || !note.Collaborateur.Id.HasValue)
throw new NoteInvalideException("Il est impossible d'enregistrer une note qui n'est pas lié à un collaborateur");
//vérifier que le titre de la note est valide
if (note.Titre == null || note.Titre == "" || note.Titre.Length < 3)
throw new NoteInvalideException("Vous devez saisir un titre d'au moins 3 caractères");
//vérifier que le texte de la note est valide
if(note.Texte == null || note.Texte == "" || note.Texte.Length < 3)
throw new NoteInvalideException("Vous devez saisir une note d'au moins 3 caractères");
} }
/// <summary> /// <summary>
/// Mettre à jour une note /// Vérifier que l'auteur de la note existe et est toujours présent dans l'entreprise
/// </summary> /// </summary>
/// <param name="idNote">Id de la note à modifier</param> /// <param name="referent">L'auteur de la note</param>
/// <param name="note"></param> private void CheckReferent(Collaborateur auteur)
/// <returns></returns>
public DetailsNoteDTO UpdateNote(long? idNote, DetailsNoteDTO note)
{ {
if (idNote != note.Id) if (auteur == null)
throw new NoteIdImcompatibleException(); throw new ReferentNotFoundException("Les informations de l'auteur de la note n'ont pas été trouvé");
if (!IsDetailsNoteValide(note)) if (auteur.DateDepart.HasValue)
throw new NoteInvalideException(); throw new CollaborateurPartiException("Vous ne pouvez pas créer ou modifier de note si vous avez quitté l'entreprise");
Note noteToUpdate = context.Note.Find(idNote);
noteToUpdate.Titre = note.Titre;
noteToUpdate.Texte = note.Texte;
noteToUpdate.DateMiseAJour = DateTime.Now;
context.SaveChanges();
return NoteToDetailSDTO(noteToUpdate);
} }
/// <summary> /// <summary>
/// Vérifier si un objet DetailsNoteDTO possède est valide pour ajout ou mise à jour /// Vérifier que le collaborateur concerné par la note existe et est toujorus présent dans l'entreprise
/// </summary> /// </summary>
/// <remarks> Un objet DetailsNoteDTO est valide si aucune de ses propriétés n'est à null</remarks> /// <param name="collaborateur">Le collaborateur concerné</param>
/// <param name="note"></param> private void CheckCollaborateur(Collaborateur collaborateur)
/// <returns>true si l'objet est valide, false sinon</returns>
private bool IsDetailsNoteValide(DetailsNoteDTO note)
{ {
return !(note == null || note.IdAuteur == null || note.Collaborateur == null || note.Collaborateur.Id == null || note.Titre == null || note.Texte == null) ; if (collaborateur == null)
throw new CollaborateurNotFoundException("Le collaborateur pour qui la note est écrite n'a pas été trouvé");
if (collaborateur.DateDepart.HasValue)
throw new CollaborateurPartiException("Vous ne pouvez pas créer ou modifier de note si vous avez quitté l'entreprise");
} }
#endregion
#endregion
#region ObjectToDTO #region ObjectToDTO
/// <summary> /// <summary>
/// Transformer un objet note en objet pour afficher un note dans dans un tableau /// Transformer un objet note en objet pour afficher un note dans dans un tableau
@ -199,9 +310,10 @@ 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 static AffichageNoteDTO NoteToAffichageDTO(Note note, ICollaborateurService collaborateurService) private AffichageNoteDTO NoteToAffichageDTO(Note note)
{ {
CollaborateurDTO collaborateur = collaborateurService.GetCollaborateurById(note.IdCollaborateur); //CollaborateurDTO collaborateur = collaborateurService.GetCollaborateurById(note.IdCollaborateur);
Collaborateur collaborateur = collaborateurApi.ChercherCollabId((Guid?)note.IdCollaborateur);
AffichageNoteDTO affichage = new AffichageNoteDTO() AffichageNoteDTO affichage = new AffichageNoteDTO()
{ {
Id = note.IdNote, Id = note.IdNote,
@ -228,7 +340,7 @@ namespace EPAServeur.Services
Titre = note.Titre, Titre = note.Titre,
Texte = note.Texte, Texte = note.Texte,
IdAuteur = note.IdAuteur, IdAuteur = note.IdAuteur,
Collaborateur = collaborateurService.GetCollaborateurById(note.IdCollaborateur) //Collaborateur = collaborateurService.GetCollaborateurById(note.IdCollaborateur)
}; };
return details; return details;
} }

Loading…
Cancel
Save