using API_Services; using DbContextLib; using Entities; using Model; namespace DbDataManager; public class DbManagerUser: IUserService { private readonly LibraryContext _context; public DbManagerUser(LibraryContext context) => this._context = context; public async Task> GetAll(int index, int count, UserOrderCriteria orderCriteria) { List users = new List(); switch(orderCriteria) { case UserOrderCriteria.None: users = _context.UserSet.Skip(index * count).Select(u => u.ToModel()).ToList(); break; case UserOrderCriteria.ByFirstName: users = _context.UserSet.Skip(index * count).OrderBy(u => u.Prenom).Select(u => u.ToModel()).ToList(); break; case UserOrderCriteria.ByLastName: users = _context.UserSet.Skip(index * count).OrderBy(u => u.Nom).Select(u => u.ToModel()).ToList(); break; default: users = _context.UserSet.Skip(index * count).Select(u => u.ToModel()).ToList(); break; } return await Task.FromResult(users.AsEnumerable()); } public async Task GetByPseudo(string pseudo) { var entity = _context.UserSet.FirstOrDefault(u => u.Pseudo == pseudo); if (entity == null) return await Task.FromResult(null); return await Task.FromResult(entity.ToModel()); } public async Task Create(User user) { var entity = new UserEntity() { Pseudo = user.Pseudo, Prenom = user.Prenom, Nom = user.Nom, Mdp = user.Mdp, Mail = user.Mail, Role = user.Role }; _context.UserSet.Add(entity); var result = await _context.SaveChangesAsync(); if (result == 0) return await Task.FromResult(null); return await Task.FromResult(entity.ToModel()); } public async Task Update(User user, string pseudo) { var entity = _context.UserSet.FirstOrDefault(u => u.Pseudo == pseudo); if (entity == null) return await Task.FromResult(null); entity.Mdp = user.Mdp; entity.Mail = user.Mail; entity.Role = user.Role; entity.Prenom = user.Prenom; entity.Nom = user.Nom; var result = await _context.SaveChangesAsync(); if (result == 0) return await Task.FromResult(null); return await Task.FromResult(entity.ToModel()); } public async Task Delete(string pseudo) { var entity = _context.UserSet.FirstOrDefault(u => u.Pseudo == pseudo); if (entity == null) return await Task.FromResult(null); _context.UserSet.Remove(entity); var result = await _context.SaveChangesAsync(); if (result == 0) return await Task.FromResult(null); return await Task.FromResult(entity.ToModel()); } public async Task> GetAllArticleUsers() { var entities = _context.ArticleUserSet.ToList(); List users = new List(); foreach( var articleUser in entities) { var user = _context.UserSet.FirstOrDefault(u => u.Pseudo.Equals(articleUser.UserEntityPseudo)); if (user != null) users.Add(user); } if (users == null) return await Task.FromResult>(null); return await Task.FromResult(users.Select(u => u.ToModel()).AsEnumerable()); } public async Task> GetArticleUser(string pseudo) { var entities = _context.ArticleUserSet.Where(a => a.UserEntityPseudo.Equals(pseudo)); List articles = new List(); foreach (var article in entities) { var art = _context.ArticleSet.FirstOrDefault(a => a.Id.Equals(article.ArticleEntityId)); if (art != null) articles.Add(art); } if (articles == null) return await Task.FromResult>(null); return await Task.FromResult(articles.Select(a => a.ToModel()).AsEnumerable()); } public async Task CreateArticleUser(ArticleUserEntity articleUser) { var result = await GetByPseudo(articleUser.UserEntityPseudo); if (result == null) return await Task.FromResult(false); var entity = new ArticleUserEntity() { ArticleEntityId = articleUser.ArticleEntityId, UserEntityPseudo = articleUser.UserEntityPseudo }; if (entity == null) return await Task.FromResult(false); _context.ArticleUserSet.Add(entity); await _context.SaveChangesAsync(); return await Task.FromResult(true); } public async Task DeleteArticleUser(string pseudo, long id) { var entity = _context.ArticleUserSet.FirstOrDefault(a => a.UserEntityPseudo.Equals(pseudo) && a.ArticleEntityId.Equals(id)); if (entity == null) return await Task.FromResult(false); _context.ArticleUserSet.Remove(entity); await _context.SaveChangesAsync(); return await Task.FromResult(true); } public async Task UpdateArticleUser(ArticleUserEntity articleUser) { var entity = _context.ArticleUserSet.FirstOrDefault(a => a.UserEntityPseudo.Equals(articleUser.UserEntityPseudo)); if (entity == null) return await Task.FromResult(false); entity.ArticleEntityId = articleUser.ArticleEntityId; entity.UserEntityPseudo = articleUser.UserEntityPseudo; await _context.SaveChangesAsync(); return await Task.FromResult(true); } }