feat: add guardian transactions feature with response DTOs and service integration

This commit is contained in:
Abdalhamid Alhamad
2025-10-15 14:14:59 +03:00
parent 183f6b4475
commit f6fa74897a
16 changed files with 344 additions and 6 deletions

View 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);
}
}