UNPKG

@fabrix/spool-cart

Version:

Spool - eCommerce Spool for Fabrix

141 lines (140 loc) 4.98 kB
"use strict"; 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;