@ -11,17 +11,34 @@ using System.Threading.Tasks;
namespace EPAServeur.Services
{
/// <summary>
/// Service permettant de gérer les notes (ajout, récupération, mise à jour, suppression)
/// </summary>
public class NoteService : INoteService
{
#region Variables
/// <summary>
/// API pour accéder aux données collaborateur en passant par le service collaborateur
/// </summary>
private readonly ICollaborateurService collaborateurService ;
/// <summary>
/// Contexte pour interagir avec la base de données MySQL du serveur EP
/// </summary>
private readonly EpContext context ;
# endregion
#region Constructeurs
public NoteService ( ICollaborateurService _ collaborateurService , EpContext _ context )
{
collaborateurService = _ collaborateurService ;
context = _ context ;
}
# endregion
/// <summary>
/// Ajouter une nouvelle note dans la base de données
/// </summary>
/// <param name="nouvelleNote">La nouvelle note a ajouté en base</param>
/// <returns></returns>
public Note AjouterNote ( DetailsNoteDTO nouvelleNote )
{
if ( ! IsDetailsNoteValide ( nouvelleNote ) )
@ -32,6 +49,18 @@ namespace EPAServeur.Services
return note ;
}
#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 )
{
if ( collaborateurService . GetProfilById ( idAuteur ) = = null | | collaborateurService . GetProfilById ( idCollaborateur ) = = null )
@ -46,11 +75,16 @@ namespace EPAServeur.Services
where n . IdAuteur = = idAuteur & & n . IdCollaborateur = = idCollaborateur
select NoteToAffichageDTO ( n , collaborateurService ) ) ;
AffichageNoteDTO = ( from a in AffichageNoteDTO
where a . Collaborateur . ToLower ( ) . Contains ( texte ) | | a . Titre . ToLower ( ) . Contains ( texte )
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 ) ;
@ -67,6 +101,16 @@ namespace EPAServeur.Services
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 )
@ -93,6 +137,11 @@ namespace EPAServeur.Services
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 bool SupprimerNote ( long? idNote )
{
Note note = context . Note . Find ( idNote ) ;
@ -103,12 +152,18 @@ namespace EPAServeur.Services
return true ;
}
/// <summary>
/// Mettre à jour une note
/// </summary>
/// <param name="idNote">Id de la note à modifier</param>
/// <param name="note"></param>
/// <returns></returns>
public Note UpdateNote ( long? idNote , DetailsNoteDTO note )
{
if ( ! IsDetailsNoteValide ( note ) )
return null ;
Note noteToUpdate = context . Note . Find ( idNote ) ;
if ( noteToUpdate = = null )
if ( noteToUpdate = = null | | note . Id ! = noteToUpdate . Id )
return AjouterNote ( note ) ;
noteToUpdate . Titre = note . Titre ;
noteToUpdate . Texte = note . Texte ;
@ -117,13 +172,26 @@ namespace EPAServeur.Services
return 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 IsDetailsNoteValide ( DetailsNoteDTO note )
{
return ! ( note = = null | | note . IdAuteur = = null | | note . Collaborateur = = null | | note . Collaborateur . Id = = null | | note . Titre = = null | | note . Texte = = null ) ;
}
# endregion
//Object to DTO
#region ObjectToDTO
/// <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 static AffichageNoteDTO NoteToAffichageDTO ( Note note , ICollaborateurService collaborateurService )
{
CollaborateurDTO collaborateur = collaborateurService . GetCollaborateurById ( note . IdCollaborateur ) ;
@ -138,6 +206,11 @@ namespace EPAServeur.Services
return affichage ;
}
/// <summary>
/// Transformatino d'une note en DetailsNoteDTO
/// </summary>
/// <param name="note">Note à transformer</param>
/// <returns>Note transformer en DetailsNoteDTO</returns>
private DetailsNoteDTO NoteToDetailSDTO ( Note note )
{
DetailsNoteDTO details = new DetailsNoteDTO ( )
@ -152,8 +225,15 @@ namespace EPAServeur.Services
} ;
return details ;
}
# endregion
//DTO to Object
#region DTOToObject
/// <summary>
/// Transformer l'objet DTO d'une note en note
/// </summary>
/// <remarks>En général, de base, cette méthode est prévue pour être utilisée qu'à la création d'une nouvelle note, dateCreation et dateUpdate sont donc initialisée à ce moment là</remarks>
/// <param name="detailsNoteDTO">Objet DTO à transformer en note</param>
/// <returns>L'objet DTO transformé en note</returns>
private Note DetailsNoteDTOToNouvelleNote ( DetailsNoteDTO detailsNoteDTO )
{
Note note = new Note ( )
@ -167,5 +247,6 @@ namespace EPAServeur.Services
} ;
return note ;
}
# endregion
}
}