Change property name for recurly status cache to recurlyStatus (#11154)

* Change property name for recurly status cache to recurlyStatus

Co-authored-by: Lucie Germain <lucie.germain@overleaf.com>
GitOrigin-RevId: a1ff69d531519cd15b82ef72974e9702f43409ac
This commit is contained in:
Thomas 2023-01-24 12:55:24 +01:00 committed by Copybot
parent 69fe1749ce
commit 0b6c69dc55
4 changed files with 61 additions and 7 deletions

View file

@ -249,7 +249,7 @@ async function updateSubscriptionFromRecurly(
subscription.recurlySubscription_id = recurlySubscription.uuid subscription.recurlySubscription_id = recurlySubscription.uuid
subscription.planCode = updatedPlanCode subscription.planCode = updatedPlanCode
subscription.recurly = { subscription.recurlyStatus = {
state: recurlySubscription.state, state: recurlySubscription.state,
trialStartedAt: recurlySubscription.trial_started_at, trialStartedAt: recurlySubscription.trial_started_at,
trialEndsAt: recurlySubscription.trial_ends_at, trialEndsAt: recurlySubscription.trial_ends_at,

View file

@ -193,6 +193,7 @@ function buildUsersSubscriptionViewModel(user, callback) {
// Subscription DB object contains a recurly property, used to cache trial info // Subscription DB object contains a recurly property, used to cache trial info
// on the project-list. However, this can cause the wrong template to render, // on the project-list. However, this can cause the wrong template to render,
// if we do not have any subscription data from Recurly (recurlySubscription) // if we do not have any subscription data from Recurly (recurlySubscription)
// TODO: Delete this workaround once recurly cache property name migration rolled out.
if (personalSubscription) { if (personalSubscription) {
delete personalSubscription.recurly delete personalSubscription.recurly
} }
@ -354,7 +355,7 @@ async function getBestSubscription(user) {
individualSubscription && individualSubscription &&
!individualSubscription.customAccount && !individualSubscription.customAccount &&
individualSubscription.recurlySubscription_id && individualSubscription.recurlySubscription_id &&
!individualSubscription.recurly?.state !individualSubscription.recurlyStatus?.state
) { ) {
const recurlySubscription = await RecurlyWrapper.promises.getSubscription( const recurlySubscription = await RecurlyWrapper.promises.getSubscription(
individualSubscription.recurlySubscription_id, individualSubscription.recurlySubscription_id,
@ -480,7 +481,7 @@ function _isPlanEqualOrBetter(planA, planB) {
function _getRemainingTrialDays(subscription) { function _getRemainingTrialDays(subscription) {
const now = new Date() const now = new Date()
const trialEndDate = subscription.recurly?.trialEndsAt const trialEndDate = subscription.recurlyStatus?.trialEndsAt
return trialEndDate && trialEndDate > now return trialEndDate && trialEndDate > now
? Math.ceil( ? Math.ceil(
(trialEndDate.getTime() - now.getTime()) / (24 * 60 * 60 * 1000) (trialEndDate.getTime() - now.getTime()) / (24 * 60 * 60 * 1000)

View file

@ -0,0 +1,53 @@
/* eslint-disable no-unused-vars */
const Helpers = require('./lib/helpers')
exports.tags = ['saas']
exports.migrate = async client => {
const { db } = client
// 'recurly' -> 'recurlyStatus'
await db.subscriptions.updateMany(
{
$and: [
{ recurlyStatus: { $exists: false } },
{ recurly: { $exists: true } },
],
},
{ $rename: { recurly: 'recurlyStatus' } }
)
// some records may have already recached the recurly status, discard old cache
await db.subscriptions.updateMany(
{
$and: [
{ recurlyStatus: { $exists: true } },
{ recurly: { $exists: true } },
],
},
{ $unset: { recurly: 1 } }
)
}
exports.rollback = async client => {
const { db } = client
// 'recurlyStatus' -> 'recurly'
await db.subscriptions.updateMany(
{
$and: [
{ recurly: { $exists: false } },
{ recurlyStatus: { $exists: true } },
],
},
{ $rename: { recurlyStatus: 'recurly' } }
)
// some records may have already recached the recurly status, discard old cache
await db.subscriptions.updateMany(
{
$and: [
{ recurlyStatus: { $exists: true } },
{ recurly: { $exists: true } },
],
},
{ $unset: { recurlyStatus: 1 } }
)
}

View file

@ -22,7 +22,7 @@ describe('SubscriptionViewModelBuilder', function () {
planCode: this.planCode, planCode: this.planCode,
plan: this.plan, plan: this.plan,
recurlySubscription_id: this.recurlySubscription_id, recurlySubscription_id: this.recurlySubscription_id,
recurly: { recurlyStatus: {
state: 'active', state: 'active',
}, },
} }
@ -46,7 +46,7 @@ describe('SubscriptionViewModelBuilder', function () {
this.groupSubscription = { this.groupSubscription = {
planCode: this.groupPlanCode, planCode: this.groupPlanCode,
plan: this.plan, plan: this.plan,
recurly: { recurlyStatus: {
state: 'active', state: 'active',
}, },
} }
@ -168,7 +168,7 @@ describe('SubscriptionViewModelBuilder', function () {
it('should return a individual subscription with remaining free trial days', async function () { it('should return a individual subscription with remaining free trial days', async function () {
const threeDaysLater = new Date() const threeDaysLater = new Date()
threeDaysLater.setDate(threeDaysLater.getDate() + 3) threeDaysLater.setDate(threeDaysLater.getDate() + 3)
this.individualSubscription.recurly.trialEndsAt = threeDaysLater this.individualSubscription.recurlyStatus.trialEndsAt = threeDaysLater
this.SubscriptionLocator.promises.getUsersSubscription this.SubscriptionLocator.promises.getUsersSubscription
.withArgs(this.user) .withArgs(this.user)
.resolves(this.individualSubscription) .resolves(this.individualSubscription)
@ -189,7 +189,7 @@ describe('SubscriptionViewModelBuilder', function () {
it('should return a individual subscription with free trial on last day', async function () { it('should return a individual subscription with free trial on last day', async function () {
const threeHoursLater = new Date() const threeHoursLater = new Date()
threeHoursLater.setTime(threeHoursLater.getTime() + 3 * 60 * 60 * 1000) threeHoursLater.setTime(threeHoursLater.getTime() + 3 * 60 * 60 * 1000)
this.individualSubscription.recurly.trialEndsAt = threeHoursLater this.individualSubscription.recurlyStatus.trialEndsAt = threeHoursLater
this.SubscriptionLocator.promises.getUsersSubscription this.SubscriptionLocator.promises.getUsersSubscription
.withArgs(this.user) .withArgs(this.user)
.resolves(this.individualSubscription) .resolves(this.individualSubscription)