Ghost/ghost/members-api/lib/metadata.js

59 lines
1.6 KiB
JavaScript
Raw Normal View History

module.exports = function ({
StripeWebhook,
StripeCustomer,
StripeCustomerSubscription
}) {
async function setMetadata(module, metadata) {
if (module !== 'stripe') {
return;
}
if (metadata.customer) {
await StripeCustomer.upsert(metadata.customer, {
customer_id: metadata.customer.customer_id
});
}
if (metadata.subscription) {
await StripeCustomerSubscription.upsert(metadata.subscription, {
subscription_id: metadata.subscription.subscription_id
});
}
if (metadata.webhook) {
await StripeWebhook.upsert(metadata.webhook, {
webhook_id: metadata.webhook.webhook_id
});
}
return;
}
async function getMetadata(module, member) {
if (module !== 'stripe') {
return;
}
const customers = (await StripeCustomer.findAll({
filter: `member_id:${member.id}`
})).toJSON();
const subscriptions = await customers.reduce(async (subscriptionsPromise, customer) => {
const customerSubscriptions = await StripeCustomerSubscription.findAll({
filter: `customer_id:${customer.customer_id}`
});
return (await subscriptionsPromise).concat(customerSubscriptions.toJSON());
}, []);
return {
customers: customers,
subscriptions: subscriptions
};
}
return {
setMetadata,
getMetadata
};
};