mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2026-03-10 18:41:46 +00:00
feat: add guardian transactions feature with response DTOs and service integration
This commit is contained in:
45
src/guardian/services/guardian-transactions.service.ts
Normal file
45
src/guardian/services/guardian-transactions.service.ts
Normal file
@ -0,0 +1,45 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { CustomerService } from '~/customer/services';
|
||||
import { GuardianHomeResponseDto, PagedTransactionsResponseDto } from '~/card/dtos/responses';
|
||||
import { TransactionItemResponseDto } from '~/card/dtos/responses';
|
||||
import { ParentTransactionType } from '~/card/enums';
|
||||
import { TransactionService } from '~/card/services/transaction.service';
|
||||
|
||||
@Injectable()
|
||||
export class GuardianTransactionsService {
|
||||
constructor(
|
||||
private readonly customerService: CustomerService,
|
||||
private readonly transactionService: TransactionService,
|
||||
) {}
|
||||
|
||||
async getHome(guardianId: string, size: number): Promise<GuardianHomeResponseDto> {
|
||||
const parent = await this.customerService.findCustomerById(guardianId);
|
||||
const primaryCard = parent.cards?.[0];
|
||||
|
||||
let availableBalance = 0;
|
||||
if (primaryCard) {
|
||||
const hasLimit = typeof primaryCard.limit === 'number' && !Number.isNaN(primaryCard.limit);
|
||||
const hasBalance = primaryCard.account && typeof primaryCard.account.balance === 'number';
|
||||
if (hasLimit && hasBalance && primaryCard.limit > 0) {
|
||||
availableBalance = Math.min(primaryCard.limit, primaryCard.account.balance);
|
||||
} else if (hasBalance) {
|
||||
availableBalance = primaryCard.account.balance;
|
||||
}
|
||||
}
|
||||
|
||||
const items: TransactionItemResponseDto[] = await this.transactionService.getParentConsolidated(guardianId, 1, size);
|
||||
|
||||
return new GuardianHomeResponseDto(availableBalance, items);
|
||||
}
|
||||
|
||||
async getTransactions(
|
||||
guardianId: string,
|
||||
page: number,
|
||||
size: number,
|
||||
type?: ParentTransactionType,
|
||||
): Promise<PagedTransactionsResponseDto> {
|
||||
return this.transactionService.getParentTransactionsPaginated(guardianId, page, size, type);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user