58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
|
let MemberStripeCustomer;
|
||
|
let StripeCustomerSubscription;
|
||
|
|
||
|
async function setMetadata(module, metadata) {
|
||
|
if (module !== 'stripe') {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (metadata.customer) {
|
||
|
await MemberStripeCustomer.upsert(metadata.customer, {
|
||
|
customer_id: metadata.customer.customer_id
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if (metadata.subscription) {
|
||
|
await StripeCustomerSubscription.upsert(metadata.subscription, {
|
||
|
subscription_id: metadata.subscription.subscription_id
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
async function getMetadata(module, member) {
|
||
|
if (module !== 'stripe') {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
const customers = (await MemberStripeCustomer.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
|
||
|
};
|
||
|
}
|
||
|
|
||
|
module.exports = function ({
|
||
|
memberStripeCustomerModel,
|
||
|
stripeCustomerSubscriptionModel
|
||
|
}) {
|
||
|
MemberStripeCustomer = memberStripeCustomerModel;
|
||
|
StripeCustomerSubscription = stripeCustomerSubscriptionModel;
|
||
|
|
||
|
return {
|
||
|
setMetadata,
|
||
|
getMetadata
|
||
|
};
|
||
|
};
|