Convert Roles module to MediatR commands/queries

Replaces IRoleService/RoleService. The permission-builder logic moves
to a shared RolePermissionBuilder static helper used by both the
create and update handlers. RolesController keeps its inline
IPermissionService checks unchanged.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-14 08:42:43 +07:00
co-authored by Claude Sonnet 5
parent 50faf9052c
commit 3a926e8693
10 changed files with 173 additions and 136 deletions
+17
View File
@@ -0,0 +1,17 @@
using AutoMapper;
using MediatR;
using Mws.Application.Common;
namespace Mws.Application.Roles;
public record GetRoleQuery(Guid Id) : IRequest<RoleDto>;
public class GetRoleHandler(IUnitOfWork uow, IMapper mapper) : IRequestHandler<GetRoleQuery, RoleDto>
{
public async Task<RoleDto> Handle(GetRoleQuery query, CancellationToken ct)
{
var role = await uow.Roles.GetByIdWithPermissionsAsync(query.Id, ct)
?? throw new NotFoundException("Role not found");
return mapper.Map<RoleDto>(role);
}
}
+16
View File
@@ -0,0 +1,16 @@
using AutoMapper;
using MediatR;
using Mws.Application.Common;
namespace Mws.Application.Roles;
public record GetRolesQuery : IRequest<List<RoleDto>>;
public class GetRolesHandler(IUnitOfWork uow, IMapper mapper) : IRequestHandler<GetRolesQuery, List<RoleDto>>
{
public async Task<List<RoleDto>> Handle(GetRolesQuery query, CancellationToken ct)
{
var roles = await uow.Roles.GetAllWithPermissionsAsync(ct);
return mapper.Map<List<RoleDto>>(roles);
}
}