@fabrix/spool-cart
Version:
Spool - eCommerce Spool for Fabrix
222 lines (221 loc) • 6.75 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 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;