rudimentary search

This commit is contained in:
Florian Dold 2020-05-15 16:58:15 +05:30
parent 79d0c2f928
commit cf3eb52033
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
2 changed files with 77 additions and 31 deletions

View File

@ -232,10 +232,15 @@ walletCli
}); });
walletCli walletCli
.subcommand("", "transactions", { help: "Show transactions." }) .subcommand("transactions", "transactions", { help: "Show transactions." })
.maybeOption("currency", ["--currency"], clk.STRING)
.maybeOption("search", ["--search"], clk.STRING)
.action(async (args) => { .action(async (args) => {
await withWallet(args, async (wallet) => { await withWallet(args, async (wallet) => {
const pending = await wallet.getTransactions({}); const pending = await wallet.getTransactions({
currency: args.transactions.currency,
search: args.transactions.search,
});
console.log(JSON.stringify(pending, undefined, 2)); console.log(JSON.stringify(pending, undefined, 2));
}); });
}); });

View File

@ -75,10 +75,8 @@ function getRefundStats(
Amounts.parseOrThrow(perm.refund_fee), Amounts.parseOrThrow(perm.refund_fee),
).amount; ).amount;
if (pr.refundsRefreshCost[rk]) { if (pr.refundsRefreshCost[rk]) {
amountEffective = Amounts.sub( amountEffective = Amounts.sub(amountEffective, pr.refundsRefreshCost[rk])
amountEffective, .amount;
pr.refundsRefreshCost[rk],
).amount;
} }
} }
@ -100,6 +98,32 @@ function getRefundStats(
}; };
} }
function shouldSkipCurrency(
transactionsRequest: TransactionsRequest | undefined,
currency: string,
): boolean {
if (!transactionsRequest?.currency) {
return false;
}
return transactionsRequest.currency.toLowerCase() !== currency.toLowerCase();
}
function shouldSkipSearch(
transactionsRequest: TransactionsRequest | undefined,
fields: string[],
): boolean {
if (!transactionsRequest?.search) {
return false;
}
const needle = transactionsRequest.search.trim();
for (const f of fields) {
if (f.indexOf(needle) >= 0) {
return false;
}
}
return true;
}
/** /**
* Retrive the full event history for this wallet. * Retrive the full event history for this wallet.
*/ */
@ -130,34 +154,44 @@ export async function getTransactions(
async (tx) => { async (tx) => {
tx.iter(Stores.withdrawalGroups).forEach((wsr) => { tx.iter(Stores.withdrawalGroups).forEach((wsr) => {
if ( if (
transactionsRequest?.currency && shouldSkipCurrency(
wsr.rawWithdrawalAmount.currency != transactionsRequest.currency transactionsRequest,
wsr.rawWithdrawalAmount.currency,
)
) { ) {
return; return;
} }
if (wsr.rawWithdrawalAmount.currency)
if (wsr.timestampFinish) { if (shouldSkipSearch(transactionsRequest, [])) {
transactions.push({ return;
type: TransactionType.Withdrawal, }
amountEffective: Amounts.stringify(wsr.denomsSel.totalCoinValue),
amountRaw: Amounts.stringify(wsr.denomsSel.totalWithdrawCost), if (transactionsRequest?.search)
confirmed: true, if (wsr.rawWithdrawalAmount.currency)
exchangeBaseUrl: wsr.exchangeBaseUrl, if (wsr.timestampFinish) {
pending: !wsr.timestampFinish, transactions.push({
timestamp: wsr.timestampStart, type: TransactionType.Withdrawal,
transactionId: makeEventId( amountEffective: Amounts.stringify(
TransactionType.Withdrawal, wsr.denomsSel.totalCoinValue,
wsr.withdrawalGroupId, ),
), amountRaw: Amounts.stringify(wsr.denomsSel.totalWithdrawCost),
}); confirmed: true,
} exchangeBaseUrl: wsr.exchangeBaseUrl,
pending: !wsr.timestampFinish,
timestamp: wsr.timestampStart,
transactionId: makeEventId(
TransactionType.Withdrawal,
wsr.withdrawalGroupId,
),
});
}
}); });
tx.iter(Stores.reserves).forEach((r) => { tx.iter(Stores.reserves).forEach((r) => {
if ( if (shouldSkipCurrency(transactionsRequest, r.currency)) {
transactionsRequest?.currency && return;
r.currency != transactionsRequest.currency }
) { if (shouldSkipSearch(transactionsRequest, [])) {
return; return;
} }
if (r.reserveStatus !== ReserveRecordStatus.WAIT_CONFIRM_BANK) { if (r.reserveStatus !== ReserveRecordStatus.WAIT_CONFIRM_BANK) {
@ -170,7 +204,9 @@ export async function getTransactions(
type: TransactionType.Withdrawal, type: TransactionType.Withdrawal,
confirmed: false, confirmed: false,
amountRaw: Amounts.stringify(r.bankInfo.denomSel.totalWithdrawCost), amountRaw: Amounts.stringify(r.bankInfo.denomSel.totalWithdrawCost),
amountEffective: Amounts.stringify(r.bankInfo.denomSel.totalCoinValue), amountEffective: Amounts.stringify(
r.bankInfo.denomSel.totalCoinValue,
),
exchangeBaseUrl: r.exchangeBaseUrl, exchangeBaseUrl: r.exchangeBaseUrl,
pending: true, pending: true,
timestamp: r.timestampCreated, timestamp: r.timestampCreated,
@ -184,11 +220,16 @@ export async function getTransactions(
tx.iter(Stores.purchases).forEachAsync(async (pr) => { tx.iter(Stores.purchases).forEachAsync(async (pr) => {
if ( if (
transactionsRequest?.currency && shouldSkipCurrency(
pr.contractData.amount.currency != transactionsRequest.currency transactionsRequest,
pr.contractData.amount.currency,
)
) { ) {
return; return;
} }
if (shouldSkipSearch(transactionsRequest, [pr.contractData.summary])) {
return;
}
const proposal = await tx.get(Stores.proposals, pr.proposalId); const proposal = await tx.get(Stores.proposals, pr.proposalId);
if (!proposal) { if (!proposal) {
return; return;