Перья сиквелизируют и одноразовые ассоциации

Я хотел бы сделать для некоторых перьев службы вызовов, которые требуют загрузки некоторых ассоциаций. Проблема в том, что когда я делаю это "перьевым способом" с крючками, крючки не один раз, а остаются на месте. Есть ли способ сделать "перьевой способ одноразовой ассоциации"? Крючки должны быть destroyed после звонка.

В настоящее время:

serviceAccountAssosiations() {
    return function (hook) {
      const walletModel = hook.app.service('wallets').Model;
      const currencyModel = hook.app.service('currencies').Model;
      const assetClassModel = hook.app.service('asset-classes').Model;
      const exchangeModel = hook.app.service('exchanges').Model;
      const bankModel = hook.app.service('banks').Model;
      const valueAccountModel = hook.app.service('value-accounts').Model
      const valueAccountTransactionModel = hook.app.service('value-account-transactions').Model
      const walletTransactionsModel = hook.app.service('wallet-transactions').Model
      const association = {
        include: [
          { model: exchangeModel },
          { model: bankModel },
          { model: valueAccountModel, include: [{ model: valueAccountTransactionModel },{ model: currencyModel }] },
          { model: walletModel, include: [{ model: walletTransactionsModel },{ model: currencyModel },{ model: assetClassModel }] }
        ]
      };

      switch (hook.type) {
        case 'before':
          hook.params.sequelize = Object.assign(association, { raw: false });
          return Promise.resolve(hook);
          break;

        case 'after':
          dehydrate( association ).call(this, hook);
          break;
      }
    }
  }

get (id, params) {
    console.log('id', id)
    let app = this.options.app;
    return app.service('service-accounts').hooks({
      before: {
        all: [this.serviceAccountAssosiations()]
      },
      after: {
        all: [this.serviceAccountAssosiations()]
      }
    })
    .get(id)
    .then((data) => {
      return data;
    });
  }

1 ответ

Я не совсем уверен, что вы имеете в виду под "один раз", но если вы хотите запустить ловушку только тогда, когда вы можете установить флаг вне функции ловушки, проверьте его и пропустите ловушку, если это так:

serviceAccountAssosiations() {
  let ran = false;

  return function (hook) {
    if(ran) {
      return hook;
    }

    const walletModel = hook.app.service('wallets').Model;
    const currencyModel = hook.app.service('currencies').Model;
    const assetClassModel = hook.app.service('asset-classes').Model;
    const exchangeModel = hook.app.service('exchanges').Model;
    const bankModel = hook.app.service('banks').Model;
    const valueAccountModel = hook.app.service('value-accounts').Model
    const valueAccountTransactionModel = hook.app.service('value-account-transactions').Model
    const walletTransactionsModel = hook.app.service('wallet-transactions').Model
    const association = {
      include: [
        { model: exchangeModel },
        { model: bankModel },
        { model: valueAccountModel, include: [{ model: valueAccountTransactionModel },{ model: currencyModel }] },
        { model: walletModel, include: [{ model: walletTransactionsModel },{ model: currencyModel },{ model: assetClassModel }] }
      ]
    };

    switch (hook.type) {
      case 'before':
        hook.params.sequelize = Object.assign(association, { raw: false });
        return Promise.resolve(hook);
        break;

      case 'after':
        dehydrate( association ).call(this, hook);
        break;
    }

    ran = true;

    return hook;
  }
}
Другие вопросы по тегам