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
.subcommand("", "transactions", { help: "Show transactions." })
.subcommand("transactions", "transactions", { help: "Show transactions." })
.maybeOption("currency", ["--currency"], clk.STRING)
.maybeOption("search", ["--search"], clk.STRING)
.action(async (args) => {
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));
});
});

View File

@ -75,10 +75,8 @@ function getRefundStats(
Amounts.parseOrThrow(perm.refund_fee),
).amount;
if (pr.refundsRefreshCost[rk]) {
amountEffective = Amounts.sub(
amountEffective,
pr.refundsRefreshCost[rk],
).amount;
amountEffective = Amounts.sub(amountEffective, 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.
*/
@ -130,34 +154,44 @@ export async function getTransactions(
async (tx) => {
tx.iter(Stores.withdrawalGroups).forEach((wsr) => {
if (
transactionsRequest?.currency &&
wsr.rawWithdrawalAmount.currency != transactionsRequest.currency
shouldSkipCurrency(
transactionsRequest,
wsr.rawWithdrawalAmount.currency,
)
) {
return;
}
if (wsr.rawWithdrawalAmount.currency)
if (wsr.timestampFinish) {
transactions.push({
type: TransactionType.Withdrawal,
amountEffective: Amounts.stringify(wsr.denomsSel.totalCoinValue),
amountRaw: Amounts.stringify(wsr.denomsSel.totalWithdrawCost),
confirmed: true,
exchangeBaseUrl: wsr.exchangeBaseUrl,
pending: !wsr.timestampFinish,
timestamp: wsr.timestampStart,
transactionId: makeEventId(
TransactionType.Withdrawal,
wsr.withdrawalGroupId,
),
});
}
if (shouldSkipSearch(transactionsRequest, [])) {
return;
}
if (transactionsRequest?.search)
if (wsr.rawWithdrawalAmount.currency)
if (wsr.timestampFinish) {
transactions.push({
type: TransactionType.Withdrawal,
amountEffective: Amounts.stringify(
wsr.denomsSel.totalCoinValue,
),
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) => {
if (
transactionsRequest?.currency &&
r.currency != transactionsRequest.currency
) {
if (shouldSkipCurrency(transactionsRequest, r.currency)) {
return;
}
if (shouldSkipSearch(transactionsRequest, [])) {
return;
}
if (r.reserveStatus !== ReserveRecordStatus.WAIT_CONFIRM_BANK) {
@ -170,7 +204,9 @@ export async function getTransactions(
type: TransactionType.Withdrawal,
confirmed: false,
amountRaw: Amounts.stringify(r.bankInfo.denomSel.totalWithdrawCost),
amountEffective: Amounts.stringify(r.bankInfo.denomSel.totalCoinValue),
amountEffective: Amounts.stringify(
r.bankInfo.denomSel.totalCoinValue,
),
exchangeBaseUrl: r.exchangeBaseUrl,
pending: true,
timestamp: r.timestampCreated,
@ -184,11 +220,16 @@ export async function getTransactions(
tx.iter(Stores.purchases).forEachAsync(async (pr) => {
if (
transactionsRequest?.currency &&
pr.contractData.amount.currency != transactionsRequest.currency
shouldSkipCurrency(
transactionsRequest,
pr.contractData.amount.currency,
)
) {
return;
}
if (shouldSkipSearch(transactionsRequest, [pr.contractData.summary])) {
return;
}
const proposal = await tx.get(Stores.proposals, pr.proposalId);
if (!proposal) {
return;