refactor(ai): 重构AI接口算力点扣费逻辑并添加失败返还机制

- 移除预检查算力点步骤,改为请求前预扣算力点
- 添加请求失败时自动返还算力点的功能
- 修改copyAIResponse函数参数以支持失败回调处理
- 在响应状态异常时也执行算力点返还操作
- 从auth服务中移除EnsureUserCredits方法
- 新增RefundUserCredits方法用于返还用户算力点
- 添加AI_REFUND算力点日志类型常量
- 更新算力点日志类型说明及展示标签
This commit is contained in:
HouYunFei
2026-05-25 15:23:51 +08:00
parent 01f2a4d9d5
commit 2934b1d0bc
10 changed files with 98 additions and 178 deletions
+20 -5
View File
@@ -79,11 +79,6 @@ func SaveUser(user model.User) (model.User, error) {
return user, db.Save(&user).Error
}
func HasUserCredits(id string, credits int) (bool, error) {
user, ok, err := GetUserByID(id)
return ok && user.Credits >= credits, err
}
func ConsumeUserCredits(id string, credits int, now string) (model.User, bool, error) {
db, err := DB()
if err != nil {
@@ -104,6 +99,26 @@ func ConsumeUserCredits(id string, credits int, now string) (model.User, bool, e
return user, ok && tx.RowsAffected > 0, err
}
func RefundUserCredits(id string, credits int, now string) (model.User, bool, error) {
db, err := DB()
if err != nil {
return model.User{}, false, err
}
if credits <= 0 {
user, ok, err := GetUserByID(id)
return user, ok, err
}
tx := db.Model(&model.User{}).Where("id = ?", id).Updates(map[string]any{
"credits": gorm.Expr("credits + ?", credits),
"updated_at": now,
})
if tx.Error != nil {
return model.User{}, false, tx.Error
}
user, ok, err := GetUserByID(id)
return user, ok && tx.RowsAffected > 0, err
}
// SaveCreditLog 保存算力点变更流水。
func SaveCreditLog(log model.CreditLog) (model.CreditLog, error) {
db, err := DB()