commit 318f54418467e31c9b4b71d82d2cf00932fc167c
parent a2ef2e391a8f030857d0f9cd56c6157cffb33659
Author: Florian Dold <florian@dold.me>
Date: Wed, 24 May 2023 14:59:54 +0200
wallet-core: implement deletion for new refund implementation
Diffstat:
2 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/packages/taler-wallet-core/src/operations/common.ts b/packages/taler-wallet-core/src/operations/common.ts
@@ -362,9 +362,10 @@ export enum TombstoneTag {
DeletePeerPushCredit = "delete-peer-push-credit",
}
-
/**
* Create an event ID from the type and the primary key for the event.
+ *
+ * @deprecated use constructTombstone instead
*/
export function makeTombstoneId(type: TombstoneTag, ...args: string[]): string {
return `tmb:${type}:${args.map((x) => encodeURIComponent(x)).join(":")}`;
@@ -458,3 +459,19 @@ export function runLongpollAsync(
};
asyncFn();
}
+
+export type ParsedTombstone =
+ | {
+ tag: TombstoneTag.DeleteWithdrawalGroup;
+ withdrawalGroupId: string;
+ }
+ | { tag: TombstoneTag.DeleteRefund; refundGroupId: string };
+
+export function constructTombstone(p: ParsedTombstone): string {
+ switch (p.tag) {
+ case TombstoneTag.DeleteWithdrawalGroup:
+ return `tmb:${p.tag}:${p.withdrawalGroupId}`;
+ case TombstoneTag.DeleteRefund:
+ return `tmb:${p.tag}:${p.refundGroupId}`;
+ }
+}
diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts
@@ -71,6 +71,7 @@ import { assertUnreachable } from "../util/assertUnreachable.js";
import { checkDbInvariant, checkLogicInvariant } from "../util/invariants.js";
import { constructTaskIdentifier, TaskIdentifiers } from "../util/retries.js";
import {
+ constructTombstone,
makeTombstoneId,
resetOperationTimeout,
runOperationWithErrorReporting,
@@ -1615,7 +1616,22 @@ export async function deleteTransaction(
}
case TransactionType.Refund: {
- // FIXME: Implement!
+ const refundGroupId = parsedTx.refundGroupId;
+ await ws.db
+ .mktx((x) => [x.refundGroups, x.tombstones])
+ .runReadWrite(async (tx) => {
+ const refundRecord = await tx.refundGroups.get(refundGroupId);
+ if (!refundRecord) {
+ return;
+ }
+ await tx.refundGroups.delete(refundGroupId);
+ await tx.tombstones.put({
+ id: constructTombstone({
+ tag: TombstoneTag.DeleteRefund,
+ refundGroupId,
+ }),
+ });
+ });
return;
}