@fabrix/spool-cart
Version:
Spool - eCommerce Spool for Fabrix
198 lines (197 loc) • 6.89 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const common_1 = require("@fabrix/fabrix/dist/common");
const spool_sequelize_1 = require("@fabrix/spool-sequelize");
const lodash_1 = require("lodash");
const enums_1 = require("../../enums");
const enums_2 = require("../../enums");
const enums_3 = require("../../enums");
const enums_4 = require("../../enums");
const enums_5 = require("../../enums");
const enums_6 = require("../../enums");
class CollectionUploadResolver extends spool_sequelize_1.SequelizeResolver {
batch(options, batch) {
const self = this;
options.limit = options.limit || 100;
options.offset = options.offset || 0;
const recursiveQuery = function (opts) {
let count = 0;
return self.findAndCountAll(opts)
.then(results => {
count = results.count;
return batch(results.rows);
})
.then(batched => {
if (count > opts.offset + opts.limit) {
opts.offset = opts.offset + opts.limit;
return recursiveQuery(opts);
}
else {
return batched;
}
});
};
return recursiveQuery(options);
}
}
exports.CollectionUploadResolver = CollectionUploadResolver;
class CollectionUpload extends common_1.FabrixModel {
static get resolver() {
return CollectionUploadResolver;
}
static config(app, Sequelize) {
return {
options: {
underscored: true,
enums: {
COLLECTION_PURPOSE: enums_2.COLLECTION_PURPOSE,
COLLECTION_SORT_ORDER: enums_1.COLLECTION_SORT_ORDER,
COLLECTION_DISCOUNT_SCOPE: enums_3.COLLECTION_DISCOUNT_SCOPE,
COLLECTION_DISCOUNT_TYPE: enums_4.COLLECTION_DISCOUNT_TYPE,
COLLECTION_TAX_TYPE: enums_5.COLLECTION_TAX_TYPE,
COLLECTION_SHIPPING_TYPE: enums_6.COLLECTION_SHIPPING_TYPE,
}
}
};
}
static schema(app, Sequelize) {
return {
upload_id: {
type: Sequelize.STRING,
allowNull: false
},
handle: {
type: Sequelize.STRING,
allowNull: false,
set: function (val) {
this.setDataValue('handle', app.services.ProxyCartService.handle(val));
}
},
title: {
type: Sequelize.STRING,
allowNull: false,
set: function (val) {
this.setDataValue('title', app.services.ProxyCartService.title(val));
}
},
description: {
type: Sequelize.TEXT
},
seo_title: {
type: Sequelize.STRING,
set: function (val) {
this.setDataValue('seo_title', app.services.ProxyCartService.title(val));
}
},
seo_description: {
type: Sequelize.STRING,
set: function (val) {
this.setDataValue('seo_description', app.services.ProxyCartService.description(val));
}
},
excerpt: {
type: Sequelize.TEXT
},
body: {
type: Sequelize.TEXT
},
published: {
type: Sequelize.BOOLEAN,
defaultValue: false
},
primary_purpose: {
type: Sequelize.ENUM,
values: lodash_1.values(enums_2.COLLECTION_PURPOSE),
defaultValue: enums_2.COLLECTION_PURPOSE.GROUP
},
position: {
type: Sequelize.INTEGER,
defaultValue: 0
},
sort_order: {
type: Sequelize.ENUM,
values: lodash_1.values(enums_1.COLLECTION_SORT_ORDER),
defaultValue: enums_1.COLLECTION_SORT_ORDER.ALPHA_DESC
},
tax_rate: {
type: Sequelize.FLOAT,
defaultValue: 0.0
},
tax_percentage: {
type: Sequelize.FLOAT,
defaultValue: 0.0
},
tax_type: {
type: Sequelize.ENUM,
values: lodash_1.values(enums_5.COLLECTION_TAX_TYPE),
defaultValue: enums_5.COLLECTION_TAX_TYPE.PERCENTAGE
},
tax_name: {
type: Sequelize.STRING
},
shipping_rate: {
type: Sequelize.FLOAT,
defaultValue: 0.0
},
shipping_percentage: {
type: Sequelize.FLOAT,
defaultValue: 0.0
},
shipping_type: {
type: Sequelize.ENUM,
values: lodash_1.values(enums_6.COLLECTION_SHIPPING_TYPE),
defaultValue: enums_6.COLLECTION_SHIPPING_TYPE.PERCENTAGE
},
shipping_name: {
type: Sequelize.STRING
},
discount_scope: {
type: Sequelize.ENUM,
values: lodash_1.values(enums_3.COLLECTION_DISCOUNT_SCOPE),
defaultValue: enums_3.COLLECTION_DISCOUNT_SCOPE.INDIVIDUAL
},
discount_type: {
type: Sequelize.ENUM,
values: lodash_1.values(enums_4.COLLECTION_DISCOUNT_TYPE),
defaultValue: enums_4.COLLECTION_DISCOUNT_TYPE.PERCENTAGE
},
discount_rate: {
type: Sequelize.FLOAT,
defaultValue: 0.0
},
discount_percentage: {
type: Sequelize.FLOAT,
defaultValue: 0.0
},
discount_product_include: {
type: Sequelize.JSONB,
defaultValue: []
},
discount_product_exclude: {
type: Sequelize.JSONB,
defaultValue: []
},
images: {
type: Sequelize.JSONB,
defaultValue: []
},
collections: {
type: Sequelize.JSONB,
defaultValue: []
},
discounts: {
type: Sequelize.JSONB,
defaultValue: []
},
tags: {
type: Sequelize.JSONB,
defaultValue: []
},
live_mode: {
type: Sequelize.BOOLEAN,
defaultValue: app.config.get('cart.live_mode')
}
};
}
}
exports.CollectionUpload = CollectionUpload;