From 76816ca8ea46f965ce675a8e3e7dbd8f3a6730df Mon Sep 17 00:00:00 2001 From: Chang lue Tsen Date: Mon, 7 Jul 2025 12:28:44 -0400 Subject: [PATCH] fix(purchase): handle gift amount deduction and update order status in checkout logic --- .../logic/public/portal/purchaseCheckoutLogic.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/internal/logic/public/portal/purchaseCheckoutLogic.go b/internal/logic/public/portal/purchaseCheckoutLogic.go index e82db08..e7e293a 100644 --- a/internal/logic/public/portal/purchaseCheckoutLogic.go +++ b/internal/logic/public/portal/purchaseCheckoutLogic.go @@ -284,11 +284,21 @@ func (l *PurchaseCheckoutLogic) balancePayment(u *user.User, o *order.Order) err return err } + if o.GiftAmount != 0 { + if userInfo.GiftAmount < o.GiftAmount { + return errors.Wrapf(xerr.NewErrCode(xerr.InsufficientBalance), "Insufficient gift balance") + } + // deduct gift amount + userInfo.GiftAmount -= o.GiftAmount + } + if userInfo.Balance < o.Amount { return errors.Wrapf(xerr.NewErrCode(xerr.InsufficientBalance), "Insufficient balance") } // deduct balance userInfo.Balance -= o.Amount + + userInfo.GiftAmount -= o.GiftAmount err = l.svcCtx.UserModel.Update(l.ctx, &userInfo) if err != nil { return err @@ -306,7 +316,9 @@ func (l *PurchaseCheckoutLogic) balancePayment(u *user.User, o *order.Order) err if err != nil { return err } - return l.svcCtx.OrderModel.UpdateOrderStatus(l.ctx, o.OrderNo, 2) + return db.Model(&order.Order{}).Where("id = ?", o.Id).Updates(map[string]interface{}{ + "status": 2, // 2 means paid + }).Error }) if err != nil { l.Errorw("[CheckoutOrderLogic] Transaction error", logger.Field("error", err.Error()), logger.Field("orderNo", o.OrderNo))