using Microsoft.EntityFrameworkCore; using mws.backend.dotnet.application.Common; using mws.backend.dotnet.application.Common.Repositories; using mws.backend.dotnet.domain.Roles; namespace mws.backend.dotnet.infrastructure.Persistence.Repositories; public class RoleRepository(AppDbContext db) : RepositoryBase(db), IRoleRepository { public Task> GetAllWithPermissionsAsync(int page, int pageSize, CancellationToken ct = default) => Set.Include(r => r.Permissions).OrderBy(r => r.Name).ToPagedResultAsync(page, pageSize, ct); public Task GetByIdWithPermissionsAsync(Guid id, CancellationToken ct = default) => Set.Include(r => r.Permissions).FirstOrDefaultAsync(r => r.Id == id, ct); public Task GetByIdAsync(Guid id, CancellationToken ct = default) => Set.FirstOrDefaultAsync(r => r.Id == id, ct); public Task ExistsByNameAsync(string name, Guid? excludeId, CancellationToken ct = default) => Set.AnyAsync(r => r.Name == name && (excludeId == null || r.Id != excludeId), ct); public Task GetPermissionAsync(Guid roleId, string screen, CancellationToken ct = default) => Db.RolePermissions.FirstOrDefaultAsync(p => p.RoleId == roleId && p.Screen == screen, ct); public Task> GetPermissionsAsync(Guid roleId, CancellationToken ct = default) => Db.RolePermissions.Where(p => p.RoleId == roleId).ToDictionaryAsync(p => p.Screen, ct); public Task> GetPermissionsForRolesAsync(IEnumerable roleIds, CancellationToken ct = default) => Db.RolePermissions.Where(p => roleIds.Contains(p.RoleId)).ToListAsync(ct); public void RemovePermissions(IEnumerable permissions) => Db.RolePermissions.RemoveRange(permissions); }