更新知识库功能
This commit is contained in:
@@ -19,11 +19,13 @@ func (c *KnowledgeController) List() {
|
||||
// 获取查询参数
|
||||
page, _ := c.GetInt("page", 1)
|
||||
pageSize, _ := c.GetInt("pageSize", 10)
|
||||
status, _ := c.GetInt8("status", -1) // -1表示查询所有
|
||||
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", "")
|
||||
|
||||
knowledges, total, err := models.GetAllKnowledge(page, pageSize, status, categoryId, 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,
|
||||
@@ -107,6 +109,10 @@ func (c *KnowledgeController) Create() {
|
||||
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{}{
|
||||
@@ -153,6 +159,10 @@ func (c *KnowledgeController) Update() {
|
||||
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{}{
|
||||
|
||||
+56
-80
@@ -18,6 +18,7 @@ type Knowledge struct {
|
||||
Summary string `orm:"column(summary);size(500);null" json:"summary"`
|
||||
CoverUrl string `orm:"column(cover_url);size(500);null" json:"coverUrl"`
|
||||
Status int8 `orm:"column(status);default(0)" json:"status"`
|
||||
Share int8 `orm:"column(share);default(0)" json:"share"`
|
||||
ViewCount int `orm:"column(view_count);default(0)" json:"viewCount"`
|
||||
LikeCount int `orm:"column(like_count);default(0)" json:"likeCount"`
|
||||
IsRecommend int8 `orm:"column(is_recommend);default(0)" json:"isRecommend"`
|
||||
@@ -139,103 +140,78 @@ func GetKnowledgeById(id int) (*Knowledge, error) {
|
||||
return knowledge, err
|
||||
}
|
||||
|
||||
// GetAllKnowledge 获取所有知识(支持分页和筛选)
|
||||
func GetAllKnowledge(page, pageSize int, status int8, categoryId int, keyword string) ([]*Knowledge, int64, error) {
|
||||
// LightKnowledge for limited fields (with orm and json tags for direct mapping)
|
||||
type LightKnowledge struct {
|
||||
Id int `orm:"column(knowledge_id)" json:"id"`
|
||||
Title string `orm:"column(title)" json:"title"`
|
||||
CategoryId int `orm:"column(category_id)" json:"categoryId"`
|
||||
CategoryName string `orm:"column(category_name)" json:"categoryName"`
|
||||
Tags string `orm:"column(tags)" json:"tags"`
|
||||
Author string `orm:"column(author)" json:"author"`
|
||||
Share int8 `orm:"column(share)" json:"share"`
|
||||
ViewCount int `orm:"column(view_count)" json:"viewCount"`
|
||||
LikeCount int `orm:"column(like_count)" json:"likeCount"`
|
||||
CreateTime time.Time `orm:"column(create_time)" json:"createTime"`
|
||||
UpdateTime time.Time `orm:"column(update_time)" json:"updateTime"`
|
||||
}
|
||||
|
||||
// Helper to add conditions (reduces repetition)
|
||||
func addCondition(where *string, params *[]interface{}, cond string, val interface{}) {
|
||||
if val != nil {
|
||||
*where += " AND " + cond
|
||||
*params = append(*params, val)
|
||||
}
|
||||
}
|
||||
|
||||
// GetAllKnowledge (simplified: direct mapping to LightKnowledge, no separate struct or loop)
|
||||
func GetAllKnowledge(page, pageSize int, status int8, categoryId int, share int8, keyword string) ([]*LightKnowledge, int64, error) {
|
||||
o := orm.NewOrm()
|
||||
|
||||
// 构建 WHERE 条件(只查询未删除的记录)
|
||||
whereSQL := "delete_time IS NULL"
|
||||
params := []interface{}{}
|
||||
|
||||
// 状态筛选
|
||||
if status >= 0 {
|
||||
whereSQL += " AND status = ?"
|
||||
params = append(params, status)
|
||||
}
|
||||
addCondition(&whereSQL, ¶ms, "status = ?", func() interface{} {
|
||||
if status >= 0 {
|
||||
return status
|
||||
}
|
||||
return nil
|
||||
}())
|
||||
addCondition(&whereSQL, ¶ms, "category_id = ?", func() interface{} {
|
||||
if categoryId > 0 {
|
||||
return categoryId
|
||||
}
|
||||
return nil
|
||||
}())
|
||||
addCondition(&whereSQL, ¶ms, "share = ?", func() interface{} {
|
||||
if share >= 0 {
|
||||
return share
|
||||
}
|
||||
return nil
|
||||
}())
|
||||
addCondition(&whereSQL, ¶ms, "title LIKE ?", func() interface{} {
|
||||
if keyword != "" {
|
||||
return "%" + keyword + "%"
|
||||
}
|
||||
return nil
|
||||
}())
|
||||
|
||||
// 分类筛选
|
||||
if categoryId > 0 {
|
||||
whereSQL += " AND category_id = ?"
|
||||
params = append(params, categoryId)
|
||||
}
|
||||
|
||||
// 关键词搜索
|
||||
if keyword != "" {
|
||||
whereSQL += " AND title LIKE ?"
|
||||
params = append(params, "%"+keyword+"%")
|
||||
}
|
||||
|
||||
// 获取总数
|
||||
var total int64
|
||||
countSQL := "SELECT COUNT(*) FROM yz_knowledge WHERE " + whereSQL
|
||||
err := o.Raw(countSQL, params...).QueryRow(&total)
|
||||
err := o.Raw("SELECT COUNT(*) FROM yz_knowledge WHERE "+whereSQL, params).QueryRow(&total)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 联查获取分类名称
|
||||
querySQL := `
|
||||
SELECT k.*, c.category_name
|
||||
FROM yz_knowledge k
|
||||
LEFT JOIN yz_knowledge_category c ON k.category_id = c.category_id
|
||||
WHERE ` + whereSQL + `
|
||||
ORDER BY k.is_top DESC, k.create_time DESC
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
querySQL := `SELECT k.knowledge_id, k.title, k.category_id, c.category_name, k.tags, k.author, k.share, k.view_count, k.like_count, k.create_time, k.update_time
|
||||
FROM yz_knowledge k LEFT JOIN yz_knowledge_category c ON k.category_id = c.category_id
|
||||
WHERE ` + whereSQL + ` ORDER BY k.is_top DESC, k.create_time DESC LIMIT ? OFFSET ?`
|
||||
params = append(params, pageSize, (page-1)*pageSize)
|
||||
|
||||
var knowledges []*Knowledge
|
||||
var results []struct {
|
||||
Id int `orm:"column(knowledge_id)"`
|
||||
Title string `orm:"column(title)"`
|
||||
CategoryId int `orm:"column(category_id)"`
|
||||
CategoryName string `orm:"column(category_name)"`
|
||||
Tags string `orm:"column(tags)"`
|
||||
Author string `orm:"column(author)"`
|
||||
Content string `orm:"column(content)"`
|
||||
Summary string `orm:"column(summary)"`
|
||||
CoverUrl string `orm:"column(cover_url)"`
|
||||
Status int8 `orm:"column(status)"`
|
||||
ViewCount int `orm:"column(view_count)"`
|
||||
LikeCount int `orm:"column(like_count)"`
|
||||
IsRecommend int8 `orm:"column(is_recommend)"`
|
||||
IsTop int8 `orm:"column(is_top)"`
|
||||
CreateTime time.Time `orm:"column(create_time)"`
|
||||
UpdateTime time.Time `orm:"column(update_time)"`
|
||||
CreateBy string `orm:"column(create_by)"`
|
||||
UpdateBy string `orm:"column(update_by)"`
|
||||
}
|
||||
|
||||
_, err = o.Raw(querySQL, params...).QueryRows(&results)
|
||||
var knowledges []*LightKnowledge
|
||||
_, err = o.Raw(querySQL, params).QueryRows(&knowledges)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 转换结果
|
||||
for _, r := range results {
|
||||
k := &Knowledge{
|
||||
Id: r.Id,
|
||||
Title: r.Title,
|
||||
CategoryId: r.CategoryId,
|
||||
CategoryName: r.CategoryName,
|
||||
Tags: r.Tags,
|
||||
Author: r.Author,
|
||||
Content: r.Content,
|
||||
Summary: r.Summary,
|
||||
CoverUrl: r.CoverUrl,
|
||||
Status: r.Status,
|
||||
ViewCount: r.ViewCount,
|
||||
LikeCount: r.LikeCount,
|
||||
IsRecommend: r.IsRecommend,
|
||||
IsTop: r.IsTop,
|
||||
CreateTime: r.CreateTime,
|
||||
UpdateTime: r.UpdateTime,
|
||||
CreateBy: r.CreateBy,
|
||||
UpdateBy: r.UpdateBy,
|
||||
}
|
||||
knowledges = append(knowledges, k)
|
||||
}
|
||||
|
||||
return knowledges, total, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user