using IO.Swagger.Models; using ServeurCollaborateur.IService; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text.Json; using Newtonsoft.Json; using System.Threading.Tasks; namespace ServeurCollaborateur.Service { public class CollaborateurService : ICollaborateurService { private readonly string fileName = "./collaborateurs.json"; private readonly Dictionary collaborateurs; public CollaborateurService() { string jsonString = File.ReadAllText(fileName); IEnumerable _collaborateurs = JsonConvert.DeserializeObject>(jsonString); collaborateurs = new Dictionary(); foreach(Collaborateur c in _collaborateurs) { collaborateurs.Add(c.Id, c); Console.WriteLine(c.Nom + " " + c.Prenom); } } public Collaborateur GetCollaborateurById(Guid? id) { bool trouve = collaborateurs.TryGetValue(id, out Collaborateur collaborateur); if (!trouve) { throw new Exception("Collaborateur not found"); } return collaborateur; } public Collaborateur GetCollaborateurByMail(string mail) { Collaborateur collaborateur = collaborateurs.Values.Where(c => c.MailApside.Equals(mail)).FirstOrDefault(); if (collaborateur == null) { throw new Exception("Collaborateur not found"); } return collaborateur; } public IEnumerable GetCollaborateurs(List collabsId, bool? ancienCollaborateur, List roles, List buIds) { IEnumerable res_collaborateurs; if (collabsId != null && collabsId.Count > 0) { return collaborateurs.Values.Where(c => collabsId.Contains(c.Id.Value)); } else { res_collaborateurs = collaborateurs.Values; } if(!ancienCollaborateur.HasValue || !ancienCollaborateur.Value) { res_collaborateurs = res_collaborateurs.Where(c => c.DateDepart == null); } if (roles != null && roles.Count > 0) { res_collaborateurs = res_collaborateurs.Where(c => HasRole(c, roles)); } if (buIds != null && buIds.Count > 0) { res_collaborateurs = res_collaborateurs.Where(c => buIds.Contains(c.BusinessUnit.Id)); } return res_collaborateurs; } private bool HasRole(Collaborateur c, List roles) { foreach (Fonction fonction in c.Fonctions) { if (roles.Contains(fonction.Intitule)) return true; } return false; } } }