0
Fork 0
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:
Fabien "egg" O'Carroll 2022-11-30 19:16:13 +07:00
parent 04d9cbb1eb
commit 9c691f3ea9
4 changed files with 66 additions and 2 deletions

View file

@ -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({

View file

@ -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,

View file

@ -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

View file

@ -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,