81 lines
2.1 KiB
Go
81 lines
2.1 KiB
Go
package handlers
|
|
|
|
import (
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"goblog/database"
|
|
"goblog/models"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// 站点基础设置键名
|
|
const (
|
|
OptionSiteName = "site_name"
|
|
OptionSiteDesc = "site_desc"
|
|
OptionShowComments = "show_comments" // "1" 显示评论 / "0" 隐藏评论
|
|
OptionCommentPageSize = "comments_per_page" // 前台评论每页条数
|
|
)
|
|
|
|
// GetSettings 获取站点基础设置(管理员)
|
|
func GetSettings(c *gin.Context) {
|
|
cfg := getConfig()
|
|
|
|
opts, err := models.GetOptionsByUser(database.DB, 0)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "读取设置失败"})
|
|
return
|
|
}
|
|
|
|
// 默认值:站点信息取配置文件,评论默认显示、每页 10 条
|
|
settings := map[string]string{
|
|
OptionSiteName: cfg.App.Name,
|
|
OptionSiteDesc: cfg.App.Description,
|
|
OptionShowComments: "1",
|
|
OptionCommentPageSize: "10",
|
|
}
|
|
for name := range settings {
|
|
if v, ok := opts[name]; ok && v != "" {
|
|
settings[name] = v
|
|
}
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{"data": settings})
|
|
}
|
|
|
|
// UpdateSettingsRequest 更新站点基础设置请求
|
|
type UpdateSettingsRequest struct {
|
|
SiteName string `json:"site_name" binding:"required"`
|
|
SiteDesc string `json:"site_desc"`
|
|
ShowComments bool `json:"show_comments"`
|
|
CommentsPerPage int `json:"comments_per_page" binding:"required,min=1,max=100"`
|
|
}
|
|
|
|
// UpdateSettings 保存站点基础设置(管理员)
|
|
func UpdateSettings(c *gin.Context) {
|
|
var req UpdateSettingsRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "参数错误: " + err.Error()})
|
|
return
|
|
}
|
|
|
|
showComments := "0"
|
|
if req.ShowComments {
|
|
showComments = "1"
|
|
}
|
|
options := map[string]string{
|
|
OptionSiteName: req.SiteName,
|
|
OptionSiteDesc: req.SiteDesc,
|
|
OptionShowComments: showComments,
|
|
OptionCommentPageSize: strconv.Itoa(req.CommentsPerPage),
|
|
}
|
|
|
|
if err := models.BatchSetOptions(database.DB, 0, options); err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "保存设置失败"})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{"message": "设置已保存"})
|
|
}
|