Skip to content

Commit

Permalink
Merge pull request #1086 from hashgraph/feat/multisig-SDK-pagination
Browse files Browse the repository at this point in the history
fix: pagination added to multisig transactions SDK
  • Loading branch information
AlbertoMolinaIoBuilders authored Apr 2, 2024
2 parents d5dc225 + 895add9 commit 14c9558
Show file tree
Hide file tree
Showing 8 changed files with 122 additions and 39 deletions.
19 changes: 15 additions & 4 deletions sdk/__tests__/port/in/StableCoin.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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--------------------------
Expand Down
59 changes: 43 additions & 16 deletions sdk/__tests__/port/out/BackendAdapter.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down Expand Up @@ -125,6 +133,7 @@ jest.mock('axios', () => {
status: 200,
data: {
items: [GET_TRANSACTION],
meta: PAGINATION,
},
};

Expand All @@ -138,6 +147,7 @@ jest.mock('axios', () => {
status: 200,
data: {
items: [GET_TRANSACTION],
meta: PAGINATION,
},
};
}
Expand Down Expand Up @@ -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);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<GetTransactionsQueryResponse> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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));
}
}
20 changes: 18 additions & 2 deletions sdk/src/domain/context/transaction/MultiSigTransaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}
}
8 changes: 4 additions & 4 deletions sdk/src/port/in/StableCoin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -110,7 +110,7 @@ export {
StableCoinViewModel,
StableCoinListViewModel,
ReserveViewModel,
MultiSigTransactionViewModel,
MultiSigTransactionsViewModel,
TRANSFER_LIST_SIZE,
};
export { StableCoinCapabilities, Capability, Access, Operation, Balance };
Expand Down Expand Up @@ -155,7 +155,7 @@ interface IStableCoinInPort {
removeTransaction(request: RemoveTransactionRequest): Promise<boolean>;
getTransactions(
request: GetTransactionsRequest,
): Promise<MultiSigTransactionViewModel[]>;
): Promise<MultiSigTransactionsViewModel>;
}

class StableCoinInPort implements IStableCoinInPort {
Expand Down Expand Up @@ -749,7 +749,7 @@ class StableCoinInPort implements IStableCoinInPort {
@LogError
async getTransactions(
request: GetTransactionsRequest,
): Promise<MultiSigTransactionViewModel[]> {
): Promise<MultiSigTransactionsViewModel> {
handleValidation('GetTransactionsRequest', request);

return (
Expand Down
17 changes: 12 additions & 5 deletions sdk/src/port/out/backend/BackendAdapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -148,7 +152,7 @@ export class BackendAdapter {
publicKey?: string,
status?: string,
accountId?: string,
): Promise<MultiSigTransaction[]> {
): Promise<MultiSigTransactions> {
try {
const queryParams = {
publicKey: publicKey,
Expand All @@ -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);
},
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}

0 comments on commit 14c9558

Please sign in to comment.