using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Entity; using Shared; namespace Contextlib { public class DbUsersManager : IUserService { private WTFContext _context; private GenericRepository _repo; public DbUsersManager( WTFContext context ) { _context = context ?? throw new ArgumentNullException(nameof(context), "Database context cannot be null."); _repo = new GenericRepository(_context); } public async Task AddUser(Users user) { if (user == null) { throw new ArgumentNullException(nameof(user), "user cannot be null."); } _repo.Insert(user); await _context.SaveChangesAsync(); } public async Task CountUser() { return _repo.Count(); } public async Task ExistEmail(string email) { IQueryable users = _context.users.Where(u=>u.Email == email); return users != null; } public async Task ExistUsername(string username) { IQueryable users = _context.users.Where(u => u.UserName == username); return users != null; } public async Task> GetAllUser() { List users = _repo.GetItems(0,_repo.Count(),[nameof(Users.Images)]).ToList(); return new PaginationResult(users.Count,0,users.Count,users); } public async Task GetHashPassword(string username) { Users? user = _context.users.Where(u=>u.UserName == username).FirstOrDefault(); if (user != null) { return ""; } return user.Password; } public async Task GetLastUserId() { PaginationResult users = await GetAllUser(); int lastUserId = 0; foreach (Users user in users.items) { if (user.Id >= lastUserId) { lastUserId = user.Id + 1; } } return lastUserId; } public async Task> GetSomeUser(int index, int pageSize) { List users = _repo.GetItems(index, pageSize, [nameof(Users.Images)]).ToList(); return new PaginationResult(users.Count, index, pageSize, users); } public async Task GetUserByEmail(string email) { var user = _repo.GetItems(item => item.Email == email, 0, 1, [nameof(Character.Images)]).FirstOrDefault(); if (user == null) { throw new KeyNotFoundException($"Error : No user found with the email: {email}."); } return user; } public async Task GetUserById(int id) { Users? user =_repo.GetById(id, item => item.Id == id, nameof(Users.Images)); if (user == null) { throw new KeyNotFoundException($"Error : No users found with the ID: {id}."); } return user; } public async Task GetUserByUsername(string username) { var user = _repo.GetItems(item => item.UserName == username, 0, 1, [nameof(Character.Images)]).FirstOrDefault(); if (user == null) { throw new KeyNotFoundException($"Error : No user found with the name: {username}."); } return user; } public async Task RemoveUser(Users user) { _repo.Delete(user); await _context.SaveChangesAsync(); } public async Task SetAdminRole(bool isAdmin) { throw new NotImplementedException(); } public async Task UpdateUser(int userId, Users user) { Users? u = _repo.GetById(userId); if (u != null) { bool change = false; if (user.IdImage != 0) { u.IdImage = user.IdImage; change = true; } if (user.UserName != null) { u.UserName = user.UserName; change = true; } if (user.Email != null) { u.Email = user.Email; change = true; } if (user.Password != null) { u.Password = user.Password; change = true; } _repo.Update(u); if (change)_context.SaveChanges(); } return u; } } }