diff --git a/packages/server/src/account/account.repository.ts b/packages/server/src/account/account.repository.ts index 20d29348..6cc228f7 100644 --- a/packages/server/src/account/account.repository.ts +++ b/packages/server/src/account/account.repository.ts @@ -49,7 +49,7 @@ export class AccountRepository extends Repository { async updateAccountCurrency( typeGiven: string, - accountBalance: number, + change: number, accountId: number, queryRunner: QueryRunner, ): Promise { @@ -60,7 +60,32 @@ export class AccountRepository extends Repository { await queryRunner.manager .createQueryBuilder() .update(Account) - .set({ [typeGiven]: accountBalance }) + .set({ [typeGiven]: `${typeGiven} + ${change}` }) + .where('id = :id', { id: accountId }) + .execute(); + + this.logger.log(`계정 통화 업데이트 완료: accountId=${accountId}`); + } catch (error) { + this.logger.error( + `계정 통화 업데이트 실패: ${error.message}`, + error.stack, + ); + throw error; + } + } + async updateAccountAvailableCurrency( + change: number, + accountId: number, + queryRunner: QueryRunner, + ): Promise { + this.logger.log( + `계정 통화 업데이트 시작: accountId=${accountId}, type=availableKRW`, + ); + try { + await queryRunner.manager + .createQueryBuilder() + .update(Account) + .set({ availableKRW: () => `availableKRW + ${change}` }) .where('id = :id', { id: accountId }) .execute(); @@ -104,31 +129,7 @@ export class AccountRepository extends Repository { return account.availableKRW; } - async updateAccountAvailableCurrency( - change: number, - accountId: number, - queryRunner: QueryRunner, - ): Promise { - this.logger.log( - `계정 통화 업데이트 시작: accountId=${accountId}, type=availableKRW`, - ); - try { - await queryRunner.manager - .createQueryBuilder() - .update(Account) - .set({ availableKRW: () => `availableKRW + ${change}` }) - .where('id = :id', { id: accountId }) - .execute(); - this.logger.log(`계정 통화 업데이트 완료: accountId=${accountId}`); - } catch (error) { - this.logger.error( - `계정 통화 업데이트 실패: ${error.message}`, - error.stack, - ); - throw error; - } - } async updateAccountBTC( id: number, diff --git a/packages/server/src/trade/trade-ask.service.ts b/packages/server/src/trade/trade-ask.service.ts index 59537507..878cbc70 100644 --- a/packages/server/src/trade/trade-ask.service.ts +++ b/packages/server/src/trade/trade-ask.service.ts @@ -292,9 +292,7 @@ export class AskService extends TradeAskBidService implements OnModuleInit { ); } - const change = formatQuantity( - account[askDto.typeReceived] + buyData.price * buyData.quantity, - ); + const change = formatQuantity(buyData.price * buyData.quantity); await this.accountRepository.updateAccountCurrency( askDto.typeReceived, @@ -302,16 +300,7 @@ export class AskService extends TradeAskBidService implements OnModuleInit { account.id, queryRunner, ); - const availableChange = formatQuantity( - account.availableKRW + buyData.price * buyData.quantity, - ); - - await this.accountRepository.updateAccountCurrency( - askDto.typeReceived, - change, - account.id, - queryRunner, - ); + const availableChange = formatQuantity(buyData.price * buyData.quantity); await this.accountRepository.updateAccountCurrency( 'availableKRW', diff --git a/packages/server/src/trade/trade-bid.service.ts b/packages/server/src/trade/trade-bid.service.ts index 572906bc..cfc81302 100644 --- a/packages/server/src/trade/trade-bid.service.ts +++ b/packages/server/src/trade/trade-bid.service.ts @@ -77,14 +77,15 @@ export class BidService extends TradeAskBidService implements OnModuleInit { const userAccount = await this.accountRepository.validateUserAccount( user.userId, ); - const accountBalance = await this.checkCurrencyBalance( - bidDto, - userAccount, - ); + // const accountBalance = await this.checkCurrencyBalance( + // bidDto, + // userAccount, + // ); + const { receivedPrice, receivedAmount } = bidDto; await this.accountRepository.updateAccountCurrency( 'availableKRW', - accountBalance, + -formatQuantity(receivedPrice * receivedAmount), userAccount.id, queryRunner, ); @@ -278,18 +279,17 @@ export class BidService extends TradeAskBidService implements OnModuleInit { (bidDto.receivedPrice - buyData.price) * buyData.quantity, ); - const returnChange = formatQuantity( - userAccount[typeGiven] - buyData.price * buyData.quantity, - ); + const returnChange = formatQuantity(buyData.price * buyData.quantity); await this.accountRepository.updateAccountCurrency( typeGiven, - returnChange, + -returnChange, account.id, queryRunner, ); - await this.accountRepository.updateAccountAvailableCurrency( + await this.accountRepository.updateAccountCurrency( + 'availableKRW', change, account.id, queryRunner, diff --git a/packages/server/src/trade/trade.service.ts b/packages/server/src/trade/trade.service.ts index 09fab343..591a78c7 100644 --- a/packages/server/src/trade/trade.service.ts +++ b/packages/server/src/trade/trade.service.ts @@ -238,7 +238,7 @@ export class TradeService { private calculateAccountBalance(trade: any, userAccount: any): number { return parseFloat( - (trade.price * trade.quantity + userAccount.availableKRW).toFixed( + (trade.price * trade.quantity).toFixed( 8, ), );