using System; using System.Collections.Generic; using System.Threading.Tasks; using UserManagement.Data.Dto; using UserManagement.MediatR.Commands; using UserManagement.MediatR.Queries; using MediatR; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using UserManagement.Api.Helpers; namespace UserManagement.API.Controllers { /// /// Role /// [Route("api/[controller]")] [ApiController] [Authorize] public class RoleController : BaseController { public IMediator _mediator { get; set; } /// /// Role /// /// public RoleController( IMediator mediator) { _mediator = mediator; } /// /// Create A Role /// /// /// [HttpPost] [Produces("application/json", "application/xml", Type = typeof(RoleDto))] [ClaimCheck("role_add")] public async Task AddRole(AddRoleCommand addRoleCommand) { var result = await _mediator.Send(addRoleCommand); if (!result.Success) { return ReturnFormattedResponse(result); } return CreatedAtAction("GetRole", new { id = result.Data.Id }, result.Data); } /// /// Update Exist Role By Id /// /// /// /// [HttpPut("{id}")] [Produces("application/json", "application/xml", Type = typeof(RoleDto))] [ClaimCheck("role_edit")] public async Task UpdateRole(Guid id, UpdateRoleCommand updateRoleCommand) { updateRoleCommand.Id = id; var result = await _mediator.Send(updateRoleCommand); return ReturnFormattedResponse(result); } /// /// Get Role By Id /// /// /// [HttpGet("{id}", Name = "GetRole")] [Produces("application/json", "application/xml", Type = typeof(RoleDto))] [ClaimCheck("role_list")] public async Task GetRole(Guid id) { var getRoleQuery = new GetRoleQuery { Id = id }; var result = await _mediator.Send(getRoleQuery); return ReturnFormattedResponse(result); } /// /// Get All Roles /// /// [HttpGet(Name = "GetRoles")] [Produces("application/json", "application/xml", Type = typeof(List))] [ClaimCheck("role_list", "user_edit", "user_add", "user_role_edit")] public async Task GetRoles() { var getAllRoleQuery = new GetAllRoleQuery { }; var result = await _mediator.Send(getAllRoleQuery); return Ok(result); } /// /// Delete Role By Id /// /// /// [HttpDelete("{Id}")] [ClaimCheck("role_delete")] public async Task DeleteRole(Guid Id) { var deleteRoleCommand = new DeleteRoleCommand { Id = Id }; var result = await _mediator.Send(deleteRoleCommand); return ReturnFormattedResponse(result); } } }