aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2023-02-20 03:56:43 +0100
committerFlorian Dold <florian@dold.me>2023-02-20 03:56:43 +0100
commita6d78f12df0bf42838f424e889f376ca19bfd96c (patch)
treef0c77a810ebe90e56eed3d6607cacc717f303b41
parentbd9904f6a057a6722f5ede036879a118bf0520a0 (diff)
-deletion
-rw-r--r--packages/taler-wallet-core/src/operations/common.ts2
-rw-r--r--packages/taler-wallet-core/src/operations/transactions.ts69
2 files changed, 66 insertions, 5 deletions
diff --git a/packages/taler-wallet-core/src/operations/common.ts b/packages/taler-wallet-core/src/operations/common.ts
index 2db5cd7b4..35e6455bc 100644
--- a/packages/taler-wallet-core/src/operations/common.ts
+++ b/packages/taler-wallet-core/src/operations/common.ts
@@ -338,6 +338,8 @@ export enum TombstoneTag {
DeleteRefund = "delete-refund",
DeletePeerPullDebit = "delete-peer-pull-debit",
DeletePeerPushDebit = "delete-peer-push-debit",
+ DeletePeerPullCredit = "delete-peer-pull-credit",
+ DeletePeerPushCredit = "delete-peer-push-credit",
}
/**
diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts
index faac808b1..9ee1c1e74 100644
--- a/packages/taler-wallet-core/src/operations/transactions.ts
+++ b/packages/taler-wallet-core/src/operations/transactions.ts
@@ -1413,11 +1413,70 @@ export async function deleteTransaction(
): Promise<void> {
const { type, args: rest } = parseId("txn", transactionId);
- if (
- type === TransactionType.Withdrawal ||
- type === TransactionType.PeerPullCredit ||
- type === TransactionType.PeerPushCredit
- ) {
+ if (type === TransactionType.PeerPushCredit) {
+ const peerPushPaymentIncomingId = rest[0];
+ await ws.db
+ .mktx((x) => [
+ x.withdrawalGroups,
+ x.peerPushPaymentIncoming,
+ x.tombstones,
+ ])
+ .runReadWrite(async (tx) => {
+ const pushInc = await tx.peerPushPaymentIncoming.get(
+ peerPushPaymentIncomingId,
+ );
+ if (!pushInc) {
+ return;
+ }
+ if (pushInc.withdrawalGroupId) {
+ const withdrawalGroupId = pushInc.withdrawalGroupId;
+ const withdrawalGroupRecord = await tx.withdrawalGroups.get(
+ withdrawalGroupId,
+ );
+ if (withdrawalGroupRecord) {
+ await tx.withdrawalGroups.delete(withdrawalGroupId);
+ await tx.tombstones.put({
+ id: TombstoneTag.DeleteWithdrawalGroup + ":" + withdrawalGroupId,
+ });
+ }
+ }
+ await tx.peerPushPaymentIncoming.delete(peerPushPaymentIncomingId);
+ await tx.tombstones.put({
+ id:
+ TombstoneTag.DeletePeerPushCredit + ":" + peerPushPaymentIncomingId,
+ });
+ });
+ } else if (type === TransactionType.PeerPullCredit) {
+ const pursePub = rest[0];
+ await ws.db
+ .mktx((x) => [
+ x.withdrawalGroups,
+ x.peerPullPaymentInitiations,
+ x.tombstones,
+ ])
+ .runReadWrite(async (tx) => {
+ const pullIni = await tx.peerPullPaymentInitiations.get(pursePub);
+ if (!pullIni) {
+ return;
+ }
+ if (pullIni.withdrawalGroupId) {
+ const withdrawalGroupId = pullIni.withdrawalGroupId;
+ const withdrawalGroupRecord = await tx.withdrawalGroups.get(
+ withdrawalGroupId,
+ );
+ if (withdrawalGroupRecord) {
+ await tx.withdrawalGroups.delete(withdrawalGroupId);
+ await tx.tombstones.put({
+ id: TombstoneTag.DeleteWithdrawalGroup + ":" + withdrawalGroupId,
+ });
+ }
+ }
+ await tx.peerPullPaymentInitiations.delete(pursePub);
+ await tx.tombstones.put({
+ id: TombstoneTag.DeletePeerPullCredit + ":" + pursePub,
+ });
+ });
+ } else if (type === TransactionType.Withdrawal) {
const withdrawalGroupId = rest[0];
await ws.db
.mktx((x) => [x.withdrawalGroups, x.tombstones])