完成知识库模块
This commit is contained in:
@@ -0,0 +1,366 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"server/models"
|
||||
"strconv"
|
||||
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
// KnowledgeController 知识库控制器
|
||||
type KnowledgeController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
// List 获取知识列表
|
||||
// @router /api/knowledge/list [get]
|
||||
func (c *KnowledgeController) List() {
|
||||
// 获取查询参数
|
||||
page, _ := c.GetInt("page", 1)
|
||||
pageSize, _ := c.GetInt("pageSize", 10)
|
||||
status, _ := c.GetInt8("status", -1) // -1表示查询所有
|
||||
categoryId, _ := c.GetInt("categoryId", 0)
|
||||
keyword := c.GetString("keyword", "")
|
||||
|
||||
knowledges, total, err := models.GetAllKnowledge(page, pageSize, status, categoryId, keyword)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "获取知识列表失败: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 0,
|
||||
"message": "success",
|
||||
"data": map[string]interface{}{
|
||||
"list": knowledges,
|
||||
"total": total,
|
||||
"page": page,
|
||||
"pageSize": pageSize,
|
||||
},
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
// Detail 获取知识详情
|
||||
// @router /api/knowledge/detail [get]
|
||||
func (c *KnowledgeController) Detail() {
|
||||
id, _ := strconv.Atoi(c.GetString("id"))
|
||||
if id == 0 {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "知识ID不能为空",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
knowledge, err := models.GetKnowledgeById(id)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "获取知识详情失败: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 0,
|
||||
"message": "success",
|
||||
"data": knowledge,
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
// Create 创建知识
|
||||
// @router /api/knowledge/create [post]
|
||||
func (c *KnowledgeController) Create() {
|
||||
// 解析请求体
|
||||
var knowledge models.Knowledge
|
||||
err := json.Unmarshal(c.Ctx.Input.RequestBody, &knowledge)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "请求参数格式错误",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 验证必填字段
|
||||
if knowledge.Title == "" {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "标题不能为空",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
id, err := models.AddKnowledge(&knowledge)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "创建知识失败: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 0,
|
||||
"message": "创建成功",
|
||||
"data": map[string]interface{}{"id": id},
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
// Update 更新知识
|
||||
// @router /api/knowledge/update [post]
|
||||
func (c *KnowledgeController) Update() {
|
||||
// 解析请求体
|
||||
var knowledge models.Knowledge
|
||||
err := json.Unmarshal(c.Ctx.Input.RequestBody, &knowledge)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "请求参数格式错误",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 验证必填字段
|
||||
if knowledge.Id == 0 {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "知识ID不能为空",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
err = models.UpdateKnowledge(knowledge.Id, &knowledge)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "更新知识失败: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 0,
|
||||
"message": "更新成功",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
// Delete 软删除知识
|
||||
// @router /api/knowledge/delete [post]
|
||||
func (c *KnowledgeController) Delete() {
|
||||
var request map[string]interface{}
|
||||
err := json.Unmarshal(c.Ctx.Input.RequestBody, &request)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "请求参数格式错误",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
id, ok := request["id"].(float64)
|
||||
if !ok {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "知识ID不能为空",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 从请求头或 session 中获取当前用户信息
|
||||
deleteBy := c.GetString("username")
|
||||
if deleteBy == "" {
|
||||
deleteBy = c.GetString("user")
|
||||
}
|
||||
if deleteBy == "" {
|
||||
deleteBy = "system" // 默认值
|
||||
}
|
||||
|
||||
err = models.DeleteKnowledge(int(id), deleteBy)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "删除知识失败: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 0,
|
||||
"message": "删除成功",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
// GetCategories 获取分类列表
|
||||
// @router /api/knowledge/categories [get]
|
||||
func (c *KnowledgeController) GetCategories() {
|
||||
categories, err := models.GetAllCategories()
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "获取分类列表失败: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 手动转换数据格式,确保字段名正确
|
||||
var result []map[string]interface{}
|
||||
for _, cat := range categories {
|
||||
result = append(result, map[string]interface{}{
|
||||
"categoryId": cat.CategoryId,
|
||||
"categoryName": cat.CategoryName,
|
||||
"categoryDesc": cat.CategoryDesc,
|
||||
"parentId": cat.ParentId,
|
||||
"sortOrder": cat.SortOrder,
|
||||
"createTime": cat.CreateTime,
|
||||
"updateTime": cat.UpdateTime,
|
||||
})
|
||||
}
|
||||
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 0,
|
||||
"message": "success",
|
||||
"data": result,
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
// GetTags 获取标签列表
|
||||
// @router /api/knowledge/tags [get]
|
||||
func (c *KnowledgeController) GetTags() {
|
||||
tags, err := models.GetAllTags()
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "获取标签列表失败: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 手动转换数据格式,确保字段名正确
|
||||
var result []map[string]interface{}
|
||||
for _, tag := range tags {
|
||||
result = append(result, map[string]interface{}{
|
||||
"tagId": tag.TagId,
|
||||
"tagName": tag.TagName,
|
||||
"tagColor": tag.TagColor,
|
||||
"usageCount": tag.UsageCount,
|
||||
"createTime": tag.CreateTime,
|
||||
"updateTime": tag.UpdateTime,
|
||||
})
|
||||
}
|
||||
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 0,
|
||||
"message": "success",
|
||||
"data": result,
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
// AddCategory 添加分类
|
||||
// @router /api/knowledge/category/add [post]
|
||||
func (c *KnowledgeController) AddCategory() {
|
||||
var category models.KnowledgeCategory
|
||||
err := json.Unmarshal(c.Ctx.Input.RequestBody, &category)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "请求参数格式错误",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
id, err := models.AddCategory(&category)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "添加分类失败: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 0,
|
||||
"message": "添加成功",
|
||||
"data": map[string]interface{}{"categoryId": id},
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
// AddTag 添加标签
|
||||
// @router /api/knowledge/tag/add [post]
|
||||
func (c *KnowledgeController) AddTag() {
|
||||
var tag models.KnowledgeTag
|
||||
err := json.Unmarshal(c.Ctx.Input.RequestBody, &tag)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "请求参数格式错误",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
id, err := models.AddTag(&tag)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "添加标签失败: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 0,
|
||||
"message": "添加成功",
|
||||
"data": map[string]interface{}{"tagId": id},
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
Reference in New Issue
Block a user