chore: add new route for get single transaction for user
This commit is contained in:
@@ -5,6 +5,8 @@ import { Column, Entity, ManyToOne } from "typeorm";
|
||||
import { Wallet } from "./wallet.entity";
|
||||
import { BaseEntity } from "../../../common/entities/base.entity";
|
||||
import { DecimalTransformer } from "../../../common/transformers/decimal.transformer";
|
||||
import { DepositRequest } from "../../payments/entities/deposit-request.entity";
|
||||
import { Payment } from "../../payments/entities/payment.entity";
|
||||
import { TransactionType } from "../enums/transaction-type.enum";
|
||||
|
||||
@Entity()
|
||||
@@ -23,4 +25,10 @@ export class WalletTransaction extends BaseEntity {
|
||||
|
||||
@Column({ type: "text", nullable: false })
|
||||
description: string;
|
||||
|
||||
@ManyToOne(() => Payment, (payment) => payment.transactions, { onDelete: "CASCADE", nullable: true })
|
||||
payment: Payment | null;
|
||||
|
||||
@ManyToOne(() => DepositRequest, (depositRequest) => depositRequest.transactions, { onDelete: "CASCADE", nullable: true })
|
||||
depositRequest: DepositRequest | null;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,8 @@ import { PaginationDto } from "../../../common/DTO/pagination.dto";
|
||||
import { WalletMessage } from "../../../common/enums/message.enum";
|
||||
import { decimal } from "../../../common/transformers/decimal.transformer";
|
||||
import { SearchTransactionQueryDto } from "../../payments/DTO/search-transaction-query.dto";
|
||||
import { DepositRequest } from "../../payments/entities/deposit-request.entity";
|
||||
import { Payment } from "../../payments/entities/payment.entity";
|
||||
import { PaginationUtils } from "../../utils/providers/pagination.utils";
|
||||
import { WalletTransaction } from "../entities/transaction.entity";
|
||||
import { Wallet } from "../entities/wallet.entity";
|
||||
@@ -39,7 +41,7 @@ export class WalletsService {
|
||||
return wallet;
|
||||
}
|
||||
//*********************************** */
|
||||
async createPaymentTransaction(userId: string, amount: Decimal, queryRunner: QueryRunner) {
|
||||
async createPaymentTransaction(userId: string, amount: Decimal, payment: Payment, queryRunner: QueryRunner) {
|
||||
const wallet = await queryRunner.manager.findOne(Wallet, { where: { user: { id: userId } }, lock: { mode: "pessimistic_write" } });
|
||||
if (!wallet) throw new BadRequestException(WalletMessage.WALLET_NOT_FOUND);
|
||||
|
||||
@@ -48,6 +50,7 @@ export class WalletsService {
|
||||
wallet: { id: wallet.id },
|
||||
type: TransactionType.DEPOSIT,
|
||||
description: WalletMessage.DEPOSIT_WALLET_IPG,
|
||||
payment,
|
||||
});
|
||||
|
||||
wallet.balance = new Decimal(wallet.balance).add(transaction.amount);
|
||||
@@ -59,7 +62,7 @@ export class WalletsService {
|
||||
}
|
||||
//*********************************** */
|
||||
|
||||
async createDepositTransaction(amount: Decimal, userId: string, queryRunner: QueryRunner) {
|
||||
async createDepositTransaction(userId: string, amount: Decimal, depositRequest: DepositRequest, queryRunner: QueryRunner) {
|
||||
const wallet = await queryRunner.manager.findOne(Wallet, { where: { user: { id: userId } }, lock: { mode: "pessimistic_write" } });
|
||||
if (!wallet) throw new BadRequestException(WalletMessage.WALLET_NOT_FOUND);
|
||||
|
||||
@@ -68,6 +71,7 @@ export class WalletsService {
|
||||
wallet: { id: wallet.id },
|
||||
type: TransactionType.DEPOSIT,
|
||||
description: WalletMessage.DEPOSIT_WALLET_TRANSFER,
|
||||
depositRequest,
|
||||
});
|
||||
|
||||
wallet.balance = new Decimal(wallet.balance).add(transaction.amount);
|
||||
@@ -149,13 +153,29 @@ export class WalletsService {
|
||||
count,
|
||||
totalDeposits: decimal(totals.totalDeposits) || 0,
|
||||
totalWithdrawals: decimal(totals.totalWithdrawals) || 0,
|
||||
//TODO:fix this
|
||||
balancePercentChange: 5,
|
||||
totalDepositsPercentChange: 4,
|
||||
totalWithdrawalsPercentChange: 10,
|
||||
paginate: true,
|
||||
};
|
||||
}
|
||||
//*********************************** */
|
||||
|
||||
async getTransactionById(transactionId: string, userId: string) {
|
||||
const transaction = await this.walletsTransactionRepo
|
||||
.createQueryBuilder("transaction")
|
||||
.leftJoinAndSelect("transaction.wallet", "wallet")
|
||||
.leftJoin("wallet.user", "user")
|
||||
.addSelect(["user.id", "user.firstName", "user.lastName"])
|
||||
.leftJoinAndSelect("transaction.payment", "payment", "payment.id IS NOT NULL")
|
||||
.leftJoinAndSelect("payment.paymentGateway", "paymentGateway", "payment.id IS NOT NULL")
|
||||
.leftJoinAndSelect("transaction.depositRequest", "depositRequest", "depositRequest.id IS NOT NULL")
|
||||
.leftJoinAndSelect("depositRequest.bankAccount", "bankAccount", "depositRequest.id IS NOT NULL")
|
||||
.where("transaction.id = :transactionId", { transactionId })
|
||||
.andWhere("wallet.userId = :userId", { userId })
|
||||
.getOne();
|
||||
|
||||
if (!transaction) throw new BadRequestException(WalletMessage.TRANSACTION_NOT_FOUND);
|
||||
|
||||
return { transaction };
|
||||
}
|
||||
|
||||
//*********************************** */
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Controller, Get, Query } from "@nestjs/common";
|
||||
import { Controller, Get, Param, Query } from "@nestjs/common";
|
||||
import { ApiOperation, ApiTags } from "@nestjs/swagger";
|
||||
|
||||
import { WalletsService } from "./providers/wallets.service";
|
||||
@@ -6,6 +6,7 @@ import { AuthGuards } from "../../common/decorators/auth-guard.decorator";
|
||||
import { Pagination } from "../../common/decorators/pagination.decorator";
|
||||
import { UserDec } from "../../common/decorators/user.decorator";
|
||||
import { PaginationDto } from "../../common/DTO/pagination.dto";
|
||||
import { ParamDto } from "../../common/DTO/param.dto";
|
||||
|
||||
@Controller("wallets")
|
||||
@ApiTags("wallets")
|
||||
@@ -26,4 +27,11 @@ export class WalletsController {
|
||||
getTransactions(@UserDec("id") userId: string, @Query() paginationDto: PaginationDto) {
|
||||
return this.walletsService.getTransaction(userId, paginationDto);
|
||||
}
|
||||
|
||||
@ApiOperation({ summary: "get transaction by id" })
|
||||
@AuthGuards()
|
||||
@Get("transactions/:id")
|
||||
getTransactionById(@Param() paramDto: ParamDto, @UserDec("id") userId: string) {
|
||||
return this.walletsService.getTransactionById(paramDto.id, userId);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user