mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-11-28 05:37:34 +03:00
Populated members_{monthly,yearly}_price_id settings
refs https://github.com/TryGhost/Team/issues/698 As this migration relies on the `stripe_prices` table being populated, it can not be in a standard versioned migration in Ghost core.
This commit is contained in:
parent
81d96bbdd3
commit
ee32528006
@ -159,6 +159,10 @@ module.exports = function MembersApi({
|
|||||||
return stripeMigrations.populateStripePricesFromStripePlansSetting(stripeConfig.plans);
|
return stripeMigrations.populateStripePricesFromStripePlansSetting(stripeConfig.plans);
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
return stripeMigrations.updatePortalPlansSetting(stripeConfig.plans);
|
return stripeMigrations.updatePortalPlansSetting(stripeConfig.plans);
|
||||||
|
}).then(() => {
|
||||||
|
return stripeMigrations.populateMembersMonthlyPriceIdSettings();
|
||||||
|
}).then(() => {
|
||||||
|
return stripeMigrations.populateMembersYearlyPriceIdSettings();
|
||||||
}),
|
}),
|
||||||
stripeWebhookService.configure({
|
stripeWebhookService.configure({
|
||||||
webhookSecret: process.env.WEBHOOK_SECRET,
|
webhookSecret: process.env.WEBHOOK_SECRET,
|
||||||
|
@ -235,4 +235,150 @@ module.exports = class StripeMigrations {
|
|||||||
id: portalPlansSetting.id
|
id: portalPlansSetting.id
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async populateMembersMonthlyPriceIdSettings() {
|
||||||
|
this._logging.info('Populating members_monthly_price_id from stripe_plans');
|
||||||
|
const monthlyPriceId = await this._Settings.findOne({key: 'members_monthly_price_id'});
|
||||||
|
|
||||||
|
if (monthlyPriceId.get('value')) {
|
||||||
|
this._logging.info('Skipping population of members_monthly_price_id, already populated');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const stripePlans = await this._Settings.findOne({key: 'stripe_plans'});
|
||||||
|
let plans;
|
||||||
|
try {
|
||||||
|
plans = JSON.parse(stripePlans.get('value'));
|
||||||
|
} catch (err) {
|
||||||
|
this._logging.warn('Skipping population of members_monthly_price_id, could not parse stripe_plans');
|
||||||
|
}
|
||||||
|
|
||||||
|
const monthlyPlan = plans.find((plan) => {
|
||||||
|
return plan.name === 'Monthly';
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!monthlyPlan) {
|
||||||
|
this._logging.warn('Skipping population of members_monthly_price_id, could not find Monthly plan');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let monthlyPrice;
|
||||||
|
|
||||||
|
monthlyPrice = await this._StripePrice.findOne({
|
||||||
|
amount: monthlyPlan.amount,
|
||||||
|
currency: monthlyPlan.currency,
|
||||||
|
interval: monthlyPlan.interval,
|
||||||
|
active: true
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!monthlyPrice) {
|
||||||
|
this._logging.info('Could not find active Monthly price from stripe_plans - searching by interval');
|
||||||
|
monthlyPrice = await this._StripePrice.findOne({
|
||||||
|
interval: 'month',
|
||||||
|
active: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!monthlyPrice) {
|
||||||
|
this._logging.info('Could not any active Monthly price - creating a new one');
|
||||||
|
let defaultStripeProduct;
|
||||||
|
const stripeProductsPage = await this._StripeProduct.findPage({limit: 1});
|
||||||
|
defaultStripeProduct = stripeProductsPage.data[0];
|
||||||
|
const price = await this._stripeAPIService.createPrice({
|
||||||
|
currency: 'usd',
|
||||||
|
amount: 5000,
|
||||||
|
nickname: 'Monthly',
|
||||||
|
interval: 'month',
|
||||||
|
active: true,
|
||||||
|
type: 'recurring',
|
||||||
|
product: defaultStripeProduct.get('stripe_product_id')
|
||||||
|
});
|
||||||
|
|
||||||
|
monthlyPrice = await this._StripePrice.add({
|
||||||
|
stripe_price_id: price.id,
|
||||||
|
stripe_product_id: defaultStripeProduct.get('stripe_product_id'),
|
||||||
|
active: price.active,
|
||||||
|
nickname: price.nickname,
|
||||||
|
currency: price.currency,
|
||||||
|
amount: price.unit_amount,
|
||||||
|
type: 'recurring',
|
||||||
|
interval: price.recurring.interval
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
await this._Settings.edit({key: 'members_monthly_price_id', value: monthlyPrice.id}, {id: monthlyPriceId.id});
|
||||||
|
}
|
||||||
|
|
||||||
|
async populateMembersYearlyPriceIdSettings() {
|
||||||
|
this._logging.info('Populating members_yearly_price_id from stripe_plans');
|
||||||
|
const yearlyPriceId = await this._Settings.findOne({key: 'members_yearly_price_id'});
|
||||||
|
|
||||||
|
if (yearlyPriceId.get('value')) {
|
||||||
|
this._logging.info('Skipping population of members_yearly_price_id, already populated');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const stripePlans = await this._Settings.findOne({key: 'stripe_plans'});
|
||||||
|
let plans;
|
||||||
|
try {
|
||||||
|
plans = JSON.parse(stripePlans.get('value'));
|
||||||
|
} catch (err) {
|
||||||
|
this._logging.warn('Skipping population of members_yearly_price_id, could not parse stripe_plans');
|
||||||
|
}
|
||||||
|
|
||||||
|
const yearlyPlan = plans.find((plan) => {
|
||||||
|
return plan.name === 'Yearly';
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!yearlyPlan) {
|
||||||
|
this._logging.warn('Skipping population of members_yearly_price_id, could not find yearly plan');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let yearlyPrice;
|
||||||
|
|
||||||
|
yearlyPrice = await this._StripePrice.findOne({
|
||||||
|
amount: yearlyPlan.amount,
|
||||||
|
currency: yearlyPlan.currency,
|
||||||
|
interval: yearlyPlan.interval,
|
||||||
|
active: true
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!yearlyPrice) {
|
||||||
|
this._logging.info('Could not find active yearly price from stripe_plans - searching by interval');
|
||||||
|
yearlyPrice = await this._StripePrice.findOne({
|
||||||
|
interval: 'year',
|
||||||
|
active: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!yearlyPrice) {
|
||||||
|
this._logging.info('Could not any active yearly price - creating a new one');
|
||||||
|
let defaultStripeProduct;
|
||||||
|
const stripeProductsPage = await this._StripeProduct.findPage({limit: 1});
|
||||||
|
defaultStripeProduct = stripeProductsPage.data[0];
|
||||||
|
const price = await this._stripeAPIService.createPrice({
|
||||||
|
currency: 'usd',
|
||||||
|
amount: 500,
|
||||||
|
nickname: 'Yearly',
|
||||||
|
interval: 'year',
|
||||||
|
active: true,
|
||||||
|
type: 'recurring',
|
||||||
|
product: defaultStripeProduct.get('stripe_product_id')
|
||||||
|
});
|
||||||
|
|
||||||
|
yearlyPrice = await this._StripePrice.add({
|
||||||
|
stripe_price_id: price.id,
|
||||||
|
stripe_product_id: defaultStripeProduct.get('stripe_product_id'),
|
||||||
|
active: price.active,
|
||||||
|
nickname: price.nickname,
|
||||||
|
currency: price.currency,
|
||||||
|
amount: price.unit_amount,
|
||||||
|
type: 'recurring',
|
||||||
|
interval: price.recurring.interval
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
await this._Settings.edit({key: 'members_yearly_price_id', value: yearlyPrice.id}, {id: yearlyPriceId.id});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user