diff --git a/migration/1768830000000-FixBankTxScryptType.js b/migration/1768830000000-FixBankTxScryptType.js new file mode 100644 index 0000000000..215ee1f31c --- /dev/null +++ b/migration/1768830000000-FixBankTxScryptType.js @@ -0,0 +1,77 @@ +/** + * @typedef {import('typeorm').MigrationInterface} MigrationInterface + * @typedef {import('typeorm').QueryRunner} QueryRunner + */ + +/** + * Fix BankTx type for LIQ_MANAGEMENT transactions incorrectly classified as Internal. + * + * LIQ_MANAGEMENT FiatOutput transactions were being set to type 'Internal' + * instead of their specific types (Scrypt, Kraken, SCB). + * + * @class + * @implements {MigrationInterface} + */ +module.exports = class FixBankTxScryptType1768830000000 { + name = 'FixBankTxScryptType1768830000000'; + + /** + * @param {QueryRunner} queryRunner + */ + async up(queryRunner) { + // Fix Scrypt transactions + const scryptResult = await queryRunner.query(` + UPDATE "dbo"."bank_tx" + SET "type" = 'Scrypt' + WHERE "type" = 'Internal' + AND "name" LIKE '%Scrypt Digital Trading%' + `); + console.log(`Fixed BankTx Scrypt type: ${scryptResult?.rowsAffected ?? scryptResult} rows updated`); + + // Fix Kraken transactions + const krakenResult = await queryRunner.query(` + UPDATE "dbo"."bank_tx" + SET "type" = 'Kraken' + WHERE "type" = 'Internal' + AND "name" LIKE '%Payward Trading%' + `); + console.log(`Fixed BankTx Kraken type: ${krakenResult?.rowsAffected ?? krakenResult} rows updated`); + + // Fix SCB transactions + const scbResult = await queryRunner.query(` + UPDATE "dbo"."bank_tx" + SET "type" = 'SCB' + WHERE "type" = 'Internal' + AND "name" LIKE '%SCB AG%' + `); + console.log(`Fixed BankTx SCB type: ${scbResult?.rowsAffected ?? scbResult} rows updated`); + } + + /** + * @param {QueryRunner} queryRunner + */ + async down(queryRunner) { + await queryRunner.query(` + UPDATE "dbo"."bank_tx" + SET "type" = 'Internal' + WHERE "type" = 'Scrypt' + AND "name" LIKE '%Scrypt Digital Trading%' + `); + + await queryRunner.query(` + UPDATE "dbo"."bank_tx" + SET "type" = 'Internal' + WHERE "type" = 'Kraken' + AND "name" LIKE '%Payward Trading%' + `); + + await queryRunner.query(` + UPDATE "dbo"."bank_tx" + SET "type" = 'Internal' + WHERE "type" = 'SCB' + AND "name" LIKE '%SCB AG%' + `); + + console.log('Reverted BankTx types to Internal'); + } +}; diff --git a/src/subdomains/supporting/bank-tx/bank-tx/services/bank-tx.service.ts b/src/subdomains/supporting/bank-tx/bank-tx/services/bank-tx.service.ts index 7a14f0a021..bf566b2dc1 100644 --- a/src/subdomains/supporting/bank-tx/bank-tx/services/bank-tx.service.ts +++ b/src/subdomains/supporting/bank-tx/bank-tx/services/bank-tx.service.ts @@ -497,7 +497,7 @@ export class BankTxService implements OnModuleInit { return batch; } - private getType(tx: BankTx): BankTxType | null { + getType(tx: BankTx): BankTxType | null { if (tx.name?.includes('Payward Trading')) { return BankTxType.KRAKEN; } diff --git a/src/subdomains/supporting/fiat-output/fiat-output-job.service.ts b/src/subdomains/supporting/fiat-output/fiat-output-job.service.ts index 44b5d9b6ff..4767133210 100644 --- a/src/subdomains/supporting/fiat-output/fiat-output-job.service.ts +++ b/src/subdomains/supporting/fiat-output/fiat-output-job.service.ts @@ -446,8 +446,10 @@ export class FiatOutputJobService { case FiatOutputType.BANK_TX_RETURN: return this.bankTxService.updateInternal(bankTx, { type: BankTxType.BANK_TX_RETURN_CHARGEBACK }); - case FiatOutputType.LIQ_MANAGEMENT: - return this.bankTxService.updateInternal(bankTx, { type: BankTxType.INTERNAL }); + case FiatOutputType.LIQ_MANAGEMENT: { + const specificType = this.bankTxService.getType(bankTx); + if (specificType) return this.bankTxService.updateInternal(bankTx, { type: specificType }); + } } } }