diff --git a/src/Imprink.Application/Users/DeleteUserRoleHandler.cs b/src/Imprink.Application/Users/DeleteUserRoleHandler.cs new file mode 100644 index 0000000..ca536f8 --- /dev/null +++ b/src/Imprink.Application/Users/DeleteUserRoleHandler.cs @@ -0,0 +1,29 @@ +using Imprink.Application.Users.Dtos; +using Imprink.Domain.Entities.Users; +using MediatR; + +namespace Imprink.Application.Users; + +public record DeleteUserRoleCommand(string Sub, Guid RoleId) : IRequest; + +public class DeleteUserRoleHandler(IUnitOfWork uw) : IRequestHandler +{ + public async Task Handle(DeleteUserRoleCommand request, CancellationToken cancellationToken) + { + if (!await uw.UserRepository.UserExistsAsync(request.Sub, cancellationToken)) return null; + + var userRole = new UserRole + { + UserId = request.Sub, + RoleId = request.RoleId + }; + + var removedRole = await uw.UserRoleRepository.RemoveUserRoleAsync(userRole, cancellationToken); + + return new UserRoleDto + { + UserId = removedRole.UserId, + RoleId = removedRole.RoleId + }; + } +} \ No newline at end of file diff --git a/src/Imprink.WebApi/Controllers/Users/UserRoleController.cs b/src/Imprink.WebApi/Controllers/Users/UserRoleController.cs index f2090ed..62da421 100644 --- a/src/Imprink.WebApi/Controllers/Users/UserRoleController.cs +++ b/src/Imprink.WebApi/Controllers/Users/UserRoleController.cs @@ -11,7 +11,7 @@ namespace Imprink.WebApi.Controllers.Users; public class UserRoleController(IMediator mediator) : ControllerBase { [Authorize] - [HttpGet("me")] + [HttpGet("/me")] public async Task GetMyRoles() { var claims = User.Claims as Claim[] ?? User.Claims.ToArray(); @@ -23,7 +23,7 @@ public class UserRoleController(IMediator mediator) : ControllerBase } [Authorize(Roles = "Admin")] - [HttpPost("set")] + [HttpPost("/set")] public async Task SetUserRole(SetUserRoleCommand command) { var userRole = await mediator.Send(command); @@ -33,4 +33,16 @@ public class UserRoleController(IMediator mediator) : ControllerBase return Ok(userRole); } + + [Authorize(Roles = "Admin")] + [HttpPost("/unset")] + public async Task UnsetUserRole(DeleteUserRoleCommand command) + { + var userRole = await mediator.Send(command); + + if (userRole == null) + return BadRequest(); + + return Ok(userRole); + } } \ No newline at end of file