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>
41 lines
1.1 KiB
C#
41 lines
1.1 KiB
C#
using AutoMapper;
|
|
using MediatR;
|
|
using Mws.Application.Common;
|
|
using Mws.Domain.Roles;
|
|
|
|
namespace Mws.Application.Roles;
|
|
|
|
public record CreateRoleCommand(SaveRoleRequest Request) : IRequest<RoleDto>;
|
|
|
|
public class CreateRoleHandler(IUnitOfWork uow, IMapper mapper) : IRequestHandler<CreateRoleCommand, RoleDto>
|
|
{
|
|
public async Task<RoleDto> Handle(CreateRoleCommand command, CancellationToken ct)
|
|
{
|
|
var name = command.Request.Name.Trim();
|
|
if (string.IsNullOrWhiteSpace(name))
|
|
{
|
|
throw new BadRequestException("Role name is required");
|
|
}
|
|
|
|
if (await uow.Roles.ExistsByNameAsync(name, null, ct))
|
|
{
|
|
throw new BadRequestException("Role name already exists");
|
|
}
|
|
|
|
var now = DateTime.UtcNow;
|
|
var role = new Role
|
|
{
|
|
Id = Guid.NewGuid(),
|
|
Name = name,
|
|
IsSystem = false,
|
|
CreatedAt = now,
|
|
UpdatedAt = now,
|
|
Permissions = RolePermissionBuilder.Build(command.Request.Permissions),
|
|
};
|
|
|
|
uow.Roles.Add(role);
|
|
await uow.SaveChangesAsync(ct);
|
|
return mapper.Map<RoleDto>(role);
|
|
}
|
|
}
|