223 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			223 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using Asp.Versioning;
 | |
| using Core.Thalos.Application.UseCases.Roles.Input;
 | |
| using Core.Thalos.Application.UseCases.Roles.Ports;
 | |
| using Core.Thalos.BuildingBlocks;
 | |
| using Lib.Architecture.BuildingBlocks;
 | |
| using Microsoft.AspNetCore.Authorization;
 | |
| using Microsoft.AspNetCore.Mvc;
 | |
| 
 | |
| namespace Core.Thalos.Service.API.Controllers
 | |
| {
 | |
|     /// <summary>
 | |
|     /// Handles all requests for role authentication.
 | |
|     /// </summary>
 | |
|     [ApiVersion("1.0")]
 | |
|     [Route("api/v{api-version:apiVersion}/[controller]")]
 | |
|     [Produces("application/json")]
 | |
|     [ApiController]
 | |
|     [Authorize(AuthenticationSchemes = Schemes.DefaultScheme)]
 | |
|     public class RoleController : ControllerBase
 | |
|     {
 | |
|         private readonly IComponentHandler<GetRoleRequest> getRoleHandler;
 | |
|         private readonly IComponentHandler<GetAllRolesRequest> getAllRolesHandler;
 | |
|         private readonly IComponentHandler<CreateRoleRequest> createRoleHandler;
 | |
|         private readonly IComponentHandler<UpdateRoleRequest> updateRoleHandler;
 | |
|         private readonly IComponentHandler<DeleteRoleRequest> deleteRoleHandler;
 | |
|         private readonly IComponentHandler<ChangeRoleStatusRequest> changeStatusRoleHandler;
 | |
|         private readonly IComponentHandler<AddApplicationToRoleRequest> addApplicationToRoleHandler;
 | |
|         private readonly IComponentHandler<RemoveApplicationFromRoleRequest> removeApplicationToRoleHandler;
 | |
|         private readonly IRolePort port;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Handles all requests for role authentication.
 | |
|         /// </summary>
 | |
|         public RoleController(
 | |
|             IComponentHandler<GetRoleRequest> getRoleHandler,
 | |
|             IComponentHandler<GetAllRolesRequest> getAllRolesHandler,
 | |
|             IComponentHandler<CreateRoleRequest> createRoleHandler,
 | |
|             IComponentHandler<UpdateRoleRequest> updateRoleHandler,
 | |
|             IComponentHandler<DeleteRoleRequest> deleteRoleHandler,
 | |
|             IComponentHandler<ChangeRoleStatusRequest> changeRoleStatusHandler,
 | |
|             IComponentHandler<AddApplicationToRoleRequest> addApplicationToRoleHandler,
 | |
|             IComponentHandler<RemoveApplicationFromRoleRequest> removeApplicationToRoleHandler,
 | |
|             IRolePort port
 | |
|             )
 | |
|         {
 | |
|             this.createRoleHandler = createRoleHandler;
 | |
|             this.updateRoleHandler = updateRoleHandler;
 | |
|             this.deleteRoleHandler = deleteRoleHandler;
 | |
|             this.changeStatusRoleHandler = changeRoleStatusHandler;
 | |
|             this.getAllRolesHandler = getAllRolesHandler;
 | |
|             this.getRoleHandler = getRoleHandler;
 | |
|             this.addApplicationToRoleHandler = addApplicationToRoleHandler;
 | |
|             this.removeApplicationToRoleHandler = removeApplicationToRoleHandler;
 | |
|             this.port = port;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets all the roles.
 | |
|         /// </summary>
 | |
|         [HttpGet("GetAll")]
 | |
|         [ProducesResponseType(StatusCodes.Status200OK)]
 | |
|         [ProducesResponseType(StatusCodes.Status204NoContent)]
 | |
|         [ProducesResponseType(StatusCodes.Status401Unauthorized)]
 | |
|         [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)]
 | |
|         [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)]
 | |
|         [ProducesResponseType(StatusCodes.Status500InternalServerError)]
 | |
|         [ProducesResponseType(StatusCodes.Status400BadRequest)]
 | |
|         [Permission("RoleManagement.Read")]
 | |
|         public async Task<IActionResult> GetAllRolesAsync(CancellationToken cancellationToken)
 | |
|         {
 | |
|             await getAllRolesHandler.ExecuteAsync(new GetAllRolesRequest { }, cancellationToken).ConfigureAwait(false);
 | |
| 
 | |
|             return port.ViewModel;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets the role by mongo identifier.
 | |
|         /// </summary>
 | |
|         [HttpPost]
 | |
|         [Route("GetById")]
 | |
|         [ProducesResponseType(StatusCodes.Status200OK)]
 | |
|         [ProducesResponseType(StatusCodes.Status204NoContent)]
 | |
|         [ProducesResponseType(StatusCodes.Status400BadRequest)]
 | |
|         [ProducesResponseType(StatusCodes.Status401Unauthorized)]
 | |
|         [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)]
 | |
|         [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)]
 | |
