fix: bug in approve of the deposit request

This commit is contained in:
mahyargdz
2025-02-24 17:16:17 +03:30
parent d563c254e2
commit 17e39fde09
5 changed files with 57 additions and 39 deletions
@@ -11,7 +11,6 @@ import { PaginationDto } from "../../../common/DTO/pagination.dto";
import { CommonMessage, PaymentMessage, UserMessage, WalletMessage } from "../../../common/enums/message.enum";
import { User } from "../../users/entities/user.entity";
import { PaginationUtils } from "../../utils/providers/pagination.utils";
import { Wallet } from "../../wallets/entities/wallet.entity";
import { WalletsService } from "../../wallets/providers/wallets.service";
import { PAYMENT } from "../constants";
import { CreateBankAccountDto } from "../DTO/create-bankaccount.dto";
@@ -363,27 +362,30 @@ export class PaymentsService {
await queryRunner.connect();
await queryRunner.startTransaction();
try {
const depositRequest = await queryRunner.manager.findOne(DepositRequest, {
where: { id: depositId },
lock: { mode: "pessimistic_write" },
});
// const depositRequest = await queryRunner.manager.findOne(DepositRequest, {
// where: { id: depositId },
// lock: { mode: "pessimistic_write" },
// });
const depositRequest = await queryRunner.manager
.createQueryBuilder(DepositRequest, "deposit")
.innerJoinAndSelect("deposit.user", "user")
.where("deposit.id = :id", { id: depositId })
.setLock("pessimistic_write")
.getOne();
if (!depositRequest) throw new BadRequestException(PaymentMessage.DEPOSIT_NOT_FOUND);
if (depositRequest.status === DepositRequestStatus.APPROVED) throw new BadRequestException(PaymentMessage.DEPOSIT_ALREADY_APPROVED);
const wallet = await queryRunner.manager.findOneBy(Wallet, { user: depositRequest.user });
if (!wallet) throw new BadRequestException(WalletMessage.WALLET_NOT_FOUND);
await queryRunner.manager.update(Wallet, { id: wallet.id }, { balance: new Decimal(wallet.balance).add(depositRequest.amount) });
await queryRunner.manager.update(DepositRequest, { id: depositRequest.id }, { status: DepositRequestStatus.APPROVED });
await this.walletsService.createDepositTransaction(depositRequest.amount, wallet.id, queryRunner);
await this.walletsService.createDepositTransaction(depositRequest.amount, depositRequest.user.id, queryRunner);
await queryRunner.commitTransaction();
return {
message: PaymentMessage.DEPOSIT_APPROVED,
depositRequest,
depositRequest: depositRequest.id,
};
} catch (error) {
await queryRunner.rollbackTransaction();