Files
mws.backend.dotnet/application/Permissions/Commands/CreateRole.cs
T
2026-09-20 16:21:15 +07:00

47 lines
1.4 KiB
C#

using AutoMapper;
using MediatR;
using mws.backend.dotnet.application.Audit;
using mws.backend.dotnet.application.Common;
using mws.backend.dotnet.domain.Roles;
namespace mws.backend.dotnet.application.Permissions;
public record CreateRoleCommand(SaveRoleRequest Request) : IRequest<RoleDto>, IAuditableRequest
{
public string Action => "Role.Create";
public string EntityType => "Role";
public string? EntityName => Request.Name;
}
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);
}
}