|         [ProducesResponseType(StatusCodes.Status500InternalServerError)]
 | |
|         [Permission("RoleManagement.Read")]
 | |
|         public async Task<IActionResult> GetRoleById([FromBody] GetRoleRequest request, CancellationToken cancellationToken)
 | |
|         {
 | |
|             if (string.IsNullOrEmpty(request._Id)) { return BadRequest("Invalid role mongo identifier"); }
 | |
| 
 | |
|             await getRoleHandler.ExecuteAsync(request, cancellationToken).ConfigureAwait(false);
 | |
| 
 | |
|             return port.ViewModel;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Creates a new role.
 | |
|         /// </summary>
 | |
|         [HttpPost("Create")]
 | |
|         [ProducesResponseType(StatusCodes.Status200OK)]
 | |
|         [ProducesResponseType(StatusCodes.Status204NoContent)]
 | |
|         [ProducesResponseType(StatusCodes.Status401Unauthorized)]
 | |
|         [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)]
 | |
|         [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)]
 | |
|         [ProducesResponseType(StatusCodes.Status500InternalServerError)]
 | |
|         [ProducesResponseType(StatusCodes.Status400BadRequest)]
 | |
|         [Permission("RoleManagement.Write")]
 | |
|         public async Task<IActionResult> CreateRoleAsync([FromBody] CreateRoleRequest newRole, CancellationToken cancellationToken = default)
 | |
|         {
 | |
|             await createRoleHandler.ExecuteAsync(newRole, cancellationToken).ConfigureAwait(false);
 | |
| 
 | |
|             return port.ViewModel;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Updates a full role by mongo identifier.
 | |
|         /// </summary>
 | |
|         [HttpPut("Update")]
 | |
|         [ProducesResponseType(StatusCodes.Status200OK)]
 | |
|         [ProducesResponseType(StatusCodes.Status204NoContent)]
 | |
|         [ProducesResponseType(StatusCodes.Status401Unauthorized)]
 | |
|         [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)]
 | |
|         [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)]
 | |
|         [ProducesResponseType(StatusCodes.Status500InternalServerError)]
 | |
|         [ProducesResponseType(StatusCodes.Status400BadRequest)]
 | |
|         [Permission("RoleManagement.Write")]
 | |
|         public async Task<IActionResult> UpdateRoleAsync([FromBody] UpdateRoleRequest entity, CancellationToken cancellationToken = default)
 | |
|         {
 | |
|             await updateRoleHandler.ExecuteAsync(entity, cancellationToken).ConfigureAwait(false);
 | |
| 
 | |
|             return port.ViewModel;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Deletes a full role by mongo identifier.
 | |
|         /// </summary>
 | |
|         [HttpDelete("Delete")]
 | |
|         [ProducesResponseType(StatusCodes.Status200OK)]
 | |
|         [ProducesResponseType(StatusCodes.Status204NoContent)]
 | |
|         [ProducesResponseType(StatusCodes.Status401Unauthorized)]
 | |
|         [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)]
 | |
|         [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)]
 | |
|         [ProducesResponseType(StatusCodes.Status500InternalServerError)]
 | |
