refactor: deprecate int32 (#7025)

* refactor: deprecate int32

* fix(db): reject legacy user quota schemas at startup

* fix(quota): enforce wallet bounds and saturating billing conversions

* fix(rate-limit): keep count*duration from wrapping int64

* fix: error message
This commit is contained in:
Seefs
2026-08-26 20:57:54 +08:00
committed by GitHub
parent 2d8e50bf36
commit a073f74b38
35 changed files with 445 additions and 116 deletions
+32 -10
View File
@@ -1271,25 +1271,47 @@ func IncreaseUserQuota(id int, quota int, db bool) (err error) {
if quota < 0 {
return errors.New("quota 不能为负数!")
}
if err := common.ValidateWalletQuota(quota); err != nil {
return err
}
if !db && common.BatchUpdateEnabled {
addNewRecord(BatchUpdateTypeUserQuota, id, quota)
gopool.Go(func() {
if err := cacheIncrUserQuota(id, int64(quota)); err != nil {
common.SysLog("failed to increase user quota: " + err.Error())
}
})
return nil
}
if err := increaseUserQuota(id, quota); err != nil {
return err
}
gopool.Go(func() {
err := cacheIncrUserQuota(id, int64(quota))
if err != nil {
if err := cacheIncrUserQuota(id, int64(quota)); err != nil {
common.SysLog("failed to increase user quota: " + err.Error())
}
})
if !db && common.BatchUpdateEnabled {
addNewRecord(BatchUpdateTypeUserQuota, id, quota)
return nil
}
return increaseUserQuota(id, quota)
return nil
}
func increaseUserQuota(id int, quota int) (err error) {
err = DB.Model(&User{}).Where("id = ?", id).Update("quota", gorm.Expr("quota + ?", quota)).Error
if err != nil {
result := DB.Model(&User{}).
Where("id = ? AND quota <= ?", id, common.MaxWalletQuota-quota).
Update("quota", gorm.Expr("quota + ?", quota))
if result.Error != nil {
return result.Error
}
if result.RowsAffected == 1 {
return nil
}
var count int64
if err := DB.Model(&User{}).Where("id = ?", id).Count(&count).Error; err != nil {
return err
}
return err
if count == 0 {
return gorm.ErrRecordNotFound
}
return ErrWalletQuotaLimitExceeded
}
func DecreaseUserQuota(id int, quota int, db bool) (err error) {