基本功能复刻完成
This commit is contained in:
91
internal/handler/admin_knowledge_api.go
Normal file
91
internal/handler/admin_knowledge_api.go
Normal file
@@ -0,0 +1,91 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"time"
|
||||
"xboard-go/internal/database"
|
||||
"xboard-go/internal/model"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// AdminKnowledgeFetch handles fetching of knowledge base articles.
|
||||
func AdminKnowledgeFetch(c *gin.Context) {
|
||||
id := c.Query("id")
|
||||
if id != "" {
|
||||
var knowledge model.Knowledge
|
||||
if err := database.DB.Where("id = ?", id).First(&knowledge).Error; err != nil {
|
||||
Fail(c, http.StatusNotFound, "Article not found")
|
||||
return
|
||||
}
|
||||
Success(c, knowledge)
|
||||
return
|
||||
}
|
||||
|
||||
var data []model.Knowledge
|
||||
database.DB.Select("id", "title", "category", "show", "updated_at", "sort").
|
||||
Order("sort ASC, id DESC").
|
||||
Find(&data)
|
||||
Success(c, data)
|
||||
}
|
||||
|
||||
// AdminKnowledgeSave creates or updates a knowledge base article.
|
||||
func AdminKnowledgeSave(c *gin.Context) {
|
||||
var payload model.Knowledge
|
||||
if err := c.ShouldBindJSON(&payload); err != nil {
|
||||
Fail(c, http.StatusBadRequest, "invalid request body")
|
||||
return
|
||||
}
|
||||
|
||||
payload.UpdatedAt = time.Now().Unix()
|
||||
if payload.ID > 0 {
|
||||
if err := database.DB.Model(&model.Knowledge{}).Where("id = ?", payload.ID).Updates(payload).Error; err != nil {
|
||||
Fail(c, http.StatusInternalServerError, "failed to update article")
|
||||
return
|
||||
}
|
||||
} else {
|
||||
payload.CreatedAt = time.Now().Unix()
|
||||
if err := database.DB.Create(&payload).Error; err != nil {
|
||||
Fail(c, http.StatusInternalServerError, "failed to create article")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
Success(c, true)
|
||||
}
|
||||
|
||||
// AdminKnowledgeDrop deletes a knowledge base article.
|
||||
func AdminKnowledgeDrop(c *gin.Context) {
|
||||
var payload struct {
|
||||
ID int `json:"id"`
|
||||
}
|
||||
if err := c.ShouldBindJSON(&payload); err != nil || payload.ID <= 0 {
|
||||
Fail(c, http.StatusBadRequest, "article id is required")
|
||||
return
|
||||
}
|
||||
|
||||
if err := database.DB.Where("id = ?", payload.ID).Delete(&model.Knowledge{}).Error; err != nil {
|
||||
Fail(c, http.StatusInternalServerError, "failed to delete article")
|
||||
return
|
||||
}
|
||||
Success(c, true)
|
||||
}
|
||||
|
||||
// AdminKnowledgeSort updates the sort order of knowledge base articles.
|
||||
func AdminKnowledgeSort(c *gin.Context) {
|
||||
var payload struct {
|
||||
IDs []int `json:"ids"`
|
||||
}
|
||||
if err := c.ShouldBindJSON(&payload); err != nil {
|
||||
Fail(c, http.StatusBadRequest, "invalid request body")
|
||||
return
|
||||
}
|
||||
|
||||
tx := database.DB.Begin()
|
||||
for i, id := range payload.IDs {
|
||||
tx.Model(&model.Knowledge{}).Where("id = ?", id).Update("sort", i+1)
|
||||
}
|
||||
tx.Commit()
|
||||
|
||||
Success(c, true)
|
||||
}
|
||||
Reference in New Issue
Block a user