Added MemberProductEvent model & relations

refs https://github.com/TryGhost/Team/issues/873

We need a relation between members and their product events so that we
can pull out the events for a particular member to generate the start
date of their comped access to a product.
This commit is contained in:
Fabien O'Carroll 2021-08-23 14:10:12 +02:00
parent 734f1c4422
commit 55f249a328
3 changed files with 47 additions and 0 deletions

View File

@ -38,6 +38,7 @@ const models = [
'member-email-change-event',
'member-payment-event',
'member-status-event',
'member-product-event',
'posts-meta',
'member-stripe-customer',
'stripe-customer-subscription',

View File

@ -0,0 +1,41 @@
const errors = require('@tryghost/errors');
const tpl = require('@tryghost/tpl');
const ghostBookshelf = require('./base');
const messages = {
cannotPerformAction: 'Cannot {action} MemberProductEvent'
};
const MemberProductEvent = ghostBookshelf.Model.extend({
tableName: 'members_product_events',
member() {
return this.belongsTo('Member', 'member_id', 'id');
},
product() {
return this.belongsTo('Product', 'product_id', 'id');
}
}, {
async edit() {
throw new errors.IncorrectUsageError(
tpl(messages.cannotPerformAction, 'edit')
);
},
async destroy() {
throw new errors.IncorrectUsageError(
tpl(messages.cannotPerformAction, 'destroy')
);
}
});
const MemberProductEvents = ghostBookshelf.Collection.extend({
model: MemberProductEvent
});
module.exports = {
MemberProductEvent: ghostBookshelf.model('MemberProductEvent', MemberProductEvent),
MemberProductEvents: ghostBookshelf.collection('MemberProductEvents', MemberProductEvents)
};

View File

@ -78,6 +78,11 @@ const Member = ghostBookshelf.Model.extend({
email_recipients: 'email_recipients'
},
productEvents() {
return this.hasMany('MemberProductEvent', 'member_id', 'id')
.query('orderBy', 'created_at', 'DESC');
},
products() {
return this.belongsToMany('Product', 'members_products', 'member_id', 'product_id')
.withPivot('sort_order')