diff --git a/migration/1772303358000-AddRaiffeisenBankAssets.js b/migration/1772303358000-AddRaiffeisenBankAssets.js new file mode 100644 index 0000000000..d2d529496c --- /dev/null +++ b/migration/1772303358000-AddRaiffeisenBankAssets.js @@ -0,0 +1,35 @@ +module.exports = class AddRaiffeisenBankAssets1772303358000 { + name = 'AddRaiffeisenBankAssets1772303358000'; + + async up(queryRunner) { + // Insert Raiffeisen EUR asset + await queryRunner.query(` + SET IDENTITY_INSERT "dbo"."asset" ON; + INSERT INTO "dbo"."asset" ("id", "name", "type", "buyable", "sellable", "dexName", "category", "blockchain", "uniqueName", "comingSoon", "ikna", "cardBuyable", "cardSellable", "instantBuyable", "instantSellable", "financialType", "paymentEnabled", "amlRuleFrom", "amlRuleTo", "refundEnabled", "refEnabled") + VALUES (420, 'EUR', 'Custody', 0, 0, 'EUR', 'Private', 'Raiffeisen', 'Raiffeisen/EUR', 0, 0, 0, 0, 0, 0, 'EUR', 0, 0, 0, 1, 0); + SET IDENTITY_INSERT "dbo"."asset" OFF; + `); + + // Insert Raiffeisen CHF asset + await queryRunner.query(` + SET IDENTITY_INSERT "dbo"."asset" ON; + INSERT INTO "dbo"."asset" ("id", "name", "type", "buyable", "sellable", "dexName", "category", "blockchain", "uniqueName", "comingSoon", "ikna", "cardBuyable", "cardSellable", "instantBuyable", "instantSellable", "financialType", "paymentEnabled", "amlRuleFrom", "amlRuleTo", "refundEnabled", "refEnabled") + VALUES (421, 'CHF', 'Custody', 0, 0, 'CHF', 'Private', 'Raiffeisen', 'Raiffeisen/CHF', 0, 0, 0, 0, 0, 0, 'CHF', 0, 0, 0, 1, 0); + SET IDENTITY_INSERT "dbo"."asset" OFF; + `); + + // Link bank 12 (Raiffeisen EUR) to asset 420 + await queryRunner.query(`UPDATE "dbo"."bank" SET "assetId" = 420 WHERE "id" = 12`); + + // Link bank 13 (Raiffeisen CHF) to asset 421 + await queryRunner.query(`UPDATE "dbo"."bank" SET "assetId" = 421 WHERE "id" = 13`); + } + + async down(queryRunner) { + // Unlink banks + await queryRunner.query(`UPDATE "dbo"."bank" SET "assetId" = NULL WHERE "id" IN (12, 13)`); + + // Remove Raiffeisen assets + await queryRunner.query(`DELETE FROM "dbo"."asset" WHERE "id" IN (420, 421)`); + } +}; diff --git a/migration/seed/asset.csv b/migration/seed/asset.csv index f7b2f3168e..324b28f21c 100644 --- a/migration/seed/asset.csv +++ b/migration/seed/asset.csv @@ -225,4 +225,6 @@ id,name,type,buyable,sellable,chainId,sellCommand,dexName,category,blockchain,un 113,BTC,Coin,TRUE,TRUE,,,BTC,Public,Bitcoin,Bitcoin/BTC,Bitcoin,FALSE,,87278.97353,FALSE,11,68819.65463,FALSE,FALSE,FALSE,FALSE,BTC,,TRUE,0,0,74099.1069,TRUE 112,BNB,Coin,TRUE,TRUE,0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c,,BNB,Public,BinanceSmartChain,BinanceSmartChain/BNB,Binance Coin,FALSE,601,833.1583387,FALSE,36,656.9471065,FALSE,FALSE,FALSE,FALSE,Other,18,FALSE,0,0,707.34435,TRUE 111,ETH,Coin,TRUE,TRUE,0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,,ETH,Public,Ethereum,Ethereum/ETH,Ether,FALSE,1,2922.079246,FALSE,6,2304.065646,FALSE,FALSE,FALSE,FALSE,Other,18,TRUE,0,0,2480.82045,TRUE +420,EUR,Custody,FALSE,FALSE,,,EUR,Private,Raiffeisen,Raiffeisen/EUR,,FALSE,,1.17786809,FALSE,39,0.9287514723,FALSE,FALSE,FALSE,FALSE,EUR,,FALSE,0,0,1,TRUE +421,CHF,Custody,FALSE,FALSE,,,CHF,Private,Raiffeisen,Raiffeisen/CHF,,FALSE,,1.268227427,FALSE,37,1,FALSE,FALSE,FALSE,FALSE,CHF,,FALSE,0,0,1.076714309,TRUE 409,FIRO,Coin,TRUE,TRUE,,,FIRO,Public,Firo,Firo/FIRO,,FALSE,,1.5,FALSE,,1.35,FALSE,FALSE,FALSE,FALSE,Other,8,FALSE,0,0,1.4,TRUE diff --git a/migration/seed/bank.csv b/migration/seed/bank.csv index 64aa9f4d28..8496102035 100644 --- a/migration/seed/bank.csv +++ b/migration/seed/bank.csv @@ -1,7 +1,6 @@ id,updated,created,name,iban,bic,currency,receive,send,sctInst,amlEnabled,assetId 16,2025-12-05 14:27:39,2025-12-05 14:27:39,Yapeal,CH6783019DFXEUR000002,YAPECHZ2,EUR,TRUE,TRUE,FALSE,TRUE,405 15,2025-12-05 14:27:39,2025-12-05 14:27:39,Yapeal,CH5283019DFXCHF000001,YAPECHZ2,CHF,TRUE,TRUE,FALSE,TRUE,404 -14,2025-09-10 23:30:56,2025-09-10 23:30:56,Maerki Baumann,LU116060002000005040,OLKILUL1,EUR,FALSE,FALSE,FALSE,TRUE, -13,2025-09-10 23:30:07,2025-09-10 23:30:07,Maerki Baumann,CH4880808002186504370,RAIFCH22,CHF,FALSE,FALSE,FALSE,TRUE, -12,2025-09-10 23:30:07,2025-09-10 23:30:07,Maerki Baumann,CH7780808002608614092,RAIFCH22,EUR,FALSE,FALSE,FALSE,TRUE, +13,2025-09-10 23:30:07,2025-09-10 23:30:07,Raiffeisen,CH4880808002186504370,RAIFCH22,CHF,FALSE,FALSE,FALSE,TRUE,421 +12,2025-09-10 23:30:07,2025-09-10 23:30:07,Raiffeisen,CH7780808002608614092,RAIFCH22,EUR,FALSE,FALSE,FALSE,TRUE,420 8,2025-09-10 23:30:06,2025-09-10 23:30:06,Maerki Baumann,CH3808573109968202333,MAEBCHZZ,USD,FALSE,FALSE,FALSE,TRUE, \ No newline at end of file diff --git a/src/integration/blockchain/shared/enums/blockchain.enum.ts b/src/integration/blockchain/shared/enums/blockchain.enum.ts index a164357234..f7f5db3060 100644 --- a/src/integration/blockchain/shared/enums/blockchain.enum.ts +++ b/src/integration/blockchain/shared/enums/blockchain.enum.ts @@ -41,4 +41,5 @@ export enum Blockchain { CHECKOUT = 'Checkout', SUMIXX = 'Sumixx', YAPEAL = 'Yapeal', + RAIFFEISEN = 'Raiffeisen', } diff --git a/src/integration/blockchain/shared/util/blockchain.util.ts b/src/integration/blockchain/shared/util/blockchain.util.ts index e5ab5482e3..2e537f7578 100644 --- a/src/integration/blockchain/shared/util/blockchain.util.ts +++ b/src/integration/blockchain/shared/util/blockchain.util.ts @@ -101,6 +101,7 @@ const BlockchainExplorerUrls: { [b in Blockchain]: string } = { [Blockchain.CHECKOUT]: undefined, [Blockchain.SUMIXX]: undefined, [Blockchain.YAPEAL]: undefined, + [Blockchain.RAIFFEISEN]: undefined, }; const TxPaths: { [b in Blockchain]: string } = { @@ -140,6 +141,7 @@ const TxPaths: { [b in Blockchain]: string } = { [Blockchain.CHECKOUT]: undefined, [Blockchain.SUMIXX]: undefined, [Blockchain.YAPEAL]: undefined, + [Blockchain.RAIFFEISEN]: undefined, }; function assetPaths(asset: Asset): string | undefined { diff --git a/src/integration/exchange/services/__tests__/exchange.test.ts b/src/integration/exchange/services/__tests__/exchange.test.ts index 4be13c59aa..d51dc99c4f 100644 --- a/src/integration/exchange/services/__tests__/exchange.test.ts +++ b/src/integration/exchange/services/__tests__/exchange.test.ts @@ -49,5 +49,6 @@ export class TestExchangeService extends ExchangeService { Checkout: undefined, Sumixx: undefined, Yapeal: undefined, + Raiffeisen: undefined, }; } diff --git a/src/integration/exchange/services/binance.service.ts b/src/integration/exchange/services/binance.service.ts index 53adfe7946..197f5fc989 100644 --- a/src/integration/exchange/services/binance.service.ts +++ b/src/integration/exchange/services/binance.service.ts @@ -46,6 +46,7 @@ export class BinanceService extends ExchangeService { Checkout: undefined, Sumixx: undefined, Yapeal: undefined, + Raiffeisen: undefined, }; constructor() { diff --git a/src/integration/exchange/services/bitstamp.service.ts b/src/integration/exchange/services/bitstamp.service.ts index f5d393a772..c35e2c79df 100644 --- a/src/integration/exchange/services/bitstamp.service.ts +++ b/src/integration/exchange/services/bitstamp.service.ts @@ -46,6 +46,7 @@ export class BitstampService extends ExchangeService { Checkout: undefined, Sumixx: undefined, Yapeal: undefined, + Raiffeisen: undefined, }; constructor() { diff --git a/src/integration/exchange/services/kraken.service.ts b/src/integration/exchange/services/kraken.service.ts index d8c57139f0..c7126cde29 100644 --- a/src/integration/exchange/services/kraken.service.ts +++ b/src/integration/exchange/services/kraken.service.ts @@ -53,6 +53,7 @@ export class KrakenService extends ExchangeService { Checkout: undefined, Sumixx: undefined, Yapeal: undefined, + Raiffeisen: undefined, }; @Inject() private readonly settingService: SettingService; diff --git a/src/integration/exchange/services/kucoin.service.ts b/src/integration/exchange/services/kucoin.service.ts index 1191f72943..fa2e83c291 100644 --- a/src/integration/exchange/services/kucoin.service.ts +++ b/src/integration/exchange/services/kucoin.service.ts @@ -46,6 +46,7 @@ export class KucoinService extends ExchangeService { Checkout: undefined, Sumixx: undefined, Yapeal: undefined, + Raiffeisen: undefined, }; constructor() { diff --git a/src/integration/exchange/services/mexc.service.ts b/src/integration/exchange/services/mexc.service.ts index d4a7e19a38..f9defdd579 100644 --- a/src/integration/exchange/services/mexc.service.ts +++ b/src/integration/exchange/services/mexc.service.ts @@ -62,6 +62,7 @@ export class MexcService extends ExchangeService { Checkout: undefined, Sumixx: undefined, Yapeal: undefined, + Raiffeisen: undefined, }; constructor(private readonly http: HttpService) { diff --git a/src/integration/exchange/services/xt.service.ts b/src/integration/exchange/services/xt.service.ts index 3a83c805a7..f54f168a12 100644 --- a/src/integration/exchange/services/xt.service.ts +++ b/src/integration/exchange/services/xt.service.ts @@ -46,6 +46,7 @@ export class XtService extends ExchangeService { Checkout: undefined, Sumixx: undefined, Yapeal: undefined, + Raiffeisen: undefined, }; constructor() { diff --git a/src/subdomains/core/buy-crypto/process/entities/buy-crypto.entity.ts b/src/subdomains/core/buy-crypto/process/entities/buy-crypto.entity.ts index 0990d473ed..40a1ac1434 100644 --- a/src/subdomains/core/buy-crypto/process/entities/buy-crypto.entity.ts +++ b/src/subdomains/core/buy-crypto/process/entities/buy-crypto.entity.ts @@ -729,6 +729,7 @@ export class BuyCrypto extends IEntity { case Blockchain.MAERKI_BAUMANN: case Blockchain.OLKYPAY: case Blockchain.YAPEAL: + case Blockchain.RAIFFEISEN: return BankService.isBankMatching(asset, this.bankTx?.accountIban) ? this.inputReferenceAmount : 0; case Blockchain.CHECKOUT: diff --git a/src/subdomains/core/referral/reward/services/ref-reward.service.ts b/src/subdomains/core/referral/reward/services/ref-reward.service.ts index 9a9be6fcad..0b2fb30f11 100644 --- a/src/subdomains/core/referral/reward/services/ref-reward.service.ts +++ b/src/subdomains/core/referral/reward/services/ref-reward.service.ts @@ -58,6 +58,7 @@ const PayoutLimits: { [k in Blockchain]: number } = { [Blockchain.CHECKOUT]: undefined, [Blockchain.SUMIXX]: undefined, [Blockchain.YAPEAL]: undefined, + [Blockchain.RAIFFEISEN]: undefined, }; @Injectable() diff --git a/src/subdomains/supporting/bank-tx/bank-tx-repeat/bank-tx-repeat.entity.ts b/src/subdomains/supporting/bank-tx/bank-tx-repeat/bank-tx-repeat.entity.ts index db60eb8bbd..9430bf0283 100644 --- a/src/subdomains/supporting/bank-tx/bank-tx-repeat/bank-tx-repeat.entity.ts +++ b/src/subdomains/supporting/bank-tx/bank-tx-repeat/bank-tx-repeat.entity.ts @@ -73,6 +73,7 @@ export class BankTxRepeat extends IEntity { case Blockchain.MAERKI_BAUMANN: case Blockchain.OLKYPAY: case Blockchain.YAPEAL: + case Blockchain.RAIFFEISEN: return BankService.isBankMatching(asset, this.bankTx.accountIban) ? this.bankTx.amount : 0; default: diff --git a/src/subdomains/supporting/bank-tx/bank-tx-return/bank-tx-return.entity.ts b/src/subdomains/supporting/bank-tx/bank-tx-return/bank-tx-return.entity.ts index b771d1705c..eb9b1317ab 100644 --- a/src/subdomains/supporting/bank-tx/bank-tx-return/bank-tx-return.entity.ts +++ b/src/subdomains/supporting/bank-tx/bank-tx-return/bank-tx-return.entity.ts @@ -152,6 +152,7 @@ export class BankTxReturn extends IEntity { case Blockchain.MAERKI_BAUMANN: case Blockchain.OLKYPAY: case Blockchain.YAPEAL: + case Blockchain.RAIFFEISEN: return BankService.isBankMatching(asset, this.bankTx.accountIban) ? this.bankTx.amount : 0; default: diff --git a/src/subdomains/supporting/bank-tx/bank-tx/entities/bank-tx.entity.ts b/src/subdomains/supporting/bank-tx/bank-tx/entities/bank-tx.entity.ts index e2a31ac705..739e77621a 100644 --- a/src/subdomains/supporting/bank-tx/bank-tx/entities/bank-tx.entity.ts +++ b/src/subdomains/supporting/bank-tx/bank-tx/entities/bank-tx.entity.ts @@ -371,6 +371,7 @@ export class BankTx extends IEntity { case Blockchain.MAERKI_BAUMANN: case Blockchain.OLKYPAY: case Blockchain.YAPEAL: + case Blockchain.RAIFFEISEN: return BankService.isBankMatching(asset, this.accountIban) ? this.amount : 0; default: diff --git a/src/subdomains/supporting/bank/bank/bank.service.ts b/src/subdomains/supporting/bank/bank/bank.service.ts index 47460d8bca..3503619682 100644 --- a/src/subdomains/supporting/bank/bank/bank.service.ts +++ b/src/subdomains/supporting/bank/bank/bank.service.ts @@ -116,6 +116,8 @@ export class BankService implements OnModuleInit { return IbanBankName.OLKY; case Blockchain.YAPEAL: return IbanBankName.YAPEAL; + case Blockchain.RAIFFEISEN: + return IbanBankName.RAIFFEISEN; default: return undefined; }