zwpanel/service/models/moduleConfig.go
2024-04-09 10:43:17 +08:00

61 lines
1.4 KiB
Go

package models
import (
"encoding/json"
"gorm.io/gorm"
)
type ModuleConfig struct {
BaseModel
UserId uint `gorm:"index" json:"userId"`
Name string `gorm:"type:varchar(255)" json:"name"`
ValueJson string `gorm:"type:text" json:"-"`
Value map[string]interface{} `gorm:"-" json:"value"`
}
func (m *ModuleConfig) GetConfigByUserIdAndName(db *gorm.DB, userId uint, name string) (map[string]interface{}, error) {
cfg := ModuleConfig{}
if err := db.First(&cfg, "user_id=? AND name=?", userId, name).Error; err != nil {
if err == gorm.ErrRecordNotFound {
return nil, nil
} else {
return nil, err
}
}
// 处理字段
if err := json.Unmarshal([]byte(cfg.ValueJson), &cfg.Value); err != nil {
cfg.Value = nil
}
return cfg.Value, nil
}
func (m *ModuleConfig) Save(db *gorm.DB) error {
// 处理字段
if jb, err := json.Marshal(m.Value); err != nil {
m.ValueJson = "{}"
} else {
m.ValueJson = string(jb)
}
if err := db.First(&ModuleConfig{}, "user_id=? AND name=?", m.UserId, m.Name).Error; err != nil {
if err == gorm.ErrRecordNotFound {
// 新增
if err := db.Create(&m).Error; err != nil {
return err
}
} else {
return err
}
} else {
// 修改
if err := db.Select("Name", "UserId", "ValueJson").Where("user_id=? AND name=?", m.UserId, m.Name).Updates(&m).Error; err != nil {
return err
}
}
return nil
}