using MediatR; using Mws.Application.Common; namespace Mws.Application.Roles; public record DeleteRoleCommand(Guid Id) : IRequest; public class DeleteRoleHandler(IUnitOfWork uow) : IRequestHandler { public async Task Handle(DeleteRoleCommand command, CancellationToken ct) { var role = await uow.Roles.GetByIdAsync(command.Id, ct) ?? throw new NotFoundException("Role not found"); if (role.IsSystem) { throw new BadRequestException("Cannot delete a system role"); } if (await uow.Users.ExistsByRoleIdAsync(command.Id, ct)) { throw new BadRequestException("Cannot delete a role that is assigned to accounts"); } uow.Roles.Remove(role); await uow.SaveChangesAsync(ct); } }