using EPAServeur.Context; using EPAServeur.IServices; using EPAServeur.Models.Notes; using IO.Swagger.DTO; using IO.Swagger.ModelCollaborateur; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; namespace EPAServeur.Services { public class NoteService : INoteService { private readonly ICollaborateurService collaborateurService; private readonly EpContext context; public NoteService(ICollaborateurService _collaborateurService, EpContext _context) { collaborateurService = _collaborateurService; context = _context; } public Note AjouterNote(DetailsNoteDTO nouvelleNote) { if (!IsDetailsNoteValide(nouvelleNote)) return null; Note note = DetailsNoteDTOToNouvelleNote(nouvelleNote); context.Note.Add(note); context.SaveChanges(); return note; } public IEnumerable GetNotesByCollaborateur(Guid? idAuteur, Guid? idCollaborateur, bool? asc, int? numPage, int? parPage, string texte, string tri) { if (collaborateurService.GetProfilById(idAuteur) == null || collaborateurService.GetProfilById(idCollaborateur) == null) return null; 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.Collaborateur.ToLower().Contains(texte) || a.Titre.ToLower().Contains(texte) select a).Skip(skip).Take(take); return AffichageNoteDTO; } public DetailsNoteDTO GetNoteById(int? idNote) { Note note = context.Note.Find(idNote); if (note == null) return null; return NoteToDetailSDTO(note); /*return (from n in context.Note where n.Id == idNote select NoteToDetailSDTO(n)).ToList().FirstOrDefault();*/ } public IEnumerable GetNotes(bool? asc, int? numPage, int? parPage, string texte, string tri) { throw new NotImplementedException(); } public IEnumerable GetNotesByAuteur(Guid? idAuteur, bool? asc, int? numPage, int? parPage, string texte, string tri) { if (collaborateurService.GetCollaborateurById(idAuteur) == null) return null; 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; } public bool SupprimerNote(int? idNote) { Note note = context.Note.Find(idNote); if (note == null) return false; context.Remove(note); context.SaveChanges(); return true; } public Note UpdateNote(int? idNote, DetailsNoteDTO note) { if (!IsDetailsNoteValide(note)) return null; Note noteToUpdate = context.Note.Find(idNote); if (noteToUpdate == null) return AjouterNote(note); noteToUpdate.Titre = note.Titre; noteToUpdate.Texte = note.Texte; noteToUpdate.DateUpdate = DateTime.Now; context.SaveChanges(); return noteToUpdate; } private bool IsDetailsNoteValide(DetailsNoteDTO note) { return !(note == null || note.IdAuteur == null || note.Collaborateur == null || note.Collaborateur.Id == null || note.Titre == null || note.Texte == null) ; } //Object to DTO private static AffichageNoteDTO NoteToAffichageDTO(Note note, ICollaborateurService collaborateurService) { CollaborateurDTO collaborateur = collaborateurService.GetCollaborateurById(note.IdCollaborateur); AffichageNoteDTO affichage = new AffichageNoteDTO() { Id = note.Id, IdCollaborateur = note.IdCollaborateur, Collaborateur = collaborateur.Prenom + collaborateur.Nom, Titre = note.Titre, DateMiseAjour = note.DateUpdate }; return affichage; } private DetailsNoteDTO NoteToDetailSDTO(Note note) { DetailsNoteDTO details = new DetailsNoteDTO() { Id = note.Id, DateCreation = note.DateCreation, DateMiseAjour = note.DateUpdate, Titre = note.Titre, Texte = note.Texte, IdAuteur = note.IdAuteur, Collaborateur = collaborateurService.GetCollaborateurById(note.IdCollaborateur) }; return details; } //DTO to Object private Note DetailsNoteDTOToNouvelleNote(DetailsNoteDTO detailsNoteDTO) { Note note = new Note() { IdAuteur = detailsNoteDTO.IdAuteur.Value, IdCollaborateur = detailsNoteDTO.Collaborateur.Id.Value, Texte = detailsNoteDTO.Texte, Titre = detailsNoteDTO.Titre, DateCreation = DateTime.Now, DateUpdate = DateTime.Now }; return note; } } }