diff --git a/README.md b/README.md index b88e020..e1ae254 100644 --- a/README.md +++ b/README.md @@ -126,6 +126,14 @@ ChartMogul.Customer.unmerge(config, { 'external_id': 'cus_O075O8NH0LrtG8', 'move_to_new_customer': [] }) +// DEPRECATED: Use ChartMogul.Metrics.Customer.connectSubscriptions instead +ChartMogul.Customer.connectSubscriptions(config, customerUuid, { + subscriptions: [{ uuid: 'sub_uuid' }] +}) +// DEPRECATED: Use ChartMogul.Metrics.Customer.disconnectSubscriptions instead +ChartMogul.Customer.disconnectSubscriptions(config, customerUuid, { + subscriptions: [{ uuid: 'sub_uuid' }] +}) ChartMogul.Customer.contacts(config, customerUuid, { per_page: 10, cursor: 'cursor==' }) ChartMogul.Customer.createContact(config, customerUuid, data) @@ -208,9 +216,19 @@ ChartMogul.PlanGroup.all(config, planGroupUuid, query) #### [Subscriptions](https://dev.chartmogul.com/reference/subscriptions/) ```js +// DEPRECATED: Use ChartMogul.Metrics.Customer.subscriptions instead ChartMogul.Subscription.all(config, customerUuid, query) ChartMogul.Subscription.cancel(config, subscriptionUuid, { cancelled_at: '' }) ChartMogul.Subscription.modify(config, subscriptionUuid, { cancellation_dates: [] }) + +// Recommended: Use Metrics API for subscriptions +ChartMogul.Metrics.Customer.subscriptions(config, customerUuid, query) +ChartMogul.Metrics.Customer.connectSubscriptions(config, dataSourceUuid, customerUuid, { + subscriptions: [{ uuid: 'sub_uuid', data_source_uuid: 'ds_uuid' }] +}) +ChartMogul.Metrics.Customer.disconnectSubscriptions(config, dataSourceUuid, customerUuid, { + subscriptions: [{ uuid: 'sub_uuid', data_source_uuid: 'ds_uuid' }] +}) ``` #### [Invoices](https://dev.chartmogul.com/reference/invoices/) @@ -335,6 +353,8 @@ ChartMogul.Metrics.mrrChurnRate(config, query) ChartMogul.Metrics.ltv(config, query) ChartMogul.Metrics.Customer.activities(config, customerUuid, query) ChartMogul.Metrics.Customer.subscriptions(config, customerUuid, query) +ChartMogul.Metrics.Customer.connectSubscriptions(config, dataSourceUuid, customerUuid, data) +ChartMogul.Metrics.Customer.disconnectSubscriptions(config, dataSourceUuid, customerUuid, data) ChartMogul.Metrics.Activity.all(config, query) ChartMogul.Metrics.ActivitiesExport.create(config, query) ChartMogul.Metrics.ActivitiesExport.retrieve(config, id) diff --git a/lib/chartmogul/customer.js b/lib/chartmogul/customer.js index ec9f04a..8bbbbb5 100644 --- a/lib/chartmogul/customer.js +++ b/lib/chartmogul/customer.js @@ -69,8 +69,18 @@ Customer.merge = Resource._method('POST', '/v1/customers/merges'); Customer.unmerge = Resource._method('POST', '/v1/customers/unmerges'); -Customer.connectSubscriptions = Resource._method('POST', '/v1/customers/{customerUuid}/connect_subscriptions'); - -Customer.disconnectSubscriptions = Resource._method('POST', '/v1/customers/{customerUuid}/disconnect_subscriptions'); +// DEPRECATED: Use ChartMogul.Metrics.Customer.connectSubscriptions instead +const _connectSubscriptions = Resource._method('POST', '/v1/customers/{customerUuid}/connect_subscriptions'); +Customer.connectSubscriptions = function (...args) { + console.warn('[DEPRECATED] Customer.connectSubscriptions is deprecated. Use ChartMogul.Metrics.Customer.connectSubscriptions instead.'); + return _connectSubscriptions.apply(this, args); +}; + +// DEPRECATED: Use ChartMogul.Metrics.Customer.disconnectSubscriptions instead +const _disconnectSubscriptions = Resource._method('POST', '/v1/customers/{customerUuid}/disconnect_subscriptions'); +Customer.disconnectSubscriptions = function (...args) { + console.warn('[DEPRECATED] Customer.disconnectSubscriptions is deprecated. Use ChartMogul.Metrics.Customer.disconnectSubscriptions instead.'); + return _disconnectSubscriptions.apply(this, args); +}; module.exports = Customer; diff --git a/lib/chartmogul/metrics/customer.js b/lib/chartmogul/metrics/customer.js index 1365168..6aeadd6 100644 --- a/lib/chartmogul/metrics/customer.js +++ b/lib/chartmogul/metrics/customer.js @@ -25,5 +25,26 @@ class Customer { }); return Resource.request(config, 'GET', path, query, cb); } + + static connectSubscriptions (config, dataSourceUuid, customerUuid, data, cb) { + const payload = this._prepareSubscriptionsData(dataSourceUuid, data); + const path = `/v1/customers/${customerUuid}/connect_subscriptions`; + return Resource.request(config, 'POST', path, payload, cb); + } + + static disconnectSubscriptions (config, dataSourceUuid, customerUuid, data, cb) { + const payload = this._prepareSubscriptionsData(dataSourceUuid, data); + const path = `/v1/customers/${customerUuid}/disconnect_subscriptions`; + return Resource.request(config, 'POST', path, payload, cb); + } + + static _prepareSubscriptionsData (dataSourceUuid, data) { + return { + subscriptions: data.map(subscription => ({ + data_source_uuid: dataSourceUuid, + uuid: subscription.uuid + })) + }; + } } module.exports = Customer; diff --git a/test/chartmogul/metrics/index.js b/test/chartmogul/metrics/index.js index 67cfc77..2c6bdc6 100644 --- a/test/chartmogul/metrics/index.js +++ b/test/chartmogul/metrics/index.js @@ -462,4 +462,43 @@ describe('Metrics', () => { }); done(); }); + + it('should connect customer subscriptions', () => { + const customerUuid = 'cus_9bf6482d-01e5-4944-957d-5bc730d2cda3'; + const dataSourceUuid = 'ds_e243129a-12c0-4e29-8f54-07da7905fbd1'; + const postBody = { + subscriptions: [ + { uuid: 'sub_1', data_source_uuid: dataSourceUuid }, + { uuid: 'sub_2', data_source_uuid: dataSourceUuid } + ] + }; + + nock(config.API_BASE) + .post(`/v1/customers/${customerUuid}/connect_subscriptions`, postBody) + .reply(200, {}); + + return Metrics.Customer.connectSubscriptions(config, dataSourceUuid, customerUuid, postBody.subscriptions) + .then(res => { + expect(res).to.eql({}); + }); + }); + + it('should disconnect customer subscriptions', () => { + const customerUuid = 'cus_9bf6482d-01e5-4944-957d-5bc730d2cda3'; + const dataSourceUuid = 'ds_e243129a-12c0-4e29-8f54-07da7905fbd1'; + const postBody = { + subscriptions: [ + { uuid: 'sub_1', data_source_uuid: dataSourceUuid } + ] + }; + + nock(config.API_BASE) + .post(`/v1/customers/${customerUuid}/disconnect_subscriptions`, postBody) + .reply(200, {}); + + return Metrics.Customer.disconnectSubscriptions(config, dataSourceUuid, customerUuid, postBody.subscriptions) + .then(res => { + expect(res).to.eql({}); + }); + }); });