import stampit from 'stampit'; import _ from 'lodash'; import {Meta, Model} from './base'; import {BaseQuerySet, Get, List} from '../querySet'; const InvoiceQuerySet = stampit().compose( BaseQuerySet, Get, List ).methods({ pdf(properties = {}) { this.properties = _.assign({}, this.properties, properties); this.method = 'GET'; this.endpoint = 'pdf'; return this; }, retryPayment(properties = {}, payload = {}) { this.properties = _.assign({}, this.properties, properties); this.method = 'POST'; this.payload = {payload} this.endpoint = 'retryPayment'; return this; } }); const InvoiceMeta = Meta({ name: 'invoice', pluralName: 'invoices', endpoints: { 'detail': { 'methods': ['get'], 'path': '/v1.1/billing/invoices/{id}/' }, 'list': { 'methods': ['get'], 'path': '/v1.1/billing/invoices/' }, 'pdf': { 'methods': ['get'], 'path': '/v1.1/billing/invoices/{id}/pdf/' }, 'retryPayment': { 'methods': ['post'], 'path': '/v1.1/billing/invoices/{id}/retry_payment/' } } }); /** * OO wrapper around Invoice. * @constructor * @type {Invoice} * @property {String} status * @property {Array} items * @property {String} period * @property {String} amount * @property {Number} id * @property {Date} [created_at = null] * @property {Date} [updated_at = null] */ const Invoice = stampit() .compose(Model) .setQuerySet(InvoiceQuerySet) .setMeta(InvoiceMeta) .methods({ pdf() { const meta = this.getMeta(); const path = meta.resolveEndpointPath('pdf', this); return this.makeRequest('POST', path); }, retryPayment(payload = {}) { const meta = this.getMeta(); const path = meta.resolveEndpointPath('retryPayment', this); return this.makeRequest('POST', path, {payload}); } }); export default Invoice;