using DigitalData.Core.Infrastructure; using DigitalData.UserManager.Domain.Entities; using DigitalData.UserManager.Infrastructure.Contracts; using Microsoft.EntityFrameworkCore; namespace DigitalData.UserManager.Infrastructure.Repositories { public class UserRepository : CRUDRepository, IUserRepository where TDbContext : DbContext { private IModuleOfUserRepository _moduleOfUserRepo; private IGroupOfUserRepository _groupOfUserRepo; public UserRepository(TDbContext dbContext, IModuleOfUserRepository moduleOfUserRepo, IGroupOfUserRepository groupOfUserRepo) : base(dbContext) { _moduleOfUserRepo = moduleOfUserRepo; _groupOfUserRepo = groupOfUserRepo; } public async Task> ReadByModuleIdAsync(int moduleId) { var mous = _moduleOfUserRepo.ReadByModuleId(moduleId).Select(mos => mos.UserId); return await _dbSet.Where(u => mous.Contains(u.Guid)).ToListAsync(); } public async Task> ReadByGroupIdAsync(int groupId) { var gous = _groupOfUserRepo.ReadByGroupId(groupId).Select(gou => gou.UserId); return await _dbSet.Where(u => gous.Contains(u.Guid)).ToListAsync(); } public async Task> ReadUnassignedByModuleIdAsync(int moduleId) { var mous = _moduleOfUserRepo.ReadByModuleId(moduleId).Select(mos => mos.UserId); return await _dbSet.Where(u => !mous.Contains(u.Guid)).ToListAsync(); } public async Task> ReadUnassignedByGroupIdAsync(int groupId) { var gous = _groupOfUserRepo.ReadByGroupId(groupId).Select(gou => gou.UserId); return await _dbSet.Where(u => !gous.Contains(u.Guid)).ToListAsync(); } public async Task ReadByUsernameAsync(string username) { return await _dbSet.Where(user => user.Username == username).FirstOrDefaultAsync(); } } }