Transactions

Introduzindo as transações, eles revertem todas as alterações feitas no banco de dados caso o método não seja executado. Isso ajuda a evitar vestígios de dados considerados lixo.

class Example {
  public async handle() {
    // Cria um queryRunner
    const trx = Connection.mysql.createQueryRunner();

    // Cria uma única conexão com o banco de dados
    await trx.startTransaction();
    try {
      
      // O objeto trx é obrigatório se houver uma conexão com um banco de dados, mas opcional se você estiver usando "em repositórios de memória"
      const result = await this.examplesRepository.create({ name: 'example' }, trx);

      // Use depois de toda a lógica e antes que o método retorne para persistir modificações no banco de dados
      if (trx.isTransactionActive) await trx.commitTransaction();

      return result;
    } catch (error: unknown) {
      // Em caso de falha de execução, reverte todas as alterações feitas no banco de dados
      if (trx.isTransactionActive) await trx.rollbackTransaction();
      throw error;
    } finally {
      // Libera a conexão para que possa ser usada em outros casos
      if (!trx.isReleased) await trx.release();
    }
  }
}

Existem 13 tipos de consultas padrão para todos os módulos, elas são totalmente dinâmicas para que respondam a 90% de suas necessidades.