更新知识库功能
This commit is contained in:
+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