@fabrix/spool-cart
Version:
Spool - eCommerce Spool for Fabrix
141 lines (140 loc) • 4.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const common_1 = require("@fabrix/fabrix/dist/common");
const errors_1 = require("@fabrix/spool-sequelize/dist/errors");
const spool_sequelize_1 = require("@fabrix/spool-sequelize");
const lodash_1 = require("lodash");
class ProductImageResolver extends spool_sequelize_1.SequelizeResolver {
resolve(image, options = {}) {
const Image = this;
if (image instanceof Image.instance) {
return Promise.resolve(image);
}
else if (image && lodash_1.isObject(image) && image.id) {
return Image.findById(image.id, options)
.then(resImage => {
if (!resImage && options.reject !== false) {
throw new errors_1.ModelError('E_NOT_FOUND', `Image id ${image.id} not found`);
}
return resImage || image;
});
}
else if (image && lodash_1.isObject(image) && image.src) {
return Image.findOne(this.app.services.SequelizeService.mergeOptionDefaults({
where: {
src: image.src
}
}, options))
.then(resImage => {
if (!resImage && options.reject !== false) {
throw new errors_1.ModelError('E_NOT_FOUND', `Image src ${image.src} not found`);
}
return resImage || image;
});
}
else if (image && lodash_1.isNumber(image)) {
return Image.findById(image, options)
.then(resImage => {
if (!resImage && options.reject !== false) {
throw new errors_1.ModelError('E_NOT_FOUND', `Image id ${image} not found`);
}
return resImage || image;
});
}
else if (image && lodash_1.isString(image)) {
return Image.findOne(this.app.services.SequelizeService.mergeOptionDefaults({
options,
where: { src: image }
}))
.then(resImage => {
if (!resImage && options.reject !== false) {
throw new errors_1.ModelError('E_NOT_FOUND', `Image src ${image} not found`);
}
return resImage || image;
});
}
else {
if (options.reject !== false) {
const err = new Error(`Unable to resolve Image ${image}`);
return Promise.reject(err);
}
else {
return Promise.resolve(image);
}
}
}
}
exports.ProductImageResolver = ProductImageResolver;
class ProductImage extends common_1.FabrixModel {
static get resolver() {
return ProductImageResolver;
}
static config(app, Sequelize) {
return {
options: {
underscored: true,
hooks: {
beforeCreate: (values, options) => {
return app.services.ProxyCartService.buildImages(values.src, options)
.then(sizes => {
values.full = sizes.full;
values.thumbnail = sizes.thumbnail;
values.small = sizes.small;
values.medium = sizes.medium;
values.large = sizes.large;
})
.catch(err => {
return values;
});
}
}
}
};
}
static schema(app, Sequelize) {
return {
src: {
type: Sequelize.STRING,
allowNull: false
},
full: {
type: Sequelize.STRING
},
thumbnail: {
type: Sequelize.STRING
},
small: {
type: Sequelize.STRING
},
medium: {
type: Sequelize.STRING
},
large: {
type: Sequelize.STRING
},
alt: {
type: Sequelize.STRING,
set: function (val) {
this.setDataValue('alt', app.services.ProxyCartService.description(val));
}
},
position: {
type: Sequelize.INTEGER,
defaultValue: 1
},
live_mode: {
type: Sequelize.BOOLEAN,
defaultValue: app.config.get('cart.live_mode')
}
};
}
static associate(models) {
models.ProductImage.belongsTo(models.Product, {
onDelete: 'CASCADE'
});
models.ProductImage.belongsTo(models.ProductVariant, {
onDelete: 'CASCADE'
});
}
}
exports.ProductImage = ProductImage;