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)
};
}
}
}