UNPKG

@fabrix/spool-cart

Version:

Spool - eCommerce Spool for Fabrix

222 lines (221 loc) 6.75 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 enums_1 = require("../../enums"); const enums_2 = require("../../enums"); class ProductUploadResolver extends spool_sequelize_1.SequelizeResolver { batch(options, batch) { const self = this; options.limit = options.limit || 10; options.offset = options.offset || 0; options.regressive = options.regressive || false; const recursiveQuery = function (options) { let count = 0; return self.findAndCountAll(options) .then(results => { results.count.map(counts => { count = count + 1; }); 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 batched; } }); }; return recursiveQuery(options); } } exports.ProductUploadResolver = ProductUploadResolver; class ProductUpload extends common_1.FabrixModel { static get resolver() { return ProductUploadResolver; } static config(app, Sequelize) { return { migrate: 'drop', store: 'uploads', options: { underscored: true, enums: { INTERVALS: enums_1.INTERVALS, INVENTORY_POLICY: enums_2.INVENTORY_POLICY } } }; } 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, set: function (val) { this.setDataValue('title', app.services.ProxyCartService.title(val)); } }, body: { type: Sequelize.TEXT }, seo_title: { type: Sequelize.STRING }, seo_description: { type: Sequelize.TEXT }, vendors: { type: Sequelize.JSONB, defaultValue: [] }, type: { type: Sequelize.STRING, allowNull: false }, tags: { type: Sequelize.JSONB, defaultValue: [] }, collections: { type: Sequelize.JSONB, defaultValue: [] }, associations: { type: Sequelize.JSONB, defaultValue: [] }, published: { type: Sequelize.BOOLEAN }, available: { type: Sequelize.BOOLEAN }, option: { type: Sequelize.JSONB, defaultValue: {} }, property_pricing: { type: Sequelize.JSONB, defaultValue: [] }, images: { type: Sequelize.JSONB, defaultValue: [] }, sku: { type: Sequelize.STRING }, weight: { type: Sequelize.INTEGER }, weight_unit: { type: Sequelize.STRING }, inventory_tracker: { type: Sequelize.STRING }, inventory_quantity: { type: Sequelize.INTEGER }, inventory_lead_time: { type: Sequelize.INTEGER, defaultValue: 0 }, inventory_policy: { type: Sequelize.ENUM, values: Object.values(enums_2.INVENTORY_POLICY) }, max_quantity: { type: Sequelize.INTEGER }, fulfillment_service: { type: Sequelize.STRING }, price: { type: Sequelize.INTEGER }, compare_at_price: { type: Sequelize.INTEGER }, variant_currency: { type: Sequelize.STRING }, requires_shipping: { type: Sequelize.BOOLEAN }, requires_taxes: { type: Sequelize.BOOLEAN }, tax_code: { type: Sequelize.STRING }, barcode: { type: Sequelize.STRING }, variant_images: { type: Sequelize.JSONB, defaultValue: [] }, gift_card: { type: Sequelize.STRING }, metadata: { type: Sequelize.TEXT }, requires_subscription: { type: Sequelize.BOOLEAN, defaultValue: false }, subscription_unit: { type: Sequelize.ENUM, values: Object.values(enums_1.INTERVALS) }, subscription_interval: { type: Sequelize.INTEGER }, shops: { type: Sequelize.JSONB, defaultValue: [] }, shops_quantity: { type: Sequelize.JSONB, defaultValue: [] }, average_shipping: { type: Sequelize.INTEGER, defaultValue: 0 }, exclude_payment_types: { type: Sequelize.JSONB, defaultValue: [] }, google: { type: Sequelize.JSONB, defaultValue: {} }, amazon: { type: Sequelize.JSONB, defaultValue: {} }, live_mode: { type: Sequelize.BOOLEAN, defaultValue: app.config.get('cart.live_mode') } }; } } exports.ProductUpload = ProductUpload;