@fabrix/spool-cart
Version:
Spool - eCommerce Spool for Fabrix
80 lines (79 loc) • 2.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const common_1 = require("@fabrix/fabrix/dist/common");
const spool_sequelize_1 = require("@fabrix/spool-sequelize");
const enums_1 = require("../../enums");
class SubscriptionUploadResolver extends spool_sequelize_1.SequelizeResolver {
batch(options, batch) {
const self = this;
options.limit = options.limit || 100;
options.offset = options.offset || 0;
options.regressive = options.regressive || false;
const recursiveQuery = function (options) {
let count = 0;
return self.findAndCountAll(options)
.then(results => {
count = results.count;
return batch(results.rows);
})
.then(batched => {
if (count >= (options.regressive ? options.limit : options.offset + options.limit)) {
options.offset = options.regressive ? 0 : options.offset + options.limit;
return recursiveQuery(options);
}
else {
return Promise.resolve();
}
});
};
return recursiveQuery(options);
}
}
exports.SubscriptionUploadResolver = SubscriptionUploadResolver;
class SubscriptionUpload extends common_1.FabrixModel {
static get resolver() {
return SubscriptionUploadResolver;
}
static config(app, Sequelize) {
return {
options: {
underscored: true
}
};
}
static schema(app, Sequelize) {
return {
upload_id: {
type: Sequelize.STRING
},
token: {
type: Sequelize.STRING
},
customer: {
type: Sequelize.STRING
},
interval: {
type: Sequelize.INTEGER,
defaultValue: 1
},
unit: {
type: Sequelize.ENUM,
values: Object.values(enums_1.INTERVALS),
defaultValue: enums_1.INTERVALS.MONTH
},
active: {
type: Sequelize.BOOLEAN,
defaultValue: true
},
products: {
type: Sequelize.JSONB,
defaultValue: []
},
live_mode: {
type: Sequelize.BOOLEAN,
defaultValue: app.config.get('cart.live_mode')
}
};
}
}
exports.SubscriptionUpload = SubscriptionUpload;