yunzer_go/server/controllers/knowledge.go

404 lines
8.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
share, _ := c.GetInt8("share", -1) // Default -1 to query all
keyword := c.GetString("keyword", "")
// Use share in the query
knowledges, total, err := models.GetAllKnowledge(page, pageSize, status, categoryId, share, 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
}
// Add share parsing (default 0 for personal)
share, _ := c.GetInt8("share", 0)
knowledge.Share = share
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
}
// Add share parsing
share, _ := c.GetInt8("share", 0) // Default 0 if not provided
knowledge.Share = share
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,
"tagBackground": tag.TagBackground,
"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": nil,
}
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
}
// 判断是添加还是更新
if tag.TagId > 0 {
// 更新操作
err = models.UpdateTag(&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": tag.TagId},
}
c.ServeJSON()
return
}
// 添加操作:确保 TagId 为 0让数据库自动生成
tag.TagId = 0
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()
}