using Hotline.KnowledgeBase;
using Hotline.Permissions;
using Hotline.Share.Dtos.Knowledge;
using MapsterMapper;
using Microsoft.AspNetCore.Mvc;
using XF.Domain.Exceptions;
namespace Hotline.Api.Controllers
{
///
///
///
public class KnowledgeCommonController : BaseController
{
#region 注入
private readonly IKnowledgeTypeRepository _knowledgeTypeRepository;
private readonly IKnowledgeTypeDomainService _knowledgeTypeDomainService;
private readonly IKnowledgeStandardRepository _knowledgeStandardRepository;
private readonly IMapper _mapper;
///
///
///
///
///
///
///
public KnowledgeCommonController(IKnowledgeTypeRepository knowledgeTypeRepository, IKnowledgeTypeDomainService knowledgeTypeDomainService,
IKnowledgeStandardRepository knowledgeStandardRepository,
IMapper mapper)
{
_knowledgeTypeRepository = knowledgeTypeRepository;
_knowledgeTypeDomainService = knowledgeTypeDomainService;
_knowledgeStandardRepository = knowledgeStandardRepository;
_mapper = mapper;
}
#endregion
#region 知识分类
///
///知识分类- 新增
///
///
///
[Permission(EPermission.AddKnowledgeType)]
[HttpPost("add")]
public async Task AddType([FromBody] AddKnowledgeTypeDto dto)
{
return await _knowledgeTypeDomainService.AddType(dto, HttpContext.RequestAborted);
}
///
///知识分类- 编辑
///
///
///
[Permission(EPermission.UpdateKnowledgeType)]
[HttpPut("update")]
public async Task UpdateType([FromBody] UpdateKnowledgeTypeDto dto)
{
await _knowledgeTypeDomainService.UpdateType(dto, HttpContext.RequestAborted);
}
///
/// 知识分类-新增、编辑初始化
///
///
///
///
[HttpGet("init")]
public async Task InitType(string Id, string ParentId)
{
return await _knowledgeTypeDomainService.InitType(Id, ParentId, HttpContext.RequestAborted);
}
///
/// 知识分类-查询详情
///
///
///
[HttpGet("info/{Id}")]
public async Task GetType(string Id)
{
var types = await _knowledgeTypeRepository.GetAsync(Id, HttpContext.RequestAborted);
if (types is null)
throw UserFriendlyException.SameMessage("查询失败!");
return types;
}
///
/// 知识分类-删除
///
///
///
[Permission(EPermission.RemoveKnowledgeType)]
[HttpDelete("remove")]
public async Task RemoveType(string Id)
{
await _knowledgeTypeDomainService.RemoveType(Id, HttpContext.RequestAborted);
}
///
/// 知识分类-启用、禁用切换
///
///
///
[Permission(EPermission.KnowledgeTypeChangeState)]
[HttpPut("changestate")]
public async Task ChangeStateType(string Id)
{
await _knowledgeTypeDomainService.ChangeStateType(Id, HttpContext.RequestAborted);
}
///
/// 知识分类-禁用,并且下架知识
///
///
///
[Permission(EPermission.KnowledgeTypeChangeStateAndOffShelf)]
[HttpPut("changestateandoffshelf")]
public async Task TypeChangeStateAndOffShelf(string Id)
{
await _knowledgeTypeDomainService.ChangeStateTypeAndOffShelf(Id, HttpContext.RequestAborted);
}
///
/// 知识分类- 获取层级分类
///
/// 不传查询所有
///
[Permission(EPermission.KnowledgeTypeMange)]
[HttpGet("treelist")]
public async Task> GetTreeList(bool? IsEnable)
{
return await _knowledgeTypeRepository.Queryable().WhereIF(IsEnable.HasValue, p => p.IsEnable == IsEnable).ToTreeAsync(it => it.children, it => it.ParentId, null);
}
///
/// 知识分类- 只获取一级
///
/// 不传默认查询第一级
/// 不传查询所有,包含已经禁用的
///
[HttpGet("typelist")]
public async Task> GetTypeList(string? ParentId, bool? IsEnable)
{
return await _knowledgeTypeRepository
.Queryable()
.Where(p => p.ParentId == ParentId)
.WhereIF(IsEnable.HasValue, p => p.IsEnable == IsEnable)
.OrderByDescending(p => p.Sort)
.ToListAsync();
}
#endregion
#region 编写规范
///
/// 编写规范-查询详情
///
///
[Permission(EPermission.KnowledgeStandardInfo)]
[HttpGet("info-standard")]
public async Task GetStandard()
{
var sandard = await _knowledgeStandardRepository.Queryable().FirstAsync();
if (sandard == null)
{
KnowledgeStandard standard = new()
{
Title = "",
Content = ""
};
var Id = await _knowledgeStandardRepository.AddAsync(standard, HttpContext.RequestAborted);
return await _knowledgeStandardRepository.GetAsync(Id, HttpContext.RequestAborted);
}
return sandard;
}
///
/// 编写规范-修改
///
///
///
[Permission(EPermission.KnowledgeStandardUpdate)]
[HttpPut("update-standard")]
public async Task UpdateStandard([FromBody] UpdateKnowledgeStandardDto dto)
{
var sandard = _mapper.Map(dto);
await _knowledgeStandardRepository.UpdateAsync(sandard, HttpContext.RequestAborted);
}
#endregion
}
}