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.