0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-01-06 22:40:14 -05:00

Added customQuery to handle subscribed aggregates

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

In order to build up a list of un/subscribes over time we have to use
the customQuery functionality to run SQL aggregates - this is "hidden"
behind an option, so that we can find{All,Page} as usual.
This commit is contained in:
Fabien O'Carroll 2021-02-04 12:41:30 +00:00 committed by Fabien 'egg' O'Carroll
parent 3dbc7ef5b4
commit 1dc6fdcd66

View file

@ -1,6 +1,22 @@
const errors = require('@tryghost/errors');
const ghostBookshelf = require('./base');
const MemberSubscribeEvent = ghostBookshelf.Model.extend({tableName: 'members_subscribe_events'}, {
const MemberSubscribeEvent = ghostBookshelf.Model.extend({
tableName: 'members_subscribe_events',
customQuery(qb, options) {
if (options.aggregateSubscriptionDeltas) {
if (options.limit || options.filter) {
throw new errors.IncorrectUsageError('aggregateSubscriptionDeltas 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(CASE WHEN subscribed THEN 1 ELSE -1 END) as subscribed_delta`))
.groupByRaw(`DATE(created_at)`)
.orderByRaw(`DATE(created_at)`);
}
}
}, {
async edit() {
throw new errors.IncorrectUsageError('Cannot edit MemberSubscribeEvent');
},