Files
Message-Push-Nest/service/settings_service/settings.go
T
2025-08-10 14:27:50 +08:00

115 lines
3.1 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 settings_service
import (
"errors"
"fmt"
"github.com/robfig/cron/v3"
"message-nest/models"
"message-nest/pkg/app"
"message-nest/pkg/constant"
"message-nest/service/cron_service"
)
type UserSettings struct {
UserName string
OldPassword string
NewPassword string
}
// EditUserPasswd 用户设置密码
func (us *UserSettings) EditUserPasswd() error {
ok, _ := models.CheckAuth(us.UserName, us.OldPassword)
if !ok {
return errors.New("旧密码校验失败!")
}
var user = map[string]interface{}{
"password": us.NewPassword,
}
return models.EditUser(us.UserName, user)
}
// GetUserSetting 获取用户设置
func (us *UserSettings) GetUserSetting(section string) (map[string]string, error) {
result := make(map[string]string)
settings, err := models.GetSettingBySection(section)
if err != nil {
return result, err
}
for _, setting := range settings {
result[setting.Key] = setting.Value
}
// 版本信息单独获取
if section == constant.AboutSectionName {
result = constant.LatestVersion
}
return result, nil
}
// EditSettings 便捷自定义设置
func (us *UserSettings) EditSettings(section string, key string, value string, currentUser string) error {
setting, _ := models.GetSettingByKey(section, key)
if setting.ID <= 0 {
err := models.AddOneSetting(models.Settings{
IDModel: models.IDModel{
CreatedBy: currentUser,
ModifiedBy: currentUser,
},
Section: section,
Key: key,
Value: value,
})
return err
} else {
if value == "" {
return nil
}
data := make(map[string]interface{})
data["section"] = section
data["key"] = key
data["value"] = value
data["modified_by"] = currentUser
err := models.EditSetting(setting.ID, data)
if key == constant.LogsCleanCronKeyName {
cronService := cron_service.CronService{}
cronService.UpdateLogsCronRun(value)
}
return err
}
}
// 站点自定义的结构
type SiteConfig struct {
Title string `json:"title" validate:"omitempty,min=1,max=50" label:"网站标题"`
Slogan string `json:"slogan" validate:"omitempty,min=1,max=50" label:"网站slogan"`
Logo string `json:"logo" validate:"omitempty,min=1" label:"logo"`
}
type LogConfig struct {
Cron string `json:"cron" validate:"required,cron" label:"日志定时表达式"`
KeepNum string `json:"keep_num" validate:"required,min=1,max=50" label:"日志保留数"`
}
// ValidateDiffSetting 校验不同的设置
func (us *UserSettings) ValidateDiffSetting(section string, data map[string]string) string {
if section == constant.SiteSettingSectionName {
var config SiteConfig
config.Title = data["title"]
config.Slogan = data["slogan"]
config.Logo = data["logo"]
_, errStr := app.CommonPlaygroundValid(config)
return errStr
}
if section == constant.LogsCleanSectionName {
var config LogConfig
config.Cron = data["cron"]
config.KeepNum = data["keep_num"]
_, err := cron.ParseStandard(config.Cron)
if err != nil {
return fmt.Sprintf("%s 不是合法的corn表达式", config.Cron)
}
_, errStr := app.CommonPlaygroundValid(config)
return errStr
}
return fmt.Sprintf("未知的section%s", section)
}