153 lines
3.9 KiB
Go
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
|
|
}
|