UNPKG

@fabrix/spool-cart

Version:

Spool - eCommerce Spool for Fabrix

148 lines (147 loc) 4.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const models_1 = require("@fabrix/spool-permissions/dist/api/models"); const models_2 = require("@fabrix/spool-notifications/dist/api/models"); const spool_sequelize_1 = require("@fabrix/spool-sequelize"); const lodash_1 = require("lodash"); class User extends models_2.User { static config(app, Sequelize) { return spool_sequelize_1.Utils.mergeConfig(models_2.User.config(app, Sequelize), { options: { underscored: true, scopes: { live: { where: { live_mode: true } } }, hooks: { afterCreate: [ (values, options) => { return app.services.ProxyCartService.afterUserCreate(values, options) .catch(err => { return Promise.resolve(err); }); } ] }, getterMethods: { full_name: function () { if (this.first_name && this.last_name) { return `${this.first_name} ${this.last_name}`; } else { return null; } } } } }); } static schema(app, Sequelize) { return spool_sequelize_1.Utils.mergeConfig(models_1.User.schema(app, Sequelize), { accepts_marketing: { type: Sequelize.BOOLEAN, defaultValue: true }, current_customer_id: { type: Sequelize.INTEGER, allowNull: true }, current_cart_id: { type: Sequelize.INTEGER, allowNull: true }, current_shop_id: { type: Sequelize.INTEGER, allowNull: true }, first_name: { type: Sequelize.STRING }, last_name: { type: Sequelize.STRING }, phone: { type: Sequelize.STRING }, reason: { type: Sequelize.STRING }, live_mode: { type: Sequelize.BOOLEAN, defaultValue: app.config.get('cart.live_mode') } }); } static associate(models) { models_2.User.associate(models); models.User.belongsToMany(models.Customer, { as: 'customers', through: { model: models.CustomerUser, unique: true }, foreignKey: 'user_id' }); models.User.hasMany(models.Order, { as: 'orders', foreignKey: 'user_id' }); models.User.belongsTo(models.Customer, { as: 'current_customer', foreignKey: 'current_customer_id' }); models.User.belongsTo(models.Cart, { as: 'current_cart', foreignKey: 'current_cart_id', constraints: false }); models.User.belongsTo(models.Shop, { as: 'current_shop', foreignKey: 'current_shop_id' }); models.User.hasOne(models.Metadata, { as: 'metadata', foreignKey: 'user_id' }); } } exports.User = User; User.prototype.resolveMetadata = function (options = {}) { if (this.metadata && this.metadata instanceof this.app.models['Metadata'].instance && options.reload !== true) { return Promise.resolve(this); } else { return this.getMetadata({ transaction: options.transaction || null }) .then(_metadata => { _metadata = _metadata || { user_id: this.id }; this.metadata = _metadata; this.setDataValue('metadata', _metadata); this.set('metadata', _metadata); return this; }); } }; User.prototype.toJSON = function () { const resp = this instanceof this.app.models['User'].instance ? this.get({ plain: true }) : this; if (resp.tags) { resp.tags = resp.tags.map(tag => { if (tag && lodash_1.isString(tag)) { return tag; } else if (tag && tag.name) { return tag.name; } }); } if (resp.metadata) { if (typeof resp.metadata.data !== 'undefined') { resp.metadata = resp.metadata.data; } } return resp; };