Added MemberPaidSubscriptionEvent model

refs https://github.com/TryGhost/Ghost/issues/12602

- Adds the aggregateMRRDeltas option to the `findAll` method,
allowing us to calculate MRR over time
This commit is contained in:
Fabien O'Carroll 2021-02-12 13:15:47 +00:00 committed by Fabien 'egg' O'Carroll
parent a68d037cef
commit 7cf0252392
3 changed files with 48 additions and 0 deletions

View File

@ -29,6 +29,7 @@ const models = [
'mobiledoc-revision',
'member',
'member-subscribe-event',
'member-paid-subscription-event',
'member-login-event',
'member-email-change-event',
'member-payment-event',

View File

@ -0,0 +1,46 @@
const errors = require('@tryghost/errors');
const ghostBookshelf = require('./base');
const MemberPaidSubscriptionEvent = ghostBookshelf.Model.extend({
tableName: 'members_paid_subscription_events',
customQuery(qb, options) {
if (options.aggregateMRRDeltas) {
if (options.limit || options.filter) {
throw new errors.IncorrectUsageError('aggregateMRRDeltas does not work when passed a filter or limit');
}
const knex = ghostBookshelf.knex;
return qb.clear('select')
.select(knex.raw('DATE(created_at) as date'))
.select(knex.raw('SUM(mrr_delta) as mrr_delta'))
.select('currency')
.groupByRaw('currency, DATE(created_at)')
.orderByRaw('DATE(created_at)');
}
}
}, {
permittedOptions(methodName) {
const options = ghostBookshelf.Model.permittedOptions.call(this, methodName);
if (methodName === 'findAll') {
return options.concat('aggregateMRRDeltas');
}
return options;
},
async edit() {
throw new errors.IncorrectUsageError('Cannot edit MemberPaidSubscriptionEvent');
},
async destroy() {
throw new errors.IncorrectUsageError('Cannot destroy MemberPaidSubscriptionEvent');
}
});
const MemberPaidSubscriptionEvents = ghostBookshelf.Collection.extend({
model: MemberPaidSubscriptionEvent
});
module.exports = {
MemberPaidSubscriptionEvent: ghostBookshelf.model('MemberPaidSubscriptionEvent', MemberPaidSubscriptionEvent),
MemberPaidSubscriptionEvents: ghostBookshelf.collection('MemberPaidSubscriptionEvents', MemberPaidSubscriptionEvents)
};

View File

@ -170,6 +170,7 @@ function createApiInstance(config) {
StripeCustomerSubscription: models.StripeCustomerSubscription,
Member: models.Member,
MemberSubscribeEvent: models.MemberSubscribeEvent,
MemberPaidSubscriptionEvent: models.MemberPaidSubscriptionEvent,
MemberLoginEvent: models.MemberLoginEvent,
MemberEmailChangeEvent: models.MemberEmailChangeEvent,
MemberPaymentEvent: models.MemberPaymentEvent,