// =========================================== // 多班级版班级管理系统 - Go 后端 // // 开发者: Canglan // 联系方式: admin@sea-studio.top // 版权归属: Sea Network Technology Studio // 许可证: Apache License 2.0 // // 版权所有 © Sea Network Technology Studio // =========================================== package repository import ( "gorm.io/gorm" "gorm.io/gorm/clause" "hz-gitea.sea-studio.top/canglan/SharedClassManager/internal/model" ) // SystemSettingRepo 系统设置数据访问层 type SystemSettingRepo struct { db *gorm.DB } // NewSystemSettingRepo 创建系统设置 Repository func NewSystemSettingRepo(db *gorm.DB) *SystemSettingRepo { return &SystemSettingRepo{db: db} } // GetByKey 根据键名获取系统设置 func (r *SystemSettingRepo) GetByKey(key string) (*model.SystemSetting, error) { var setting model.SystemSetting if err := r.db.Where("setting_key = ?", key).First(&setting).Error; err != nil { return nil, err } return &setting, nil } // GetAll 获取所有系统设置 func (r *SystemSettingRepo) GetAll() ([]model.SystemSetting, error) { var settings []model.SystemSetting if err := r.db.Find(&settings).Error; err != nil { return nil, err } return settings, nil } // GetByKeyMap 获取所有系统设置并转为 map func (r *SystemSettingRepo) GetByKeyMap() (map[string]string, error) { settings, err := r.GetAll() if err != nil { return nil, err } result := make(map[string]string, len(settings)) for _, s := range settings { result[s.SettingKey] = s.SettingValue } return result, nil } // Save 保存系统设置(upsert) func (r *SystemSettingRepo) Save(key, value string) error { setting := model.SystemSetting{ SettingKey: key, SettingValue: value, } return r.db.Clauses(clause.OnConflict{ Columns: []clause.Column{{Name: "setting_key"}}, DoUpdates: clause.AssignmentColumns([]string{"setting_value"}), }).Create(&setting).Error } // BatchSave 批量保存系统设置 func (r *SystemSettingRepo) BatchSave(settings map[string]string) error { for key, value := range settings { if err := r.Save(key, value); err != nil { return err } } return nil } // GetValue 根据键名获取设置值 func (r *SystemSettingRepo) GetValue(key string) (string, error) { setting, err := r.GetByKey(key) if err != nil { return "", err } return setting.SettingValue, nil } // GetValueWithDefault 根据键名获取设置值,不存在则返回默认值 func (r *SystemSettingRepo) GetValueWithDefault(key, defaultValue string) string { setting, err := r.GetByKey(key) if err != nil { return defaultValue } return setting.SettingValue }