diff options
author | Florian Dold <florian@dold.me> | 2023-05-24 14:59:54 +0200 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2023-05-24 14:59:54 +0200 |
commit | 318f54418467e31c9b4b71d82d2cf00932fc167c (patch) | |
tree | 1153a9c89e6acfcf4ca06652e00b6705ba970076 /packages/taler-wallet-core/src/operations | |
parent | a2ef2e391a8f030857d0f9cd56c6157cffb33659 (diff) | |
download | wallet-core-318f54418467e31c9b4b71d82d2cf00932fc167c.tar.xz |
wallet-core: implement deletion for new refund implementation
Diffstat (limited to 'packages/taler-wallet-core/src/operations')
-rw-r--r-- | packages/taler-wallet-core/src/operations/common.ts | 19 | ||||
-rw-r--r-- | packages/taler-wallet-core/src/operations/transactions.ts | 18 |
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 index 95551010c..d75869043 100644 --- 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 index 41c74f4d1..647b9dd90 100644 --- 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; } |