fix: 需要资格的商品每个订单消耗1个资格

- 移除后台商品管理的资格消耗设置
- 修改后端资格检查和扣除逻辑为每个订单项消耗1个资格
- 修改前端显示为需要1个资格

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-06-10 18:08:26 +08:00
parent 057244d4b3
commit ec0a30c43d
4 changed files with 16 additions and 23 deletions
+8 -9
View File
@@ -47,13 +47,12 @@ func (h *CartHandler) Add(c *gin.Context) {
return
}
// 检查购物资格
// 检查购物资格(需要资格的商品,每个订单消耗1个资格)
if product.RequireCredit {
var user models.User
utils.DB.First(&user, userID)
totalCreditCost := product.CreditCost * req.Quantity
if user.PurchaseCredits < totalCreditCost {
c.JSON(http.StatusBadRequest, gin.H{"error": "Insufficient purchase credits. Required: " + strconv.Itoa(totalCreditCost) + ", Available: " + strconv.Itoa(user.PurchaseCredits)})
if user.PurchaseCredits < 1 {
c.JSON(http.StatusBadRequest, gin.H{"error": "Insufficient purchase credits. This product requires 1 credit per order."})
return
}
}
@@ -158,7 +157,7 @@ func checkOrderExpired(order *models.Order) {
if err := tx.First(&product, item.ProductID).Error; err == nil {
if product.RequireCredit {
tx.Model(&models.User{}).Where("id = ?", order.UserID).
UpdateColumn("purchase_credits", utils.DB.Raw("purchase_credits + ?", product.CreditCost*item.Quantity))
UpdateColumn("purchase_credits", utils.DB.Raw("purchase_credits + 1"))
}
if product.CreditReward > 0 {
tx.Model(&models.User{}).Where("id = ?", order.UserID).
@@ -265,7 +264,7 @@ func (h *OrderHandler) Create(c *gin.Context) {
if cart.Product.RequireCredit {
var user models.User
utils.DB.First(&user, userID)
if user.PurchaseCredits < cart.Product.CreditCost*cart.Quantity {
if user.PurchaseCredits < 1 {
c.JSON(http.StatusBadRequest, gin.H{"error": "Insufficient purchase credits for " + cart.Product.Name})
return
}
@@ -357,7 +356,7 @@ func (h *OrderHandler) Create(c *gin.Context) {
for _, cart := range carts {
if cart.Product.RequireCredit {
if err := tx.Model(&models.User{}).Where("id = ?", userID).
UpdateColumn("purchase_credits", utils.DB.Raw("purchase_credits - ?", cart.Product.CreditCost*cart.Quantity)).Error; err != nil {
UpdateColumn("purchase_credits", utils.DB.Raw("purchase_credits - 1")).Error; err != nil {
tx.Rollback()
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to deduct credits"})
return
@@ -541,7 +540,7 @@ func (h *OrderHandler) ProcessRefund(c *gin.Context) {
if err := tx.First(&product, item.ProductID).Error; err == nil {
if product.RequireCredit {
tx.Model(&models.User{}).Where("id = ?", order.UserID).
UpdateColumn("purchase_credits", utils.DB.Raw("purchase_credits + ?", product.CreditCost*item.Quantity))
UpdateColumn("purchase_credits", utils.DB.Raw("purchase_credits + 1"))
}
if product.CreditReward > 0 {
tx.Model(&models.User{}).Where("id = ?", order.UserID).
@@ -597,7 +596,7 @@ func (h *OrderHandler) CancelOrder(c *gin.Context) {
if err := tx.First(&product, item.ProductID).Error; err == nil {
if product.RequireCredit {
tx.Model(&models.User{}).Where("id = ?", order.UserID).
UpdateColumn("purchase_credits", utils.DB.Raw("purchase_credits + ?", product.CreditCost*item.Quantity))
UpdateColumn("purchase_credits", utils.DB.Raw("purchase_credits + 1"))
}
if product.CreditReward > 0 {
tx.Model(&models.User{}).Where("id = ?", order.UserID).