Skip to content

Commit

Permalink
Merge pull request #610 from tomijaga/bank
Browse files Browse the repository at this point in the history
Updated bank api calls to use the js sdk
  • Loading branch information
zinoadidi authored Apr 6, 2021
2 parents 8400134 + 63ec9c6 commit bfc0faa
Show file tree
Hide file tree
Showing 3 changed files with 135 additions and 56 deletions.
79 changes: 39 additions & 40 deletions src/renderer/dispatchers/banks.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import axios from 'axios';
import {Bank} from 'thenewboston';

import {
ACCOUNTS,
Expand All @@ -10,7 +11,7 @@ import {
VALIDATOR_CONFIRMATION_SERVICES,
VALIDATORS,
} from '@renderer/constants/actions';
import {AXIOS_TIMEOUT_MS, defaultPaginatedQueryParam} from '@renderer/config';

import {
setBankAccounts,
setBankAccountsError,
Expand Down Expand Up @@ -46,25 +47,31 @@ import {
RawBankConfig,
ValidatorConfirmationService,
} from '@renderer/types';
import {fetchPaginatedResults, sanitizePortFieldFromRawBankConfig} from '@renderer/utils/api';
import {
fetchPaginatedResults,
fetchBankPaginatedResults,
sanitizePortFieldFromRawBankConfig,
} from '@renderer/utils/api';

export const fetchBankAccounts = (address: string, params: PaginatedQueryParams = defaultPaginatedQueryParam) => async (
dispatch: AppDispatch,
) => {
return fetchPaginatedResults<BankAccount>(address, ACCOUNTS, params, dispatch, setBankAccounts, setBankAccountsError);
export const fetchBankAccounts = (address: string, params: PaginatedQueryParams) => async (dispatch: AppDispatch) => {
return fetchBankPaginatedResults<BankAccount>(
address,
ACCOUNTS,
params,
dispatch,
setBankAccounts,
setBankAccountsError,
);
};

export const fetchBankBanks = (address: string, params: PaginatedQueryParams = defaultPaginatedQueryParam) => async (
dispatch: AppDispatch,
) => {
return fetchPaginatedResults<Node>(address, BANKS, params, dispatch, setBankBanks, setBankBanksError);
export const fetchBankBanks = (address: string, params: PaginatedQueryParams) => async (dispatch: AppDispatch) => {
return fetchBankPaginatedResults<Node>(address, BANKS, params, dispatch, setBankBanks, setBankBanksError);
};

export const fetchBankBankTransactions = (
address: string,
params: PaginatedQueryParams = defaultPaginatedQueryParam,
) => async (dispatch: AppDispatch) => {
return fetchPaginatedResults<BankTransaction>(
export const fetchBankBankTransactions = (address: string, params: PaginatedQueryParams) => async (
dispatch: AppDispatch,
) => {
return fetchBankPaginatedResults<BankTransaction>(
address,
BANK_TRANSACTIONS,
params,
Expand All @@ -74,17 +81,15 @@ export const fetchBankBankTransactions = (
);
};

export const fetchBankBlocks = (address: string, params: PaginatedQueryParams = defaultPaginatedQueryParam) => async (
dispatch: AppDispatch,
) => {
return fetchPaginatedResults<BlockResponse>(address, BLOCKS, params, dispatch, setBankBlocks, setBankBlocksError);
export const fetchBankBlocks = (address: string, params: PaginatedQueryParams) => async (dispatch: AppDispatch) => {
return fetchBankPaginatedResults<BlockResponse>(address, BLOCKS, params, dispatch, setBankBlocks, setBankBlocksError);
};

export const fetchBankConfig = (address: string) => async (
dispatch: AppDispatch,
): Promise<{address: string; data?: BankConfig; error?: any}> => {
try {
const {data: rawData} = await axios.get<RawBankConfig>(`${address}/config`, {timeout: AXIOS_TIMEOUT_MS});
const rawData = (await new Bank(address).getConfig()) as RawBankConfig;
const data = sanitizePortFieldFromRawBankConfig(rawData);

if (data.node_type !== NodeType.bank) {
Expand All @@ -110,11 +115,10 @@ export const fetchBankConfig = (address: string) => async (
}
};

export const fetchBankConfirmationBlocks = (
address: string,
params: PaginatedQueryParams = defaultPaginatedQueryParam,
) => async (dispatch: AppDispatch) => {
return fetchPaginatedResults<BankConfirmationBlock>(
export const fetchBankConfirmationBlocks = (address: string, params: PaginatedQueryParams) => async (
dispatch: AppDispatch,
) => {
return fetchBankPaginatedResults<BankConfirmationBlock>(
address,
CONFIRMATION_BLOCKS,
params,
Expand All @@ -124,11 +128,10 @@ export const fetchBankConfirmationBlocks = (
);
};

export const fetchBankInvalidBlocks = (
address: string,
params: PaginatedQueryParams = defaultPaginatedQueryParam,
) => async (dispatch: AppDispatch) => {
return fetchPaginatedResults<InvalidBlock>(
export const fetchBankInvalidBlocks = (address: string, params: PaginatedQueryParams) => async (
dispatch: AppDispatch,
) => {
return fetchBankPaginatedResults<InvalidBlock>(
address,
INVALID_BLOCKS,
params,
Expand All @@ -138,11 +141,10 @@ export const fetchBankInvalidBlocks = (
);
};

export const fetchBankValidatorConfirmationServices = (
address: string,
params: PaginatedQueryParams = defaultPaginatedQueryParam,
) => async (dispatch: AppDispatch) => {
return fetchPaginatedResults<ValidatorConfirmationService>(
export const fetchBankValidatorConfirmationServices = (address: string, params: PaginatedQueryParams) => async (
dispatch: AppDispatch,
) => {
return fetchBankPaginatedResults<ValidatorConfirmationService>(
address,
VALIDATOR_CONFIRMATION_SERVICES,
params,
Expand All @@ -152,11 +154,8 @@ export const fetchBankValidatorConfirmationServices = (
);
};

export const fetchBankValidators = (
address: string,
params: PaginatedQueryParams = defaultPaginatedQueryParam,
) => async (dispatch: AppDispatch) => {
return fetchPaginatedResults<BaseValidator>(
export const fetchBankValidators = (address: string, params: PaginatedQueryParams) => async (dispatch: AppDispatch) => {
return fetchBankPaginatedResults<BaseValidator>(
address,
VALIDATORS,
params,
Expand Down
6 changes: 3 additions & 3 deletions src/renderer/types/network.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ export interface BankAccount extends AccountNumber, CreatedModified, Id {
trust: string;
}

export interface BankConfig extends Node {
export interface BankConfig extends Omit<Node, 'trust'> {
node_type: NodeType.bank;
primary_validator: PrimaryValidatorConfig;
primary_validator: Omit<PrimaryValidatorConfig, 'node_type'>;
}

export interface BankConfirmationBlock extends CreatedModified, Id {
Expand Down Expand Up @@ -128,7 +128,7 @@ export type ProtocolType = 'http' | 'https';

export interface RawBankConfig extends Omit<BankConfig, 'port' | 'primary_validator'> {
port: number | null;
primary_validator: RawPrimaryValidatorConfig;
primary_validator: Omit<RawPrimaryValidatorConfig, 'node_type'>;
}

export interface RawPrimaryValidatorConfig extends Omit<PrimaryValidatorConfig, 'port'> {
Expand Down
106 changes: 93 additions & 13 deletions src/renderer/utils/api.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,18 @@
import axios from 'axios';
import {Bank} from 'thenewboston';

import {AXIOS_TIMEOUT_MS, defaultPaginatedQueryParam} from '@renderer/config';
import {
ACCOUNTS,
BANK_TRANSACTIONS,
BANKS,
BLOCKS,
CONFIRMATION_BLOCKS,
INVALID_BLOCKS,
VALIDATOR_CONFIRMATION_SERVICES,
VALIDATORS,
} from '@renderer/constants/actions';

import {
AppDispatch,
BankConfig,
Expand All @@ -8,9 +22,86 @@ import {
RawBankConfig,
RawPrimaryValidatorConfig,
} from '@renderer/types';

import {formatQueryParams} from '@renderer/utils/address';
import {SetError, SetResults} from '@renderer/utils/store';
import {AXIOS_TIMEOUT_MS} from '@renderer/config';

const formatPaginatedData = <T extends unknown>(rawData: PaginatedResults<T>) => {
return {
...rawData,
results: rawData.results.map((result: any) => {
if (!result.port) {
return {
...result,
port: replaceNullPortFieldWithDefaultValue(result.port),
};
}
return result;
}),
};
};

export async function fetchBankPaginatedResults<T>(
address: string,
action: string,
queryParams: PaginatedQueryParams,
dispatch: AppDispatch,
setResults: SetResults<T>,
setError: SetError,
) {
const bank = new Bank(address, {defaultPagination: {limit: defaultPaginatedQueryParam.limit, offset: 0}});

let rawData;

try {
switch (action) {
case ACCOUNTS:
rawData = await bank.getAccounts();
break;

case BANKS:
rawData = await bank.getBanks();
break;

case BANK_TRANSACTIONS:
rawData = await bank.getTransactions();
break;

case BLOCKS:
rawData = await bank.getBlocks();
break;

case CONFIRMATION_BLOCKS:
rawData = await bank.getConfirmationBlocks(queryParams);
break;

case INVALID_BLOCKS:
rawData = await bank.getInvalidBlocks(queryParams);
break;

case VALIDATOR_CONFIRMATION_SERVICES:
rawData = await bank.getValidatorConfirmationServices(queryParams);
break;

case VALIDATORS:
rawData = await bank.getValidators(queryParams);
break;

default:
throw new Error('Fetch Bank Pagination Action not Set');
}

const data = formatPaginatedData(rawData);

dispatch(setResults({address, ...data}));
return data.results;
} catch (error) {
if (!error.response) {
throw error;
}
dispatch(setError({address, error: error.response.data}));
}
}

export async function fetchPaginatedResults<T>(
address: string,
Expand All @@ -26,18 +117,7 @@ export async function fetchPaginatedResults<T>(
{timeout: AXIOS_TIMEOUT_MS},
);

const data: PaginatedResults<T> = {
...rawData,
results: rawData.results.map((result: any) => {
if (!result.port) {
return {
...result,
port: replaceNullPortFieldWithDefaultValue(result.port),
};
}
return result;
}),
};
const data = formatPaginatedData(rawData);

dispatch(setResults({address, ...data}));
return data.results;
Expand Down

0 comments on commit bfc0faa

Please sign in to comment.