修复全量审查问题;设置接口PATCH化;回传指纹加固
CI / test (push) Successful in 32s

This commit is contained in:
2026-07-22 16:51:23 +08:00
parent 0614ef22af
commit f51fb6c722
66 changed files with 3997 additions and 687 deletions
+22 -1
View File
@@ -81,8 +81,29 @@ func (s *SettingService) get(ctx context.Context, key string) (string, error) {
// set 写入键值(key 为主键,Save 即 upsert)。
func (s *SettingService) set(ctx context.Context, key, value string) error {
if err := saveSettingTx(s.db.WithContext(ctx), key, value); err != nil {
return err
}
return nil
}
// settingValueTx / saveSettingTx 是事务内变体:供跨表不变量(如「至少保留一种
// 登录方式」)在同一事务与用户行锁下读写开关,与 get/set 同表同形。
func settingValueTx(tx *gorm.DB, key string) (string, error) {
var st model.Setting
err := tx.First(&st, "key = ?", key).Error
if errors.Is(err, gorm.ErrRecordNotFound) {
return "", nil
}
if err != nil {
return "", fmt.Errorf("get setting %s: %w", key, err)
}
return st.Value, nil
}
func saveSettingTx(tx *gorm.DB, key, value string) error {
st := model.Setting{Key: key, Value: value, UpdatedAt: time.Now()}
if err := s.db.WithContext(ctx).Save(&st).Error; err != nil {
if err := tx.Save(&st).Error; err != nil {
return fmt.Errorf("set setting %s: %w", key, err)
}
return nil