diff --git a/DigitalData.UserManager.Domain/Entities/GroupOfUser.cs b/DigitalData.UserManager.Domain/Entities/GroupOfUser.cs index 82e3f64..0a92529 100644 --- a/DigitalData.UserManager.Domain/Entities/GroupOfUser.cs +++ b/DigitalData.UserManager.Domain/Entities/GroupOfUser.cs @@ -1,5 +1,4 @@ -using System.ComponentModel; -using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace DigitalData.UserManager.Domain.Entities diff --git a/DigitalData.UserManager.Infrastructure/Contracts/IGroupOfUserRepository.cs b/DigitalData.UserManager.Infrastructure/Contracts/IGroupOfUserRepository.cs index 175d745..49d07b5 100644 --- a/DigitalData.UserManager.Infrastructure/Contracts/IGroupOfUserRepository.cs +++ b/DigitalData.UserManager.Infrastructure/Contracts/IGroupOfUserRepository.cs @@ -18,5 +18,11 @@ namespace DigitalData.UserManager.Infrastructure.Contracts Task> ReadByUsernameAsync(string username); Task> ReadByUserIdAsync(int userId); + + // merge all GroupOfUserRepository-methods conditionally under this method + Task> ReadAsync( + bool readOnly = true, + bool withGroup = true, bool withUser = true, + int? id = null, int? groupId = null, int? userId = null, string? username = null); } } \ No newline at end of file diff --git a/DigitalData.UserManager.Infrastructure/Repositories/GroupOfUserRepository.cs b/DigitalData.UserManager.Infrastructure/Repositories/GroupOfUserRepository.cs index 313b965..a49e728 100644 --- a/DigitalData.UserManager.Infrastructure/Repositories/GroupOfUserRepository.cs +++ b/DigitalData.UserManager.Infrastructure/Repositories/GroupOfUserRepository.cs @@ -42,5 +42,33 @@ namespace DigitalData.UserManager.Infrastructure.Repositories public async Task> ReadByUsernameAsync(string username) => await ReadByUsername(username).ToListAsync(); public async Task> ReadByUserIdAsync(int userId) => await ReadByUserId(userId).ToListAsync(); + + public async Task> ReadAsync( + bool readOnly = true, + bool withGroup = true, bool withUser = true, + int? id = null, int? groupId = null, int? userId = null, string? username = null) + { + var query = readOnly ? _dbSet.AsNoTracking() : _dbSet.AsQueryable(); + + if (withGroup) + query = query.Include(gou => gou.Group); + + if (withUser) + query = query.Include(gou => gou.User); + + if (id is not null) + query = query.Where(gou => gou.Id == id); + + if (groupId is not null) + query = query.Where(gou => gou.GroupId == groupId); + + if (userId is not null) + query = query.Where(gou => gou.UserId == userId); + + if (username is not null) + query = query.Where(gou => gou.User!.Username == username); + + return await query.ToListAsync(); + } } } \ No newline at end of file diff --git a/DigitalData.UserManager.Infrastructure/Repositories/UserRepository.cs b/DigitalData.UserManager.Infrastructure/Repositories/UserRepository.cs index f5f82d2..e5bab86 100644 --- a/DigitalData.UserManager.Infrastructure/Repositories/UserRepository.cs +++ b/DigitalData.UserManager.Infrastructure/Repositories/UserRepository.cs @@ -8,8 +8,8 @@ namespace DigitalData.UserManager.Infrastructure.Repositories public class UserRepository : CRUDRepository, IUserRepository where TDbContext : DbContext, IUserManagerDbContext { - private IModuleOfUserRepository _moduleOfUserRepo; - private IGroupOfUserRepository _groupOfUserRepo; + private readonly IModuleOfUserRepository _moduleOfUserRepo; + private readonly IGroupOfUserRepository _groupOfUserRepo; public UserRepository(TDbContext dbContext, IModuleOfUserRepository moduleOfUserRepo, IGroupOfUserRepository groupOfUserRepo) : base(dbContext, dbContext.Users) { _moduleOfUserRepo = moduleOfUserRepo;