using Microsoft.EntityFrameworkCore; using Mws.Application.Common.Repositories; using Mws.Domain.Roles; namespace Mws.Infrastructure.Persistence.Repositories; public class RoleRepository(AppDbContext db) : RepositoryBase(db), IRoleRepository { public Task> GetAllWithPermissionsAsync(CancellationToken ct = default) => Set.Include(r => r.Permissions).OrderBy(r => r.Name).ToListAsync(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 void RemovePermissions(IEnumerable permissions) => Db.RolePermissions.RemoveRange(permissions); }