using F9WebAiTest.Application.Common; using F9WebAiTest.Application.Common.Exceptions; using F9WebAiTest.Application.CQRS.SYS.RBAC.Roles.Commands; using F9WebAiTest.Application.CQRS.SYS.RBAC.Roles.Queries; using F9WebAiTest.Domain.Enums.SYS.RBAC; using MediatR; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace F9WebAiTest.Api.Controllers; /// 系统角色管理(DDD + CQRS) [ApiController] [Route("api/sys/role")] [Authorize] public class SysRoleController : ControllerBase { private readonly IMediator _mediator; public SysRoleController(IMediator mediator) => _mediator = mediator; [HttpGet] public async Task GetAll() => Ok(ApiResult.Ok(await _mediator.Send(new GetRoleAllQuery()))); [HttpGet("{id}")] public async Task GetById(long id) => Ok(ApiResult.Ok(await _mediator.Send(new GetRoleByIdForEditQuery(id)))); [HttpGet("{id}/permissions")] public async Task GetPermissions(long id, [FromQuery] Resource_Type_Enum resourceType) => Ok(ApiResult.Ok(await _mediator.Send(new GetRolePermissionsByResourceTypeQuery(id, resourceType)))); [HttpPost] public async Task Create([FromBody] Role_CreateCommand command) { try { return Ok(ApiResult.Ok(new { id = await _mediator.Send(command) }, "创建成功")); } catch (F9NotFoundException ex) { return NotFound(ApiResult.Fail(ex.Message, 404)); } catch (F9OperationException ex) { return BadRequest(ApiResult.Fail(ex.Message, 400)); } } [HttpPut("{id}")] public async Task Update(long id, [FromBody] Role_UpdateCommand command) { try { return Ok(ApiResult.Ok(await _mediator.Send(command with { Id = id }), "修改成功")); } catch (F9NotFoundException ex) { return NotFound(ApiResult.Fail(ex.Message, 404)); } catch (F9OperationException ex) { return BadRequest(ApiResult.Fail(ex.Message, 400)); } } [HttpDelete("{id}")] public async Task Delete(long id) { try { return Ok(ApiResult.Ok(await _mediator.Send(new Role_DelCommand(id)), "删除成功")); } catch (F9NotFoundException ex) { return NotFound(ApiResult.Fail(ex.Message, 404)); } catch (F9OperationException ex) { return BadRequest(ApiResult.Fail(ex.Message, 400)); } } [HttpPut("{id}/active")] public async Task ActiveOrDeactivate(long id, [FromBody] Role_ActiveOrDeactivateCommand command) { try { return Ok(ApiResult.Ok(await _mediator.Send(command with { Id = id }), "操作成功")); } catch (F9NotFoundException ex) { return NotFound(ApiResult.Fail(ex.Message, 404)); } catch (F9OperationException ex) { return BadRequest(ApiResult.Fail(ex.Message, 400)); } } [HttpPost("{id}/permissions")] public async Task AssignPermission(long id, [FromBody] RolePermission_AssignCommand command) { try { return Ok(ApiResult.Ok(await _mediator.Send(command with { RoleId = id }), "绑定成功")); } catch (F9NotFoundException ex) { return NotFound(ApiResult.Fail(ex.Message, 404)); } catch (F9OperationException ex) { return BadRequest(ApiResult.Fail(ex.Message, 400)); } } [HttpDelete("{id}/permissions/{rpId}")] public async Task RemovePermission(long id, long rpId, [FromQuery] Resource_Type_Enum resourceType) { try { return Ok(ApiResult.Ok(await _mediator.Send(new RolePermission_RemoveCommand(rpId, resourceType)), "解绑成功")); } catch (F9NotFoundException ex) { return NotFound(ApiResult.Fail(ex.Message, 404)); } catch (F9OperationException ex) { return BadRequest(ApiResult.Fail(ex.Message, 400)); } } }