mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-03-11 02:12:21 -05:00
Added support for EmailSpamComplaintEvent to activity feed
We need to add relations and filterRelations to the model so that we can correctly filter events by post_id and member_id
This commit is contained in:
parent
04d9cbb1eb
commit
9c691f3ea9
4 changed files with 66 additions and 2 deletions
|
@ -2,7 +2,29 @@ const errors = require('@tryghost/errors');
|
|||
const ghostBookshelf = require('./base');
|
||||
|
||||
const EmailSpamComplaintEvent = ghostBookshelf.Model.extend({
|
||||
tableName: 'email_spam_complaint_events'
|
||||
tableName: 'email_spam_complaint_events',
|
||||
|
||||
filterRelations: function filterRelations() {
|
||||
return {
|
||||
email: {
|
||||
// Mongo-knex doesn't support belongsTo relations
|
||||
tableName: 'emails',
|
||||
tableNameAs: 'email',
|
||||
type: 'manyToMany',
|
||||
joinTable: 'email_spam_complaint_events',
|
||||
joinFrom: 'id',
|
||||
joinTo: 'email_id'
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
email() {
|
||||
return this.belongsTo('Email', 'email_id');
|
||||
},
|
||||
|
||||
member() {
|
||||
return this.belongsTo('Member', 'member_id');
|
||||
}
|
||||
}, {
|
||||
async edit() {
|
||||
throw new errors.IncorrectUsageError({
|
||||
|
|
|
@ -197,7 +197,8 @@ function createApiInstance(config) {
|
|||
Product: models.Product,
|
||||
Settings: models.Settings,
|
||||
Comment: models.Comment,
|
||||
MemberFeedback: models.MemberFeedback
|
||||
MemberFeedback: models.MemberFeedback,
|
||||
EmailSpamComplaintEvent: models.EmailSpamComplaintEvent
|
||||
},
|
||||
stripeAPIService: stripeService.api,
|
||||
tiersService: tiersService,
|
||||
|
|
|
@ -50,6 +50,7 @@ module.exports = function MembersAPI({
|
|||
MemberCreatedEvent,
|
||||
SubscriptionCreatedEvent,
|
||||
MemberLinkClickEvent,
|
||||
EmailSpamComplaintEvent,
|
||||
Offer,
|
||||
OfferRedemption,
|
||||
StripeProduct,
|
||||
|
@ -112,6 +113,7 @@ module.exports = function MembersAPI({
|
|||
SubscriptionCreatedEvent,
|
||||
MemberLinkClickEvent,
|
||||
MemberFeedback,
|
||||
EmailSpamComplaintEvent,
|
||||
Comment,
|
||||
labsService,
|
||||
memberAttributionService
|
||||
|
|
|
@ -27,6 +27,7 @@ module.exports = class EventRepository {
|
|||
MemberPaidSubscriptionEvent,
|
||||
MemberLinkClickEvent,
|
||||
MemberFeedback,
|
||||
EmailSpamComplaintEvent,
|
||||
Comment,
|
||||
labsService,
|
||||
memberAttributionService
|
||||
|
@ -43,6 +44,7 @@ module.exports = class EventRepository {
|
|||
this._SubscriptionCreatedEvent = SubscriptionCreatedEvent;
|
||||
this._MemberLinkClickEvent = MemberLinkClickEvent;
|
||||
this._MemberFeedback = MemberFeedback;
|
||||
this._EmailSpamComplaintEvent = EmailSpamComplaintEvent;
|
||||
this._memberAttributionService = memberAttributionService;
|
||||
}
|
||||
|
||||
|
@ -82,6 +84,10 @@ module.exports = class EventRepository {
|
|||
pageActions.push({type: 'email_failed_event', action: 'getEmailFailedEvents'});
|
||||
}
|
||||
|
||||
if (this._labsService.isSet('suppressionList')) {
|
||||
pageActions.push({type: 'email_complained_event', action: 'getEmailSpamComplaintEvents'});
|
||||
}
|
||||
|
||||
if (this._labsService.isSet('audienceFeedback')) {
|
||||
pageActions.push({type: 'feedback_event', action: 'getFeedbackEvents'});
|
||||
}
|
||||
|
@ -627,6 +633,39 @@ module.exports = class EventRepository {
|
|||
};
|
||||
}
|
||||
|
||||
async getEmailSpamComplaintEvents(options = {}, filter) {
|
||||
options = {
|
||||
...options,
|
||||
withRelated: ['member', 'email'],
|
||||
filter: 'custom:true',
|
||||
mongoTransformer: chainTransformers(
|
||||
// First set the filter manually
|
||||
replaceCustomFilterTransformer(filter),
|
||||
|
||||
// Map the used keys in that filter
|
||||
...mapKeys({
|
||||
'data.created_at': 'created_at',
|
||||
'data.member_id': 'member_id',
|
||||
'data.post_id': 'email.post_id'
|
||||
})
|
||||
)
|
||||
};
|
||||
|
||||
const {data: models, meta} = await this._EmailSpamComplaintEvent.findPage(options);
|
||||
|
||||
const data = models.map((model) => {
|
||||
return {
|
||||
type: 'email_complaint_event',
|
||||
data: model.toJSON(options)
|
||||
};
|
||||
});
|
||||
|
||||
return {
|
||||
data,
|
||||
meta
|
||||
};
|
||||
}
|
||||
|
||||
async getEmailFailedEvents(options = {}, filter) {
|
||||
options = {
|
||||
...options,
|
||||
|
|
Loading…
Add table
Reference in a new issue