[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-wallet-core] branch master updated: wallet-core: refunds transact
From: |
gnunet |
Subject: |
[taler-wallet-core] branch master updated: wallet-core: refunds transactions should be sorted after payments |
Date: |
Wed, 01 Jun 2022 10:47:49 +0200 |
This is an automated email from the git hooks/post-receive script.
dold pushed a commit to branch master
in repository wallet-core.
The following commit(s) were added to refs/heads/master by this push:
new f9192d98 wallet-core: refunds transactions should be sorted after
payments
f9192d98 is described below
commit f9192d986f1e8fda891a2fd379f645f814fd68a3
Author: Florian Dold <florian@dold.me>
AuthorDate: Wed Jun 1 10:47:46 2022 +0200
wallet-core: refunds transactions should be sorted after payments
---
.../src/operations/transactions.ts | 58 +++++++++++++++-------
1 file changed, 41 insertions(+), 17 deletions(-)
diff --git a/packages/taler-wallet-core/src/operations/transactions.ts
b/packages/taler-wallet-core/src/operations/transactions.ts
index db282bb6..b8df1e7e 100644
--- a/packages/taler-wallet-core/src/operations/transactions.ts
+++ b/packages/taler-wallet-core/src/operations/transactions.ts
@@ -96,6 +96,19 @@ function shouldSkipSearch(
return true;
}
+/**
+ * Fallback order of transactions that have the same timestamp.
+ */
+const txOrder: { [t in TransactionType]: number } = {
+ [TransactionType.Withdrawal]: 1,
+ [TransactionType.Tip]: 2,
+ [TransactionType.Payment]: 3,
+ [TransactionType.Refund]: 4,
+ [TransactionType.Deposit]: 5,
+ [TransactionType.Refresh]: 6,
+ [TransactionType.Tip]: 7,
+};
+
/**
* Retrieve the full event history for this wallet.
*/
@@ -306,8 +319,10 @@ export async function getTransactions(
}
let totalRefundRaw = Amounts.getZero(contractData.amount.currency);
- let totalRefundEffective =
Amounts.getZero(contractData.amount.currency);
- const refunds: RefundInfoShort[] = []
+ let totalRefundEffective = Amounts.getZero(
+ contractData.amount.currency,
+ );
+ const refunds: RefundInfoShort[] = [];
for (const groupKey of refundGroupKeys.values()) {
const refundTombstoneId = makeEventId(
@@ -353,7 +368,7 @@ export async function getTransactions(
timestamp: r0.obtainedTime,
amountEffective: Amounts.stringify(amountEffective),
amountRaw: Amounts.stringify(amountRaw),
- })
+ });
}
}
if (!r0) {
@@ -361,7 +376,10 @@ export async function getTransactions(
}
totalRefundRaw = Amounts.add(totalRefundRaw, amountRaw).amount;
- totalRefundEffective = Amounts.add(totalRefundEffective,
amountEffective).amount;
+ totalRefundEffective = Amounts.add(
+ totalRefundEffective,
+ amountEffective,
+ ).amount;
transactions.push({
type: TransactionType.Refund,
info,
@@ -370,7 +388,10 @@ export async function getTransactions(
timestamp: r0.obtainedTime,
amountEffective: Amounts.stringify(amountEffective),
amountRaw: Amounts.stringify(amountRaw),
- refundPending: pr.refundAwaiting === undefined ? undefined :
Amounts.stringify(pr.refundAwaiting),
+ refundPending:
+ pr.refundAwaiting === undefined
+ ? undefined
+ : Amounts.stringify(pr.refundAwaiting),
pending: false,
frozen: false,
});
@@ -383,7 +404,10 @@ export async function getTransactions(
amountEffective: Amounts.stringify(pr.totalPayCost),
totalRefundRaw: Amounts.stringify(totalRefundRaw),
totalRefundEffective: Amounts.stringify(totalRefundEffective),
- refundPending: pr.refundAwaiting === undefined ? undefined :
Amounts.stringify(pr.refundAwaiting),
+ refundPending:
+ pr.refundAwaiting === undefined
+ ? undefined
+ : Amounts.stringify(pr.refundAwaiting),
status: pr.timestampFirstSuccessfulPay
? PaymentStatus.Paid
: PaymentStatus.Accepted,
@@ -398,7 +422,6 @@ export async function getTransactions(
frozen: pr.payFrozen ?? false,
...(err ? { error: err } : {}),
});
-
});
tx.tips.iter().forEachAsync(async (tipRecord) => {
@@ -434,18 +457,19 @@ export async function getTransactions(
const txPending = transactions.filter((x) => x.pending);
const txNotPending = transactions.filter((x) => !x.pending);
- txPending.sort((h1, h2) =>
- AbsoluteTime.cmp(
+ const txCmp = (h1: Transaction, h2: Transaction) => {
+ const tsCmp = AbsoluteTime.cmp(
AbsoluteTime.fromTimestamp(h1.timestamp),
AbsoluteTime.fromTimestamp(h2.timestamp),
- ),
- );
- txNotPending.sort((h1, h2) =>
- AbsoluteTime.cmp(
- AbsoluteTime.fromTimestamp(h1.timestamp),
- AbsoluteTime.fromTimestamp(h2.timestamp),
- ),
- );
+ );
+ if (tsCmp === 0) {
+ return Math.sign(txOrder[h1.type] - txOrder[h2.type]);
+ }
+ return tsCmp;
+ };
+
+ txPending.sort(txCmp);
+ txNotPending.sort(txCmp);
return { transactions: [...txNotPending, ...txPending] };
}
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-wallet-core] branch master updated: wallet-core: refunds transactions should be sorted after payments,
gnunet <=