using Kean.Application.Command.ViewModels; using Kean.Domain; using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Kean.Presentation.Rest.Controllers { /// /// 角色服务 /// [ApiController, Route("api/roles")] public class RolesController : ControllerBase { private readonly Application.Command.Interfaces.IBasicService _basicCommandService; // 基础信息命令服务 private readonly Application.Query.Interfaces.IBasicService _basicQueryService; // 基础信息查询服务 /// /// 依赖注入 /// public RolesController( Application.Command.Interfaces.IBasicService basicCommandService, Application.Query.Interfaces.IBasicService basicQueryService) { _basicCommandService = basicCommandService; _basicQueryService = basicQueryService; } /// /// 获取角色列表 /// /// 成功 [HttpGet] [ProducesResponseType(200)] public async Task GetList( [FromQuery] string name, [FromQuery] string sort, [FromQuery] int? offset, [FromQuery] int? limit) { var items = await _basicQueryService.GetRoleList(name, sort, offset, limit); if (offset.HasValue || limit.HasValue) { var total = await _basicQueryService.GetRoleCount(name); return StatusCode(200, new { items, total }); } else { return StatusCode(200, new { items, total = items.Count() }); } } /// /// 创建角色 /// /// 成功 /// 角色已存在 /// 请求内容错误 [HttpPost] [ProducesResponseType(201)] [ProducesResponseType(409)] [ProducesResponseType(422)] public async Task Create(Role role) { var result = await _basicCommandService.CreateRole(role); return result switch { { Id: > 0 } => StatusCode(201, result.Id), { Failure.ErrorCode: nameof(ErrorCode.Conflict) } => StatusCode(409, result.Failure), _ => StatusCode(422, result.Failure) }; } /// /// 修改角色 /// /// 成功 /// 角色已存在 /// 角色已删除 /// 请求内容错误 [HttpPut("{id}")] [ProducesResponseType(200)] [ProducesResponseType(409)] [ProducesResponseType(410)] [ProducesResponseType(422)] public async Task Modify(int id, Role role) { role.Id = id; var result = await _basicCommandService.ModifyRole(role); return result switch { { Success: true } => StatusCode(200), { Failure.ErrorCode: nameof(ErrorCode.Conflict) } => StatusCode(409, result.Failure), { Failure.ErrorCode: nameof(ErrorCode.Gone) } => StatusCode(410, result.Failure), _ => StatusCode(422, result.Failure) }; } /// /// 批量处理角色 /// /// 成功 /// 方法不支持 [HttpPost("batch")] [ProducesResponseType(200)] [ProducesResponseType(405)] public async Task Batch(Batch batch) { return batch.Method switch { BatchMethod.Delete => StatusCode(200, await _basicCommandService.DeleteRole(batch.Data)), _ => StatusCode(405) }; } /// /// 获取角色菜单 /// /// 成功 [HttpGet("{id}/menu")] [ProducesResponseType(200)] public async Task MenuPermission(int id) { var (Menu, Permission) = await _basicQueryService.GetRoleMenuPermission(id); return StatusCode(200, new { Menu, Permission }); } /// /// 设置角色菜单 /// /// 成功 /// 角色已删除 /// 请求内容错误 [HttpPost("{id}/menu")] [ProducesResponseType(200)] [ProducesResponseType(410)] [ProducesResponseType(422)] public async Task MenuPermission(int id, IEnumerable permission) { var result = await _basicCommandService.SetRoleMenuPermission(id, permission); return result switch { { Success: true } => StatusCode(200), { Failure.ErrorCode: nameof(ErrorCode.Gone) } => StatusCode(410, result.Failure), _ => StatusCode(422, result.Failure) }; } } }