@fabrix/spool-cart
Version:
Spool - eCommerce Spool for Fabrix
78 lines (77 loc) • 2.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const common_1 = require("@fabrix/fabrix/dist/common");
const spool_sequelize_1 = require("@fabrix/spool-sequelize");
class ProductReview extends common_1.FabrixModel {
static get resolver() {
return spool_sequelize_1.SequelizeResolver;
}
static config(app, Sequelize) {
return {
options: {
underscored: true,
classMethods: {}
}
};
}
static schema(app, Sequelize) {
return {
customer_id: {
type: Sequelize.INTEGER
},
user_id: {
type: Sequelize.INTEGER
},
product_id: {
type: Sequelize.INTEGER
},
variant_id: {
type: Sequelize.INTEGER
},
metadata_id: {
type: Sequelize.INTEGER
},
score: {
type: Sequelize.INTEGER,
defaultValue: 0
},
review: {
type: Sequelize.TEXT
},
live_mode: {
type: Sequelize.BOOLEAN,
defaultValue: app.config.get('cart.live_mode')
}
};
}
static associate(models) {
models.ProductReview.belongsTo(models.Customer, {});
models.ProductReview.belongsTo(models.Product, {});
models.ProductReview.belongsTo(models.ProductVariant, {
foreignKey: 'variant_id'
});
models.ProductReview.belongsTo(models.User, {});
models.ProductReview.hasOne(models.Metadata, {
as: 'metadata',
foreignKey: 'product_review_id'
});
}
}
exports.ProductReview = ProductReview;
ProductReview.prototype.resolveMetadata = function (app, options = {}) {
if (this.metadata
&& this.metadata instanceof app.models['Metadata'].instance
&& options.reload !== true) {
return Promise.resolve(this);
}
else {
return this.getMetadata({ transaction: options.transaction || null })
.then(_metadata => {
_metadata = _metadata || { product_review_id: this.id };
this.metadata = _metadata;
this.setDataValue('metadata', _metadata);
this.set('metadata', _metadata);
return this;
});
}
};