|         [ProducesResponseType(StatusCodes.Status400BadRequest)]
 | |
|         [Permission("RoleManagement.Write")]
 | |
|         public async Task<IActionResult> DeleteeRoleAsync([FromBody] DeleteRoleRequest entity, CancellationToken cancellationToken = default)
 | |
|         {
 | |
|             await deleteRoleHandler.ExecuteAsync(entity, cancellationToken).ConfigureAwait(false);
 | |
| 
 | |
|             return port.ViewModel;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Changes the status of the role.
 | |
|         /// </summary>
 | |
|         [HttpPatch]
 | |
|         [Route("ChangeStatus")]
 | |
|         [ProducesResponseType(StatusCodes.Status200OK)]
 | |
|         [ProducesResponseType(StatusCodes.Status204NoContent)]
 | |
|         [ProducesResponseType(StatusCodes.Status400BadRequest)]
 | |
|         [ProducesResponseType(StatusCodes.Status401Unauthorized)]
 | |
|         [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)]
 | |
|         [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)]
 | |
|         [ProducesResponseType(StatusCodes.Status500InternalServerError)]
 | |
|         [Permission("RoleManagement.Write")]
 | |
|         public async Task<IActionResult> ChageRoleStatusAsync(ChangeRoleStatusRequest request, CancellationToken cancellationToken)
 | |
|         {
 | |
|             if (string.IsNullOrEmpty(request._Id)) { return BadRequest("Invalid role mongo identifier"); }
 | |
| 
 | |
|             await changeStatusRoleHandler.ExecuteAsync(request, cancellationToken).ConfigureAwait(false);
 | |
| 
 | |
|             return port.ViewModel;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Adds an application to the role's list of applications.
 | |
|         /// </summary>
 | |
|         [HttpPost]
 | |
|         [Route("AddApplication")]
 | |
|         [ProducesResponseType(StatusCodes.Status200OK)]
 | |
|         [ProducesResponseType(StatusCodes.Status204NoContent)]
 | |
|         [ProducesResponseType(StatusCodes.Status400BadRequest)]
 | |
|         [ProducesResponseType(StatusCodes.Status401Unauthorized)]
 | |
|         [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)]
 | |
|         [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)]
 | |
|         [ProducesResponseType(StatusCodes.Status500InternalServerError)]
 | |
|         [Permission("RoleManagement.Write")]
 | |
|         public async Task<IActionResult> AddApplicationToRoleAsync(AddApplicationToRoleRequest request, CancellationToken cancellationToken)
 | |
|         {
 | |
|             if (string.IsNullOrEmpty(request.RoleId)) { return BadRequest("Invalid role mongo identifier"); }
 | |
| 
 | |
|             await addApplicationToRoleHandler.ExecuteAsync(request, cancellationToken);
 | |
| 
 | |
|             return port.ViewModel;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Removes an application from the role's list of applications.
 | |
|         /// </summary>
 | |
|         [HttpDelete]
 | |
|         [Route("RemoveApplication")]
 | |
|         [ProducesResponseType(StatusCodes.Status200OK)]
 | |
|         [ProducesResponseType(StatusCodes.Status204NoContent)]
 | |
|         [ProducesResponseType(StatusCodes.Status400BadRequest)]
 | |
|         [ProducesResponseType(StatusCodes.Status401Unauthorized)]
 | |
|         [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)]
 | |
|         [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)]
 | |
|         [ProducesResponseType(StatusCodes.Status500InternalServerError)]
 | |
|         [Permission("RoleManagement.Write")]
 | |
|         public async Task<IActionResult> RemoveApplicationToRoleAsync(RemoveApplicationFromRoleRequest request,
 | |
|                                                                    CancellationToken cancellationToken)
 | |
|         {
 | |
|             if (string.IsNullOrEmpty(request.RoleId)) { return BadRequest("Invalid role mongo identifier"); }
 | |
| 
 | |
|             await removeApplicationToRoleHandler.ExecuteAsync(request, cancellationToken);
 | |
| 
 | |
|             return port.ViewModel;
 | |
|         }
 | |
|     }
 | |
| }
 | 
