diff --git a/ghost/members-api/lib/services/member-bread.js b/ghost/members-api/lib/services/member-bread.js index eb5efd970d..b6c26ff7ae 100644 --- a/ghost/members-api/lib/services/member-bread.js +++ b/ghost/members-api/lib/services/member-bread.js @@ -1,3 +1,5 @@ +const moment = require('moment'); + module.exports = class MemberBREADService { /** * @param {object} deps @@ -18,6 +20,10 @@ module.exports = class MemberBREADService { const withRelated = new Set((options.withRelated || []).concat(defaultWithRelated)); + if (!withRelated.has('productEvents')) { + withRelated.add('productEvents'); + } + if (withRelated.has('email_recipients')) { withRelated.add('email_recipients.email'); } @@ -29,6 +35,51 @@ module.exports = class MemberBREADService { const member = model.toJSON(options); + const subscriptionProducts = member.subscriptions.map(sub => sub.price.product.product_id); + for (const product of member.products) { + if (!subscriptionProducts.includes(product.id)) { + const productAddEvent = member.productEvents.find(event => event.product_id === product.id); + if (!productAddEvent || productAddEvent.action !== 'added') { + // There's something very wrong here. They have been comped this product - why is there no event???? + } + const startDate = moment(productAddEvent.created_at); + member.subscriptions.push({ + id: '', + customer: { + id: '', + name: member.name, + email: member.email + }, + plan: { + id: '', + nickname: 'Complimentary', + interval: 'year', + currency: 'USD', + amount: 0 + }, + status: 'active', + start_date: startDate, + default_payment_card_last4: '****', + cancel_at_period_end: false, + cancellation_reason: null, + current_period_end: moment(startDate).add(1, 'year'), + price: { + id: '', + price_id: '', + nickname: 'Complimentary', + amount: 0, + interval: 'year', + type: 'recurring', + currency: 'USD', + product: { + id: '', + product_id: product.id + } + } + }); + } + } + return member; } };