fix: 删稿扣域能增加一致性保障(事务包裹 + 有限重试)

- DeductOnDeletePost 使用 DB 事务包裹 AddEnergy + CreateEnergyLog,确保扣域能写流水原子性
- Controller 层增加 3 次指数退避重试(100ms/200ms/400ms),全部失败后 log.Printf 记录
- 保持原行为:扣减无视负数,失败不阻塞删稿主流程
This commit is contained in:
2026-06-01 13:01:45 +08:00
parent 5248e91a3d
commit b44d7ca5c3
2 changed files with 33 additions and 14 deletions

View File

@ -1,8 +1,10 @@
package controller
import (
"log"
"net/http"
"strconv"
"time"
"metazone.cc/metalab/internal/common"
"metazone.cc/metalab/internal/model"
@ -349,9 +351,21 @@ func (ctrl *StudioController) Delete(c *gin.Context) {
return
}
// 删稿扣作者域能(无视负数,静默失败
// 删稿扣作者域能(无视负数,有限重试后静默忽略
if ctrl.energySvc != nil {
_ = ctrl.energySvc.DeductOnDeletePost(authorID, uint(id))
const maxRetries = 3
backoff := 100 * time.Millisecond
for i := 0; i < maxRetries; i++ {
if err := ctrl.energySvc.DeductOnDeletePost(authorID, uint(id)); err == nil {
break
}
if i < maxRetries-1 {
time.Sleep(backoff)
backoff *= 2
} else {
log.Printf("删稿扣域能失败(user=%d, post=%d): %v", authorID, id, err)
}
}
}
common.OkMessage(c, "删除成功")