mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2026-03-10 18:41:46 +00:00
ZOD-309-child-transaction-history-parent-→-child-transfers
This commit is contained in:
@ -11,7 +11,14 @@ import { CustomerType, TransactionType } from '../enums';
|
||||
import { TransactionRepository } from '../repositories/transaction.repository';
|
||||
import { AccountService } from './account.service';
|
||||
import { CardService } from './card.service';
|
||||
import { TransactionItemResponseDto, PagedTransactionsResponseDto } from '../dtos/responses';
|
||||
import {
|
||||
TransactionItemResponseDto,
|
||||
PagedTransactionsResponseDto,
|
||||
ParentTransferItemDto,
|
||||
PagedParentTransfersResponseDto,
|
||||
ChildTransferItemDto,
|
||||
PagedChildTransfersResponseDto,
|
||||
} from '../dtos/responses';
|
||||
import { ParentTransactionType } from '../enums';
|
||||
|
||||
@Injectable()
|
||||
@ -182,6 +189,68 @@ export class TransactionService {
|
||||
return new PagedTransactionsResponseDto(mapped, page, size, total);
|
||||
}
|
||||
|
||||
async getParentTransfersOnly(guardianCustomerId: string, page: number, size: number): Promise<ParentTransferItemDto[]> {
|
||||
const skip = (page - 1) * size;
|
||||
const transfers = await this.transactionRepository.findParentTransfers(guardianCustomerId, skip, size);
|
||||
return transfers.map((t) => this.mapToParentTransferItem(t));
|
||||
}
|
||||
|
||||
async getParentTransfersPaginated(
|
||||
guardianCustomerId: string,
|
||||
page: number,
|
||||
size: number,
|
||||
): Promise<PagedParentTransfersResponseDto> {
|
||||
const skip = (page - 1) * size;
|
||||
const [transfers, total] = await Promise.all([
|
||||
this.transactionRepository.findParentTransfers(guardianCustomerId, skip, size),
|
||||
this.transactionRepository.countParentTransfers(guardianCustomerId),
|
||||
]);
|
||||
const items = transfers.map((t) => this.mapToParentTransferItem(t));
|
||||
return new PagedParentTransfersResponseDto(items, page, size, total);
|
||||
}
|
||||
|
||||
async getChildTransfers(juniorId: string, page: number, size: number): Promise<ChildTransferItemDto[]> {
|
||||
const skip = (page - 1) * size;
|
||||
const transfers = await this.transactionRepository.findTransfersToJunior(juniorId, skip, size);
|
||||
return transfers.map((t) => this.mapToChildTransferItem(t));
|
||||
}
|
||||
|
||||
async getChildTransfersPaginated(
|
||||
juniorId: string,
|
||||
page: number,
|
||||
size: number,
|
||||
): Promise<PagedChildTransfersResponseDto> {
|
||||
const skip = (page - 1) * size;
|
||||
const [transfers, total] = await Promise.all([
|
||||
this.transactionRepository.findTransfersToJunior(juniorId, skip, size),
|
||||
this.transactionRepository.countTransfersToJunior(juniorId),
|
||||
]);
|
||||
const items = transfers.map((t) => this.mapToChildTransferItem(t));
|
||||
return new PagedChildTransfersResponseDto(items, page, size, total);
|
||||
}
|
||||
|
||||
private mapToParentTransferItem(t: Transaction): ParentTransferItemDto {
|
||||
const child = t.card?.customer;
|
||||
const currency = t.transactionCurrency === '682' ? 'SAR' : t.transactionCurrency;
|
||||
return {
|
||||
date: t.transactionDate,
|
||||
amount: Math.abs(t.transactionAmount),
|
||||
currency,
|
||||
childName: child ? `${child.firstName} ${child.lastName}` : 'Child',
|
||||
};
|
||||
}
|
||||
|
||||
private mapToChildTransferItem(t: Transaction): ChildTransferItemDto {
|
||||
const amount = Math.abs(t.transactionAmount);
|
||||
const currency = t.transactionCurrency === '682' ? 'SAR' : t.transactionCurrency;
|
||||
return {
|
||||
date: t.transactionDate,
|
||||
amount,
|
||||
currency,
|
||||
message: `You received {{amount}} {{currency}} from your parent.`,
|
||||
};
|
||||
}
|
||||
|
||||
private mapParentItem(t: Transaction): TransactionItemResponseDto {
|
||||
const dto = new TransactionItemResponseDto();
|
||||
dto.date = t.transactionDate;
|
||||
|
||||
Reference in New Issue
Block a user