28 lines
735 B
Go
Executable File

package order
import "bindbox-game/internal/repository/mysql/model"
func ApplyCouponDiscount(amount int64, c *model.SystemCoupons, minSpendOK bool) int64 {
if c == nil || amount <= 0 || !minSpendOK { return 0 }
switch c.DiscountType {
case 1:
return clamp(c.DiscountValue, 0, amount)
case 2:
return clamp(c.DiscountValue, 0, amount)
case 3:
rate := c.DiscountValue
if rate < 0 { rate = 0 }
if rate > 1000 { rate = 1000 }
newAmt := amount * rate / 1000
return clamp(amount - newAmt, 0, amount)
default:
return 0
}
}
func clamp(v int64, min int64, max int64) int64 {
if v < min { return min }
if v > max { return max }
return v
}