From 11227b347780623dea66aaf36cc48db0b71076d6 Mon Sep 17 00:00:00 2001 From: Guilherme Soares Date: Wed, 17 Jan 2024 11:40:04 +0100 Subject: [PATCH] feat: Added failed transactions model --- src/lib/FederatorERC.ts | 54 ++++++++++++-------------- src/models/failedTransactions.model.ts | 23 +++++++++++ 2 files changed, 48 insertions(+), 29 deletions(-) create mode 100644 src/models/failedTransactions.model.ts diff --git a/src/lib/FederatorERC.ts b/src/lib/FederatorERC.ts index 026967a..b8fe54d 100644 --- a/src/lib/FederatorERC.ts +++ b/src/lib/FederatorERC.ts @@ -21,6 +21,11 @@ import { import {AppDataSource} from "../services/AppDataSource"; import {FailedTransactions} from "../entities/FailedTransactions"; import {Votes} from "../entities/Votes"; +import { + deleteFailedTransaction, + findFailedTransaction, + insertFailedTransaction, updateFailedTransaction +} from "../models/failedTransactions.model"; type ValidateAndVoteReturn = { @@ -407,22 +412,19 @@ export default class FederatorERC extends Federator { } async verifyIfwasRevertedAndRetry(params, txAbi) { - const revertedTx = await AppDataSource.getRepository(FailedTransactions) - .findOne({ - where: { - mainChain: params.mainChainId, - sideChain: params.sideChainId, - transactionId: params.transactionId - } - }); + const revertedTx = await findFailedTransaction({ + mainChain: params.mainChainId, + sideChain: params.sideChainId, + transactionId: params.transactionId + }); const result = await this.validateAndVote(params, txAbi); if (revertedTx && (result.voteSuccess || result.wasVotedBefore || result.wasProcessed)) { - await AppDataSource.getRepository(FailedTransactions).delete({ - mainChain: params.mainChainId, - sideChain: params.sideChainId, - transactionId: params.transactionId + await deleteFailedTransaction({ + mainChain: params.mainChainId, + sideChain: params.sideChainId, + transactionId: params.transactionId }); } } @@ -443,14 +445,10 @@ export default class FederatorERC extends Federator { const hasVotedDb = await AppDataSource.getRepository(Votes).findOne({ where: {transactionId: params.transactionId}}); - const failedRetry = await AppDataSource.getRepository(FailedTransactions).findOne( - { - where: { - transactionId: params.transactionId, - timesRetried: this.config.maxFailedTxRetry - } - } - ); + const failedRetry = await findFailedTransaction({ + transactionId: params.transactionId, + timesRetried: this.config.maxFailedTxRetry + }); const wasProcessed = await params.sideFedContract .transactionWasProcessed(params.transactionId); @@ -505,15 +503,12 @@ export default class FederatorERC extends Federator { receipt, ); - const hasFailedBefore = await AppDataSource.getRepository(FailedTransactions) - .findOne({ - where: { - transactionId: params.transactionId - } - }); + const hasFailedBefore = await findFailedTransaction({ + transactionId: params.transactionId + }); if(!hasFailedBefore) { - await AppDataSource.getRepository(FailedTransactions).insert({ + const dataToInsert: Partial = { mainChain: params.mainChainId, sideChain: params.sideChainId, transactionId: params.transactionId, @@ -530,9 +525,10 @@ export default class FederatorERC extends Federator { status: receipt.status, receipt: {...receipt}, }) - }); + }; + await insertFailedTransaction(dataToInsert); } else { - await AppDataSource.getRepository(FailedTransactions).update(hasFailedBefore.id, { + await updateFailedTransaction(hasFailedBefore.id, { timesRetried: hasFailedBefore.timesRetried + 1 > this.config.maxFailedTxRetry ? this.config.maxFailedTxRetry : hasFailedBefore.timesRetried + 1 }); diff --git a/src/models/failedTransactions.model.ts b/src/models/failedTransactions.model.ts new file mode 100644 index 0000000..d3e8cfd --- /dev/null +++ b/src/models/failedTransactions.model.ts @@ -0,0 +1,23 @@ +import {FailedTransactions} from "../entities/FailedTransactions"; +import {AppDataSource} from "../services/AppDataSource"; + +const findFailedTransaction = async (data: Partial) => { + return await AppDataSource.getRepository(FailedTransactions) + .findOne({ + where: { ...data } + }); +} + +const deleteFailedTransaction = async (criteria: Partial) => { + await AppDataSource.getRepository(FailedTransactions).delete({ ...criteria }); +} + +const insertFailedTransaction = async (data: Partial) => { + await AppDataSource.getRepository(FailedTransactions).insert({...data}); +} + +const updateFailedTransaction = async (id: number, data: Partial) => { + await AppDataSource.getRepository(FailedTransactions).update({ id }, { ...data }); +} + +export { findFailedTransaction, deleteFailedTransaction, insertFailedTransaction, updateFailedTransaction };