diff --git a/backend/internal/api/handlers/order.go b/backend/internal/api/handlers/order.go index fd81243..4f7ebc7 100644 --- a/backend/internal/api/handlers/order.go +++ b/backend/internal/api/handlers/order.go @@ -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). diff --git a/frontend/src/views/admin/Products.vue b/frontend/src/views/admin/Products.vue index 7075495..5fbff28 100644 --- a/frontend/src/views/admin/Products.vue +++ b/frontend/src/views/admin/Products.vue @@ -133,17 +133,13 @@