Improve handling

This commit is contained in:
Phillip Thelen
2022-11-30 15:06:50 +01:00
committed by Phillip Thelen
parent 0f7001b609
commit 82a1d6ff0e
3 changed files with 21 additions and 23 deletions

View File

@@ -106,32 +106,16 @@ async function grantEndOfTheMonthPerks (user, now) {
planMonthsLength = getPlanMonths(plan);
}
// every 3 months you get one set of perks - this variable records how many sets you need
let perkAmountNeeded = 0;
if (planMonthsLength === 1) {
// User has a single-month recurring subscription and are due for perks
// IF they've been subscribed for a multiple of 3 months.
if (plan.consecutive.count % SUBSCRIPTION_BASIC_BLOCK_LENGTH === 0) { // every 3 months
perkAmountNeeded = 1;
}
plan.consecutive.offset = 0; // allow the same logic to be run next month
} else {
// User has a multi-month recurring subscription
// and it renewed in the previous calendar month.
// e.g., for a 6-month subscription, give two sets of perks
perkAmountNeeded = planMonthsLength / SUBSCRIPTION_BASIC_BLOCK_LENGTH;
// don't need to check for perks again for this many months
// (subtract 1 because we should have run this when the payment was taken last month)
plan.consecutive.offset = planMonthsLength - 1;
}
if (perkAmountNeeded > 0) {
// one Hourglass every 3 months
await plan.updateHourglasses(user._id, perkAmountNeeded, 'subscription_perks'); // eslint-disable-line no-await-in-loop
plan.consecutive.gemCapExtra += 5 * perkAmountNeeded; // 5 extra Gems every 3 months
// cap it at 50 (hard 25 limit + extra 25)
if (plan.consecutive.gemCapExtra > 25) plan.consecutive.gemCapExtra = 25;
}
await plan.incrementPerkCounterAndReward(user._id, planMonthsLength);
}
}
}

View File

@@ -246,12 +246,11 @@ async function createSubscription (data) {
} = await prepareSubscriptionValues(data);
// Block sub perks
const perks = Math.floor(months / 3);
if (perks) {
plan.consecutive.offset += months;
plan.consecutive.gemCapExtra += perks * 5;
if (plan.consecutive.gemCapExtra > 25) plan.consecutive.gemCapExtra = 25;
await plan.updateHourglasses(recipient._id, perks, 'subscription_perks'); // one Hourglass every 3 months
if (months > 0) {
if (!data.gift && !groupId) {
plan.consecutive.offset = months;
}
await plan.incrementPerkCounterAndReward(recipient._id, months);
}
if (recipient !== group) {