@coursebuilder/core
Version:
Core package for Course Builder
71 lines (70 loc) • 1.98 kB
JavaScript
import {
__name
} from "../../chunk-VLQXSCFN.js";
// src/lib/actions/prices-coupon-for-code.ts
import { isBefore } from "date-fns";
var validateCoupon = /* @__PURE__ */ __name((coupon, productIds = []) => {
if (!coupon) {
return {
isValid: false,
isRedeemable: false,
error: "coupon-not-found"
};
}
const isUsedUp = coupon.maxUses > 0 ? coupon.usedCount >= coupon.maxUses : false;
const isExpired = coupon.expires ? isBefore(new Date(coupon.expires), /* @__PURE__ */ new Date()) : false;
if (coupon.restrictedToProductId && !productIds.includes(coupon.restrictedToProductId)) {
return {
isValid: false,
isRedeemable: false,
error: "coupon-not-valid-for-product"
};
}
const isValid = !isUsedUp && !isExpired;
return {
isExpired,
isUsedUp,
isRedeemable: isValid && Number(coupon.percentageDiscount) >= 1 && !coupon.default,
isValid
};
}, "validateCoupon");
async function getCouponForCode(request, cookies, options) {
const { code, productIds } = request.body || {};
if (!code)
return {
body: null,
headers: {
"Content-Type": "application/json"
},
cookies
};
let couponFromCode = code && await options.adapter?.getCoupon(code);
if (couponFromCode) {
const is100Percent = productIds.length === 0 && couponFromCode.restrictedToProductId && couponFromCode.percentageDiscount === 1;
const validatedCoupon = validateCoupon(couponFromCode, is100Percent ? [
couponFromCode?.restrictedToProductId
] : productIds);
return {
body: {
...couponFromCode,
...validatedCoupon
},
headers: {
"Content-Type": "application/json"
},
cookies
};
}
return {
body: null,
headers: {
"Content-Type": "application/json"
},
cookies
};
}
__name(getCouponForCode, "getCouponForCode");
export {
getCouponForCode
};
//# sourceMappingURL=prices-coupon-for-code.js.map