diff --git a/internal/logic/public/order/getDiscount.go b/internal/logic/public/order/getDiscount.go index df76128..af21ced 100644 --- a/internal/logic/public/order/getDiscount.go +++ b/internal/logic/public/order/getDiscount.go @@ -2,10 +2,13 @@ package order import "github.com/perfect-panel/server/internal/types" -func getDiscount(discounts []types.SubscribeDiscount, inputMonths int64) float64 { +func getDiscount(discounts []types.SubscribeDiscount, inputMonths int64, isNewUser bool) float64 { var finalDiscount float64 = 100 for _, discount := range discounts { + if discount.NewUserOnly && !isNewUser { + continue + } if inputMonths >= discount.Quantity && discount.Discount < finalDiscount { finalDiscount = discount.Discount } diff --git a/internal/logic/public/order/preCreateOrderLogic.go b/internal/logic/public/order/preCreateOrderLogic.go index 711306b..3202c6d 100644 --- a/internal/logic/public/order/preCreateOrderLogic.go +++ b/internal/logic/public/order/preCreateOrderLogic.go @@ -133,10 +133,11 @@ func (l *PreCreateOrderLogic) PreCreateOrder(req *types.PurchaseOrderRequest) (r } var discount float64 = 1 + isNewUserForDiscount := time.Since(u.CreatedAt) <= 24*time.Hour if sub.Discount != "" { var dis []types.SubscribeDiscount _ = json.Unmarshal([]byte(sub.Discount), &dis) - discount = getDiscount(dis, req.Quantity) + discount = getDiscount(dis, req.Quantity, isNewUserForDiscount) } price := sub.UnitPrice * req.Quantity diff --git a/internal/logic/public/order/purchaseLogic.go b/internal/logic/public/order/purchaseLogic.go index a8cb010..0f21651 100644 --- a/internal/logic/public/order/purchaseLogic.go +++ b/internal/logic/public/order/purchaseLogic.go @@ -129,10 +129,11 @@ func (l *PurchaseLogic) Purchase(req *types.PurchaseOrderRequest) (resp *types.P } var discount float64 = 1 + isNewUserForDiscount := time.Since(u.CreatedAt) <= 24*time.Hour if sub.Discount != "" { var dis []types.SubscribeDiscount _ = json.Unmarshal([]byte(sub.Discount), &dis) - discount = getDiscount(dis, req.Quantity) + discount = getDiscount(dis, req.Quantity, isNewUserForDiscount) } price := sub.UnitPrice * req.Quantity // discount amount diff --git a/internal/logic/public/order/renewalLogic.go b/internal/logic/public/order/renewalLogic.go index 8f1c6d3..ddda14b 100644 --- a/internal/logic/public/order/renewalLogic.go +++ b/internal/logic/public/order/renewalLogic.go @@ -83,7 +83,7 @@ func (l *RenewalLogic) Renewal(req *types.RenewalOrderRequest) (resp *types.Rene if sub.Discount != "" { var dis []types.SubscribeDiscount _ = json.Unmarshal([]byte(sub.Discount), &dis) - discount = getDiscount(dis, req.Quantity) + discount = getDiscount(dis, req.Quantity, false) } price := sub.UnitPrice * req.Quantity amount := int64(math.Round(float64(price) * discount)) diff --git a/internal/logic/public/portal/prePurchaseOrderLogic.go b/internal/logic/public/portal/prePurchaseOrderLogic.go index 87eeced..b6101c6 100644 --- a/internal/logic/public/portal/prePurchaseOrderLogic.go +++ b/internal/logic/public/portal/prePurchaseOrderLogic.go @@ -41,7 +41,7 @@ func (l *PrePurchaseOrderLogic) PrePurchaseOrder(req *types.PrePurchaseOrderRequ if sub.Discount != "" { var dis []types.SubscribeDiscount _ = json.Unmarshal([]byte(sub.Discount), &dis) - discount = getDiscount(dis, req.Quantity) + discount = getDiscount(dis, req.Quantity, true) } price := sub.UnitPrice * req.Quantity amount := int64(math.Round(float64(price) * discount)) diff --git a/internal/logic/public/portal/purchaseLogic.go b/internal/logic/public/portal/purchaseLogic.go index a7bfd42..3431599 100644 --- a/internal/logic/public/portal/purchaseLogic.go +++ b/internal/logic/public/portal/purchaseLogic.go @@ -73,7 +73,7 @@ func (l *PurchaseLogic) Purchase(req *types.PortalPurchaseRequest) (resp *types. if sub.Discount != "" { var dis []types.SubscribeDiscount _ = json.Unmarshal([]byte(sub.Discount), &dis) - discount = getDiscount(dis, req.Quantity) + discount = getDiscount(dis, req.Quantity, true) } price := sub.UnitPrice * req.Quantity // discount amount diff --git a/internal/logic/public/portal/tool.go b/internal/logic/public/portal/tool.go index f687e2a..2fa92b6 100644 --- a/internal/logic/public/portal/tool.go +++ b/internal/logic/public/portal/tool.go @@ -6,10 +6,13 @@ import ( "github.com/perfect-panel/server/internal/types" ) -func getDiscount(discounts []types.SubscribeDiscount, inputMonths int64) float64 { +func getDiscount(discounts []types.SubscribeDiscount, inputMonths int64, isNewUser bool) float64 { var finalDiscount float64 = 100 for _, discount := range discounts { + if discount.NewUserOnly && !isNewUser { + continue + } if inputMonths >= discount.Quantity && discount.Discount < finalDiscount { finalDiscount = discount.Discount }