Ghost/ghost/members-api/subscriptions/index.js
Rishabh Garg daf5a41af0 Added Admin API for deleting members (#10673)
no issue

- Added new API to delete members
- Added methods to handle e2e member deletion
- Deleting member via Admin leads to
  - Removal of member from payment processor and cancelling all active subscriptions immediately
  - Removal of member information from DB
2019-05-07 17:35:17 +02:00

88 lines
2.6 KiB
JavaScript

const stripe = require('./payment-processors/stripe');
const adapters = {
stripe
};
module.exports = class PaymentProcessorService {
constructor(config) {
this._ready = new Promise(() => {});
process.nextTick(() => this.configure(config));
}
configure({processors}) {
this._processors = {};
this._ready = Promise.all(processors.map(({
adapter,
config
}) => {
this._processors[adapter] = new adapters[adapter];
return this._processors[adapter].configure(config);
})).then(() => {
return Object.keys(this._processors);
});
return this._ready;
}
getAdapters() {
return this._ready;
}
getConfig(adapter) {
if (!adapter) {
return Promise.reject(new Error('getConfig(adapter) requires an adapter'));
}
return this._ready.then(() => {
return this._processors[adapter].getConfig();
});
}
getPublicConfig(adapter) {
if (!adapter) {
return Promise.reject(new Error('getPublicConfig(adapter) requires an adapter'));
}
return this._ready.then(() => {
return this._processors[adapter].getPublicConfig();
});
}
createSubscription(member, metadata) {
if (!metadata.adapter) {
return Promise.reject(new Error('createSubscription(member, { adapter }) requires an adapter'));
}
return this._ready.then(() => {
return this._processors[metadata.adapter].createSubscription(member, metadata);
});
}
getSubscription(member, metadata) {
if (!metadata.adapter) {
return Promise.reject(new Error('getSubscription(member, { adapter }) requires an adapter'));
}
return this._ready.then(() => {
return this._processors[metadata.adapter].getSubscription(member, metadata);
});
}
removeSubscription(member, metadata) {
if (!metadata.adapter) {
return Promise.reject(new Error('removeSubscription(member, { adapter }) requires an adapter'));
}
return this._ready.then(() => {
return this._processors[metadata.adapter].removeSubscription(member, metadata);
});
}
removeCustomer(member, metadata) {
if (!metadata.adapter) {
return Promise.reject(new Error('removeCustomer(member, { adapter }) requires an adapter'));
}
return this._ready.then(() => {
return this._processors[metadata.adapter].removeCustomer(member, metadata);
});
}
};