2026-08-14 08:42:30 +07:00
|
|
|
using AutoMapper;
|
|
|
|
|
using MediatR;
|
2026-08-19 23:25:08 +07:00
|
|
|
using mws.backend.dotnet.application.Common;
|
|
|
|
|
using mws.backend.dotnet.domain.Roles;
|
2026-08-14 08:42:30 +07:00
|
|
|
|
2026-08-19 23:25:08 +07:00
|
|
|
namespace mws.backend.dotnet.application.Permissions;
|
2026-08-14 08:42:30 +07:00
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|