diff --git a/src/config/config.ts b/src/config/config.ts index 2ea061eb21..618beb9eb8 100644 --- a/src/config/config.ts +++ b/src/config/config.ts @@ -47,6 +47,7 @@ export class Configuration { kycVersion: Version = '2'; defaultVersionString = `v${this.defaultVersion}`; defaultRef = '000-000'; + defaultWalletId = 1; transactionRefundExpirySeconds = 300; // 5 minutes - enough time to fill out the refund form refRewardManualCheckLimit = 3000; // EUR txRequestWaitingExpiryDays = 7; diff --git a/src/subdomains/core/custody/services/custody.service.ts b/src/subdomains/core/custody/services/custody.service.ts index 7feda31aad..27dfc16a48 100644 --- a/src/subdomains/core/custody/services/custody.service.ts +++ b/src/subdomains/core/custody/services/custody.service.ts @@ -54,7 +54,7 @@ export class CustodyService { const custodyWallet = EvmUtil.createWallet(Config.blockchain.evm.custodyAccount(addressIndex)); const signature = await custodyWallet.signMessage(Config.auth.signMessageGeneral + custodyWallet.address); - const account = await this.userDataService.getUserData(accountId); + const account = await this.userDataService.getUserData(accountId, { users: true }); if (!account) throw new NotFoundException('User not found'); const custodyUser = await this.userService.createUser( diff --git a/src/subdomains/generic/user/models/user-data/user-data.service.ts b/src/subdomains/generic/user/models/user-data/user-data.service.ts index 0f2193c108..e4a55f545b 100644 --- a/src/subdomains/generic/user/models/user-data/user-data.service.ts +++ b/src/subdomains/generic/user/models/user-data/user-data.service.ts @@ -1166,6 +1166,7 @@ export class UserDataService { // optional master updates if (master.status === UserDataStatus.KYC_ONLY && slave.users.length && slave.wallet) master.wallet = slave.wallet; if ([UserDataStatus.KYC_ONLY, UserDataStatus.DEACTIVATED].includes(master.status)) master.status = slave.status; + if ((!master.wallet || master.wallet.id === Config.defaultWalletId) && slave.wallet) master.wallet = slave.wallet; if (!master.amlListAddedDate && slave.amlListAddedDate) { master.amlListAddedDate = slave.amlListAddedDate; master.amlListExpiredDate = slave.amlListExpiredDate; diff --git a/src/subdomains/generic/user/models/user/user.service.ts b/src/subdomains/generic/user/models/user/user.service.ts index bb0a5147be..be1beb2a86 100644 --- a/src/subdomains/generic/user/models/user/user.service.ts +++ b/src/subdomains/generic/user/models/user/user.service.ts @@ -240,11 +240,14 @@ export class UserService { addressType: CryptoService.getAddressType(data.address), }); const userIsActive = data.userData?.status === UserDataStatus.ACTIVE; + const lastExistingUsedRef = data.userData?.users + ? Util.sort(data.userData.users, 'id', 'DESC').find((u) => u.usedRef !== Config.defaultRef)?.usedRef + : undefined; user.ip = data.ip; user.ipCountry = this.geoLocationService.getCountry(data.ip); user.wallet = data.wallet ?? (await this.walletService.getDefault()); - user.usedRef = await this.checkRef(user, data.usedRef); + user.usedRef = await this.checkRef(user, data.usedRef, lastExistingUsedRef); user.origin = data.origin; user.custodyProvider = data.custodyProvider; if (userIsActive) user.status = UserStatus.ACTIVE; @@ -597,14 +600,14 @@ export class UserService { await this.userDataRepo.activateUserData(userData); } - private async checkRef(user: User, usedRef: string): Promise { - const refUser = await this.getRefUser(usedRef); - return usedRef === null || - usedRef === user.ref || - (usedRef && !refUser) || - user?.userData?.id === refUser?.userData?.id - ? Config.defaultRef - : usedRef; + private async checkRef(user: User, usedRef?: string, existingUsedRef?: string): Promise { + if (usedRef) { + const refUser = await this.getRefUser(usedRef); + const isValidRef = usedRef !== user.ref && refUser && user?.userData?.id !== refUser?.userData?.id; + if (isValidRef) return usedRef; + } + + return existingUsedRef ?? Config.defaultRef; } public async getTotalRefRewards(): Promise { diff --git a/src/subdomains/generic/user/models/wallet/wallet.service.ts b/src/subdomains/generic/user/models/wallet/wallet.service.ts index 966e499314..068aa02508 100644 --- a/src/subdomains/generic/user/models/wallet/wallet.service.ts +++ b/src/subdomains/generic/user/models/wallet/wallet.service.ts @@ -1,4 +1,5 @@ import { Injectable, NotFoundException } from '@nestjs/common'; +import { Config } from 'src/config/config'; import { WalletRepository } from 'src/subdomains/generic/user/models/wallet/wallet.repository'; import { FindOptionsRelations } from 'typeorm'; import { WalletDto } from './dto/wallet.dto'; @@ -40,6 +41,6 @@ export class WalletService { } async getDefault(): Promise { - return this.repo.findOneCachedBy('default', { id: 1 }); + return this.repo.findOneCachedBy('default', { id: Config.defaultWalletId }); } }