Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: pagination added to multisig transactions SDK #1086

Merged
merged 1 commit into from
Apr 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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;
}
Loading