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