diff --git a/sdk/__tests__/port/in/StableCoin.test.ts b/sdk/__tests__/port/in/StableCoin.test.ts index d757b8062..97fdf95a8 100644 --- a/sdk/__tests__/port/in/StableCoin.test.ts +++ b/sdk/__tests__/port/in/StableCoin.test.ts @@ -81,7 +81,7 @@ import BaseError, { } from '../../../src/core/error/BaseError.js'; import BackendEndpoint from '../../../src/domain/context/network/BackendEndpoint.js'; import { Environment } from '../../../src/domain/context/network/Environment.js'; -import MultiSigTransaction from '../../../src/domain/context/transaction/MultiSigTransaction.js'; +import { MultiSigTransaction } from '../../../src/domain/context/transaction/MultiSigTransaction.js'; const decimals = 6; const initialSupply = 1000; @@ -138,7 +138,16 @@ jest.mock('../../../src/port/out/backend/BackendAdapter', () => { .fn() .mockResolvedValue('mocked deleteTransaction'), getTransactions: jest.fn(() => { - return [multiSigTransaction]; + return { + transactions: [multiSigTransaction], + pagination: { + totalItems: 0, + itemCount: 0, + itemsPerPage: 10, + totalPages: 0, + currentPage: 1, + }, + }; }), getTransaction: jest.fn(() => { return multiSigTransaction; @@ -714,8 +723,10 @@ describe('🧪 Stablecoin test', () => { ); expect(result).toBe(true); - expect(trans[0].id).toEqual(trans_pk[0].id); - expect(trans[0].id).toEqual(trans_account[0].id); + expect(trans.transactions[0].id).toEqual(trans_pk.transactions[0].id); + expect(trans.transactions[0].id).toEqual( + trans_account.transactions[0].id, + ); }, 180_000); // ----------------------HTS-------------------------- diff --git a/sdk/__tests__/port/out/BackendAdapter.test.ts b/sdk/__tests__/port/out/BackendAdapter.test.ts index fa9ca19c3..2c477da53 100644 --- a/sdk/__tests__/port/out/BackendAdapter.test.ts +++ b/sdk/__tests__/port/out/BackendAdapter.test.ts @@ -52,6 +52,14 @@ const GET_TRANSACTIONS = { accountId: '0.0.1', }; +const PAGINATION = { + totalItems: 560, + itemCount: 10, + itemsPerPage: 10, + totalPages: 56, + currentPage: 1, +}; + const GET_TRANSACTION = { id: 'id', transaction_message: 'transaction_message', @@ -125,6 +133,7 @@ jest.mock('axios', () => { status: 200, data: { items: [GET_TRANSACTION], + meta: PAGINATION, }, }; @@ -138,6 +147,7 @@ jest.mock('axios', () => { status: 200, data: { items: [GET_TRANSACTION], + meta: PAGINATION, }, }; } @@ -222,42 +232,59 @@ describe('🧪 BackendAdapter test', () => { ); transactions.forEach((trans) => { - expect(trans[0].id).toEqual(GET_TRANSACTION.id); - expect(trans[0].transaction_message).toEqual( + expect(trans.transactions[0].id).toEqual(GET_TRANSACTION.id); + expect(trans.transactions[0].transaction_message).toEqual( GET_TRANSACTION.transaction_message, ); - expect(trans[0].description).toEqual(GET_TRANSACTION.description); - expect(trans[0].status).toEqual(GET_TRANSACTION.status); - expect(trans[0].threshold).toEqual(GET_TRANSACTION.threshold); - expect(trans[0].key_list.length).toEqual( + expect(trans.transactions[0].description).toEqual( + GET_TRANSACTION.description, + ); + expect(trans.transactions[0].status).toEqual( + GET_TRANSACTION.status, + ); + expect(trans.transactions[0].threshold).toEqual( + GET_TRANSACTION.threshold, + ); + expect(trans.transactions[0].key_list.length).toEqual( GET_TRANSACTION.key_list.length, ); - expect(trans[0].signed_keys.length).toEqual( + expect(trans.transactions[0].signed_keys.length).toEqual( GET_TRANSACTION.signed_keys.length, ); - expect(trans[0].signatures.length).toEqual( + expect(trans.transactions[0].signatures.length).toEqual( GET_TRANSACTION.signatures.length, ); - expect(trans[0].network).toEqual(GET_TRANSACTION.network); - expect(trans[0].hedera_account_id).toEqual( + expect(trans.transactions[0].network).toEqual( + GET_TRANSACTION.network, + ); + expect(trans.transactions[0].hedera_account_id).toEqual( GET_TRANSACTION.hedera_account_id, ); - for (let i = 0; i < trans[0].key_list.length; i++) { - expect(trans[0].key_list[i]).toEqual( + for (let i = 0; i < trans.transactions[0].key_list.length; i++) { + expect(trans.transactions[0].key_list[i]).toEqual( GET_TRANSACTION.key_list[i], ); } - for (let i = 0; i < trans[0].signed_keys.length; i++) { - expect(trans[0].signed_keys[i]).toEqual( + for (let i = 0; i < trans.transactions[0].signed_keys.length; i++) { + expect(trans.transactions[0].signed_keys[i]).toEqual( GET_TRANSACTION.signed_keys[i], ); } - for (let i = 0; i < trans[0].signatures.length; i++) { - expect(trans[0].signatures[i]).toEqual( + for (let i = 0; i < trans.transactions[0].signatures.length; i++) { + expect(trans.transactions[0].signatures[i]).toEqual( GET_TRANSACTION.signatures[i], ); } + expect(trans.pagination.totalItems).toEqual(PAGINATION.totalItems); + expect(trans.pagination.currentPage).toEqual( + PAGINATION.currentPage, + ); + expect(trans.pagination.itemCount).toEqual(PAGINATION.itemCount); + expect(trans.pagination.itemsPerPage).toEqual( + PAGINATION.itemsPerPage, + ); + expect(trans.pagination.totalPages).toEqual(PAGINATION.totalPages); }); }, 60_000); diff --git a/sdk/src/app/usecase/query/stablecoin/backend/getTransactions/GetTransactionsQuery.ts b/sdk/src/app/usecase/query/stablecoin/backend/getTransactions/GetTransactionsQuery.ts index 5bdeea1a4..a5bddc7a8 100644 --- a/sdk/src/app/usecase/query/stablecoin/backend/getTransactions/GetTransactionsQuery.ts +++ b/sdk/src/app/usecase/query/stablecoin/backend/getTransactions/GetTransactionsQuery.ts @@ -20,10 +20,10 @@ import { Query } from '../../../../../../core/query/Query.js'; import { QueryResponse } from '../../../../../../core/query/QueryResponse.js'; -import MultiSigTransactionViewModel from '../../../../../../port/out/backend/response/MultiSigTransactionViewModel.js'; +import { MultiSigTransactionsViewModel } from '../../../../../../port/out/backend/response/MultiSigTransactionViewModel.js'; export class GetTransactionsQueryResponse implements QueryResponse { - constructor(public readonly payload: MultiSigTransactionViewModel[]) {} + constructor(public readonly payload: MultiSigTransactionsViewModel) {} } export class GetTransactionsQuery extends Query { diff --git a/sdk/src/app/usecase/query/stablecoin/backend/getTransactions/GetTransactionsQueryHandler.ts b/sdk/src/app/usecase/query/stablecoin/backend/getTransactions/GetTransactionsQueryHandler.ts index 73d92eba9..1a42b62d0 100644 --- a/sdk/src/app/usecase/query/stablecoin/backend/getTransactions/GetTransactionsQueryHandler.ts +++ b/sdk/src/app/usecase/query/stablecoin/backend/getTransactions/GetTransactionsQueryHandler.ts @@ -23,7 +23,11 @@ import { QueryHandler } from '../../../../../../core/decorator/QueryHandlerDecor import { IQueryHandler } from '../../../../../../core/query/QueryHandler.js'; import { BackendAdapter } from '../../../../../../port/out/backend/BackendAdapter.js'; import { MirrorNodeAdapter } from '../../../../../../port/out/mirror/MirrorNodeAdapter.js'; -import MultiSigTransactionViewModel from '../../../../../../port/out/backend/response/MultiSigTransactionViewModel.js'; +import { + MultiSigTransactionsViewModel, + MultiSigTransactionViewModel, + PaginationViewModel, +} from '../../../../../../port/out/backend/response/MultiSigTransactionViewModel.js'; import RPCQueryAdapter from '../../../../../../port/out/rpc/RPCQueryAdapter.js'; import { GetTransactionsQuery, @@ -60,10 +64,16 @@ export class GetTransactionsQueryHandler accountId, ); - const returnValue: MultiSigTransactionViewModel[] = res.map( - (trans) => ({ ...trans }), - ); + const returnedTransactions: MultiSigTransactionViewModel[] = + res.transactions.map((trans) => ({ ...trans })); + + const returnedPagination: PaginationViewModel = res.pagination; + + const returnedValue: MultiSigTransactionsViewModel = { + transactions: returnedTransactions, + pagination: returnedPagination, + }; - return Promise.resolve(new GetTransactionsQueryResponse(returnValue)); + return Promise.resolve(new GetTransactionsQueryResponse(returnedValue)); } } diff --git a/sdk/src/domain/context/transaction/MultiSigTransaction.ts b/sdk/src/domain/context/transaction/MultiSigTransaction.ts index 9478f24b9..ebec55c2d 100644 --- a/sdk/src/domain/context/transaction/MultiSigTransaction.ts +++ b/sdk/src/domain/context/transaction/MultiSigTransaction.ts @@ -18,9 +18,15 @@ * */ -import { HederaId } from '../shared/HederaId.js'; +export class Pagination { + totalItems: number; + itemCount: number; + itemsPerPage: number; + totalPages: number; + currentPage: number; +} -export default class MultiSigTransaction { +export class MultiSigTransaction { id: string; transaction_message: string; description: string; @@ -56,3 +62,13 @@ export default class MultiSigTransaction { this.hedera_account_id = hedera_account_id; } } + +export class MultiSigTransactions { + transactions: MultiSigTransaction[]; + pagination: Pagination; + + constructor(transactions: MultiSigTransaction[], pagination: Pagination) { + this.transactions = transactions; + this.pagination = pagination; + } +} diff --git a/sdk/src/port/in/StableCoin.ts b/sdk/src/port/in/StableCoin.ts index b87687390..7132a0f8c 100644 --- a/sdk/src/port/in/StableCoin.ts +++ b/sdk/src/port/in/StableCoin.ts @@ -96,7 +96,7 @@ import { UpdateCommand } from '../../app/usecase/command/stablecoin/update/Updat import NetworkService from '../../app/service/NetworkService.js'; import { AssociateCommand } from '../../app/usecase/command/account/associate/AssociateCommand.js'; import { MirrorNodeAdapter } from '../../port/out/mirror/MirrorNodeAdapter.js'; -import MultiSigTransactionViewModel from '../out/backend/response/MultiSigTransactionViewModel.js'; +import { MultiSigTransactionsViewModel } from '../out/backend/response/MultiSigTransactionViewModel.js'; import SignTransactionRequest from './request/SignTransactionRequest.js'; import SubmitTransactionRequest from './request/SubmitTransactionRequest.js'; import RemoveTransactionRequest from './request/RemoveTransactionRequest.js'; @@ -110,7 +110,7 @@ export { StableCoinViewModel, StableCoinListViewModel, ReserveViewModel, - MultiSigTransactionViewModel, + MultiSigTransactionsViewModel, TRANSFER_LIST_SIZE, }; export { StableCoinCapabilities, Capability, Access, Operation, Balance }; @@ -155,7 +155,7 @@ interface IStableCoinInPort { removeTransaction(request: RemoveTransactionRequest): Promise; getTransactions( request: GetTransactionsRequest, - ): Promise; + ): Promise; } class StableCoinInPort implements IStableCoinInPort { @@ -749,7 +749,7 @@ class StableCoinInPort implements IStableCoinInPort { @LogError async getTransactions( request: GetTransactionsRequest, - ): Promise { + ): Promise { handleValidation('GetTransactionsRequest', request); return ( diff --git a/sdk/src/port/out/backend/BackendAdapter.ts b/sdk/src/port/out/backend/BackendAdapter.ts index f07468624..70175f0e8 100644 --- a/sdk/src/port/out/backend/BackendAdapter.ts +++ b/sdk/src/port/out/backend/BackendAdapter.ts @@ -20,7 +20,11 @@ import { singleton } from 'tsyringe'; import axios, { AxiosInstance } from 'axios'; -import MultiSigTransaction from '../../../domain/context/transaction/MultiSigTransaction.js'; +import { + MultiSigTransaction, + MultiSigTransactions, + Pagination, +} from '../../../domain/context/transaction/MultiSigTransaction.js'; import { BackendError } from './error/BackendError.js'; import BackendEndpoint from '../../../domain/context/network/BackendEndpoint.js'; import Injectable from '../../../core/Injectable.js'; @@ -148,7 +152,7 @@ export class BackendAdapter { publicKey?: string, status?: string, accountId?: string, - ): Promise { + ): Promise { try { const queryParams = { publicKey: publicKey, @@ -169,14 +173,17 @@ export class BackendAdapter { `get transactions by public key api call succeeded but returned no data....`, ); - const transactions: MultiSigTransaction[] = []; - const returnedTrx = response.data; + const pagination = returnedTrx.meta as Pagination; + + const transaction_list: MultiSigTransaction[] = []; + const transactions: MultiSigTransactions = + new MultiSigTransactions(transaction_list, pagination); if (returnedTrx && returnedTrx.items) returnedTrx.items.forEach( (transaction: MultiSigTransaction) => { - transactions.push(transaction); + transactions.transactions.push(transaction); }, ); diff --git a/sdk/src/port/out/backend/response/MultiSigTransactionViewModel.ts b/sdk/src/port/out/backend/response/MultiSigTransactionViewModel.ts index 6080ac807..8b9c6e184 100644 --- a/sdk/src/port/out/backend/response/MultiSigTransactionViewModel.ts +++ b/sdk/src/port/out/backend/response/MultiSigTransactionViewModel.ts @@ -20,7 +20,15 @@ import { QueryResponse } from '../../../../core/query/QueryResponse.js'; -export default interface MultiSigTransactionViewModel extends QueryResponse { +export interface PaginationViewModel { + totalItems: number; + itemCount: number; + itemsPerPage: number; + totalPages: number; + currentPage: number; +} + +export interface MultiSigTransactionViewModel extends QueryResponse { id: string; transaction_message: string; description: string; @@ -32,3 +40,7 @@ export default interface MultiSigTransactionViewModel extends QueryResponse { network: string; hedera_account_id: string; } +export interface MultiSigTransactionsViewModel extends QueryResponse { + transactions: MultiSigTransactionViewModel[]; + pagination: PaginationViewModel; +}