1
resposta

[Dúvida] "database[this.nomeDoModelo].transaction is not a function"

quando vou testar o a rota "/pessoas/:estudanteId/cancela" o postman me retorna o erro "database[this.nomeDoModelo].transaction is not a function" conseguem me ajudar?

pessoasRoute:

  .post("/pessoas/:estudanteId/cancela", PessoaController.cancelaPessoa)

PessoaController:

static async cancelaPessoa(req, res) {
    const { estudanteId } = req.params;
    try {
      await pessoasServices.cancelaPessoasEMatriculas(Number(estudanteId));
      return res.status(200).json(`matriculas ref. à estudante ${estudanteId} canceladas`);
    } catch (error) {
      return res.status(500).json(error.message);
    }
  }

PessoasServices:

async cancelaPessoasEMatriculas(estudanteId) {
    return database[this.nomeDoModelo].transaction(async transacao => {
      await super.atualizaRegistro({ ativo: false }, estudanteId, { transaction: transacao });
      await this.matriculas.atualizaRegistros({ status: 'cancelado'}, { estudante_id: estudanteId }, { transaction: transacao });
    });
  }

Services:

async atualizaRegistro(dadosAtualizados, id, transacao = {}) {
    return database[this.nomeDoModelo]
      .update(dadosAtualizados, { where: { id: Number(id) } }, transacao);
  }

  async atualizaRegistros(dadosAtualizados, where, transacao = {}) {
    return database[this.nomeDoModelo]
      .update(dadosAtualizados, { where: { ...where } }, transacao );
  }
1 resposta

Opa Leandro, tudo certo?

O erro em questão indica que há um problema com a chamada de função "transaction" em relação ao objeto "database" e ao nome do modelo especificado.

Uma possível solução para esse problema é garantir que a função transaction esteja sendo importada corretamente no seu código. Verifique se você está importando corretamente o módulo do Sequelize e se a versão do Sequelize está atualizada.

Outra possível causa para esse erro é que a propriedade this.nomeDoModelo não esteja definida corretamente. Verifique se você está atribuindo um valor válido a essa propriedade antes de chamar a função transaction.

Fico à disposição.

Tenha um bom dia e bons estudos.