UNPKG

@fabrix/spool-cart

Version:

Spool - eCommerce Spool for Fabrix

198 lines (197 loc) 6.89 kB
"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;