@ -2,6 +2,7 @@
using EPAServeur.Exceptions ;
using EPAServeur.IServices ;
using EPAServeur.Models.Notes ;
using IO.Swagger.ApiCollaborateur ;
using IO.Swagger.DTO ;
using IO.Swagger.ModelCollaborateur ;
using System ;
@ -18,37 +19,93 @@ namespace EPAServeur.Services
public class NoteService : INoteService
{
#region Variables
/ *
/// <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>
private readonly ICollaborateurService collaborateurService ;
* /
private readonly ICollaborateurApi collaborateurApi ;
/// <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 )
public NoteService ( ICollaborateurApi _ collaborateurApi , EpContext _ context )
{
collaborateurService = _ collaborateurService ;
//collaborateurService = _collaborateurService;
collaborateurApi = _ collaborateurApi ;
context = _ context ;
}
# endregion
#region Services Sync
/// <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>
/// <returns>La nouvelle note ajouté </returns>
public DetailsNoteDTO AjouterNote ( DetailsNoteDTO nouvelleNote )
{
if ( ! IsDetailsNoteValide ( nouvelleNote ) )
throw new NoteInvalideException ( ) ;
//vérifier qu'il n'y a aucune valeur null
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 ) ;
//ajouter la note et sauvegarder
context . Note . Add ( note ) ;
context . SaveChanges ( ) ;
return NoteToDetailSDTO ( note ) ;
nouvelleNote . Id = note . IdNote ;
return nouvelleNote ;
}
# endregion
#region Services Async
/// <summary>
/// Ajouter une nouvelle note dans la base de données de manière async
/// </summary>
/// <param name="nouvelleNote">La nouvelle note a ajouté en base</param>
/// <returns>La nouvelle note ajouté</returns>
public async Task < DetailsNoteDTO > AjouterNoteAsync ( DetailsNoteDTO nouvelleNote )
{
//vérifier qu'il n'y a aucune valeur null
CheckNoteValide ( nouvelleNote ) ;
//vérifier que le référent existe
Collaborateur auteur = await collaborateurApi . ChercherCollabIdAsync ( ( Guid ? ) nouvelleNote . IdAuteur ) ;
CheckReferent ( auteur ) ;
//vérifier que le collaborateur existe
Collaborateur collaborateur = await collaborateurApi . ChercherCollabIdAsync ( nouvelleNote . Collaborateur . Id ) ;
CheckCollaborateur ( collaborateur ) ;
//transformer la note DTO en Note
Note note = DetailsNoteDTOToNouvelleNote ( nouvelleNote ) ;
//ajouter la note et sauvegarder
await context . Note . AddAsync ( note ) ;
await context . SaveChangesAsync ( ) ;
nouvelleNote . Id = note . IdNote ;
return nouvelleNote ;
}
# endregion
/ *
#region Services
/// <summary>
@ -169,7 +226,7 @@ namespace EPAServeur.Services
{
if ( idNote ! = note . Id )
throw new NoteIdImcompatibleException ( ) ;
if ( ! IsDetails NoteValide( note ) )
if ( ! Check NoteValide( note ) )
throw new NoteInvalideException ( ) ;
Note noteToUpdate = context . Note . Find ( idNote ) ;
noteToUpdate . Titre = note . Titre ;
@ -185,13 +242,67 @@ namespace EPAServeur.Services
/// <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 IsDetails NoteValide( DetailsNoteDTO note )
private bool Check NoteValide( 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>
/// Vérfier si la note est valide
/// </summary>
/// <param name="note">La note a vérifié</param>
private void CheckNoteValide ( DetailsNoteDTO note )
{
//vérifier que la note n'est pas null
if ( note = = null )
throw new NoteInvalideException ( "Aucune note n'a été reçue" ) ;
//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>
/// Vérifier que l'auteur de la note existe et est toujours présent dans l'entreprise
/// </summary>
/// <param name="referent">L'auteur de la note</param>
private void CheckReferent ( Collaborateur auteur )
{
if ( auteur = = null )
throw new ReferentNotFoundException ( "Les informations de l'auteur de la note n'ont pas été trouvé" ) ;
if ( auteur . DateDepart . HasValue )
throw new CollaborateurPartiException ( "Vous ne pouvez pas créer ou modifier de note si vous avez quitté l'entreprise" ) ;
}
/// <summary>
/// Vérifier que le collaborateur concerné par la note existe et est toujorus présent dans l'entreprise
/// </summary>
/// <param name="collaborateur">Le collaborateur concerné</param>
private void CheckCollaborateur ( Collaborateur collaborateur )
{
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
#region ObjectToDTO
/// <summary>
/// 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="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 collaborateurServic e )
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 ( )
{
Id = note . IdNote ,
@ -228,7 +340,7 @@ namespace EPAServeur.Services
Titre = note . Titre ,
Texte = note . Texte ,
IdAuteur = note . IdAuteur ,
Collaborateur = collaborateurService . GetCollaborateurById ( note . IdCollaborateur )
//Collaborateur = collaborateurService.GetCollaborateurById(note.IdCollaborateur )
} ;
return details ;
}