daShangDao_psiServer/service/config.go
2026-06-15 13:47:39 +08:00

153 lines
3.9 KiB
Go

package service
import (
"psi/database"
"psi/models"
systemReq "psi/models/request"
systemRes "psi/models/response"
"psi/utils"
"time"
"gorm.io/gorm"
)
type ConfigService struct{}
// GetConfigList 获取配置列表
func (s *ConfigService) GetConfigList(req systemReq.GetConfigListRequest, db ...*gorm.DB) (*systemRes.ConfigListResponse, error) {
databaseConn := database.OptionalDB(db...)
if req.Page < 1 {
req.Page = 1
}
if req.PageSize < 1 || req.PageSize > 100 {
req.PageSize = 20
}
query := databaseConn.Model(&models.Config{}).Where("is_del = ?", 0)
if req.Keyword != "" {
query = query.Where("`key` like ?", "%"+req.Keyword+"%")
}
var total int64
if err := query.Count(&total).Error; err != nil {
return nil, utils.NewError("查询总数失败")
}
var configs []models.Config
offset := (req.Page - 1) * req.PageSize
if err := query.Order("created_at DESC").Offset(offset).Limit(req.PageSize).Find(&configs).Error; err != nil {
return nil, utils.NewError("查询配置列表失败")
}
var configItems []systemRes.ConfigItem
for _, config := range configs {
configItems = append(configItems, systemRes.ConvertConfigToItem(config))
}
return &systemRes.ConfigListResponse{
List: configItems,
Total: total,
Page: req.Page,
PageSize: req.PageSize,
}, nil
}
// GetConfigDetail 获取配置详情
func (s *ConfigService) GetConfigDetail(id int64, db ...*gorm.DB) (*models.Config, error) {
databaseConn := database.OptionalDB(db...)
var config models.Config
result := databaseConn.Where("id = ? AND is_del = ?", id, 0).First(&config)
if result.Error != nil {
return nil, utils.NewError("配置不存在")
}
return &config, nil
}
// CreateConfig 创建配置
func (s *ConfigService) CreateConfig(req systemReq.AddConfigRequest, db ...*gorm.DB) (int64, error) {
databaseConn := database.OptionalDB(db...)
var count int64
databaseConn.Model(&models.Config{}).Where("`key` = ? AND is_del = ?", req.Key, 0).Count(&count)
if count > 0 {
return 0, utils.NewError("配置键已存在")
}
now := time.Now().Unix()
config := models.Config{
Key: req.Key,
Value: req.Value,
CreatedAt: now,
UpdatedAt: now,
IsDel: 0,
}
if err := databaseConn.Create(&config).Error; err != nil {
return 0, utils.NewError("创建配置失败: " + err.Error())
}
return config.ID, nil
}
// UpdateConfig 更新配置
func (s *ConfigService) UpdateConfig(req systemReq.UpdateConfigRequest, db ...*gorm.DB) error {
databaseConn := database.OptionalDB(db...)
var config models.Config
result := databaseConn.Where("id = ? AND is_del = ?", req.ID, 0).First(&config)
if result.Error != nil {
return utils.NewError("配置不存在")
}
if req.Key != "" && req.Key != config.Key {
var count int64
databaseConn.Model(&models.Config{}).Where("`key` = ? AND id != ? AND is_del = ?", req.Key, req.ID, 0).Count(&count)
if count > 0 {
return utils.NewError("配置键已存在")
}
}
updateData := make(map[string]interface{})
updateData["updated_at"] = time.Now().Unix()
if req.Key != "" {
updateData["key"] = req.Key
}
if req.Value != "" {
updateData["value"] = req.Value
}
if err := databaseConn.Model(&config).Updates(updateData).Error; err != nil {
return utils.NewError("更新配置失败: " + err.Error())
}
return nil
}
// DeleteConfig 删除配置(逻辑删除)
func (s *ConfigService) DeleteConfig(req systemReq.DeleteConfigRequest, db ...*gorm.DB) error {
databaseConn := database.OptionalDB(db...)
var config models.Config
result := databaseConn.Where("id = ? AND is_del = ?", req.ID, 0).First(&config)
if result.Error != nil {
return utils.NewError("配置不存在")
}
updateData := map[string]interface{}{
"is_del": 1,
"updated_at": time.Now().Unix(),
}
if err := databaseConn.Model(&config).Updates(updateData).Error; err != nil {
return utils.NewError("删除配置失败: " + err.Error())
}
return nil
}