Ghost/core/server/models/member-subscribe-event.js
Simon Backx 2cf76cb031
Added newsletter relation to subscribe events (#14585)
refs https://github.com/TryGhost/Team/issues/1478

**Changes**
- Added the newsletter relation to subscribe events

**Changes in `members-api`**
- Compare: https://github.com/TryGhost/Members/compare/%40tryghost/members-api%406.0.0-alpha.0...%40tryghost/members-api%406.0.0
- Makes sure the newsletter relation is returned in the activity feed for susbcribe events (aka newsletter events).

**Tests**
- Added first test for activity feed to check if the newsletter relation is correctly fetched
2022-04-27 16:44:27 +02:00

61 lines
1.9 KiB
JavaScript

const errors = require('@tryghost/errors');
const ghostBookshelf = require('./base');
const MemberSubscribeEvent = ghostBookshelf.Model.extend({
tableName: 'members_subscribe_events',
member() {
return this.belongsTo('Member', 'member_id', 'id');
},
newsletter() {
return this.belongsTo('Newsletter', 'newsletter_id', 'id');
},
customQuery(qb, options) {
if (options.aggregateSubscriptionDeltas) {
if (options.limit || options.filter) {
throw new errors.IncorrectUsageError({
message: '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)`);
}
}
}, {
permittedOptions(methodName) {
const options = ghostBookshelf.Model.permittedOptions.call(this, methodName);
if (methodName === 'findAll') {
return options.concat('aggregateSubscriptionDeltas');
}
return options;
},
async edit() {
throw new errors.IncorrectUsageError({
message: 'Cannot edit MemberSubscribeEvent'
});
},
async destroy() {
throw new errors.IncorrectUsageError({
message: 'Cannot destroy MemberSubscribeEvent'
});
}
});
const MemberSubscribeEvents = ghostBookshelf.Collection.extend({
model: MemberSubscribeEvent
});
module.exports = {
MemberSubscribeEvent: ghostBookshelf.model('MemberSubscribeEvent', MemberSubscribeEvent),
MemberSubscribeEvents: ghostBookshelf.collection('MemberSubscribeEvents', MemberSubscribeEvents)
};