gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] branch master updated: wallet-core: use state instea


From: gnunet
Subject: [taler-wallet-core] branch master updated: wallet-core: use state instead of yet another flag
Date: Tue, 05 Mar 2024 01:55:26 +0100

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 2dd1bbebc wallet-core: use state instead of yet another flag
2dd1bbebc is described below

commit 2dd1bbebcaed35308105a8470e1aefb9f6f19900
Author: Florian Dold <florian@dold.me>
AuthorDate: Tue Mar 5 01:55:21 2024 +0100

    wallet-core: use state instead of yet another flag
---
 packages/taler-util/src/transactions-types.ts  | 28 ++++++++++++--------------
 packages/taler-wallet-core/src/db.ts           |  8 ++------
 packages/taler-wallet-core/src/pay-merchant.ts | 25 ++++++++++++++---------
 3 files changed, 31 insertions(+), 30 deletions(-)

diff --git a/packages/taler-util/src/transactions-types.ts 
b/packages/taler-util/src/transactions-types.ts
index 4754603e6..c5d838809 100644
--- a/packages/taler-util/src/transactions-types.ts
+++ b/packages/taler-util/src/transactions-types.ts
@@ -24,28 +24,25 @@
 /**
  * Imports.
  */
-import { TalerPreciseTimestamp, TalerProtocolTimestamp } from "./time.js";
-import {
-  AmountString,
-  Product,
-  InternationalizedString,
-  MerchantInfo,
-  codecForInternationalizedString,
-  codecForMerchantInfo,
-  codecForProduct,
-  Location,
-} from "./taler-types.js";
 import {
   Codec,
   buildCodecForObject,
-  codecOptional,
-  codecForString,
-  codecForList,
   codecForAny,
   codecForBoolean,
-  codecForEither,
   codecForConstString,
+  codecForEither,
+  codecForList,
+  codecForString,
+  codecOptional,
 } from "./codec.js";
+import {
+  AmountString,
+  InternationalizedString,
+  MerchantInfo,
+  codecForInternationalizedString,
+  codecForMerchantInfo,
+} from "./taler-types.js";
+import { TalerPreciseTimestamp, TalerProtocolTimestamp } from "./time.js";
 import {
   RefreshReason,
   ScopeInfo,
@@ -148,6 +145,7 @@ export enum TransactionMinorState {
   Proposed = "proposed",
   RefundAvailable = "refund-available",
   AcceptRefund = "accept-refund",
+  PaidByOther = "paid-by-other",
 }
 
 export enum TransactionAction {
diff --git a/packages/taler-wallet-core/src/db.ts 
b/packages/taler-wallet-core/src/db.ts
index 7e4f9fa4a..83b595a8a 100644
--- a/packages/taler-wallet-core/src/db.ts
+++ b/packages/taler-wallet-core/src/db.ts
@@ -1168,6 +1168,8 @@ export enum PurchaseStatus {
    */
   FailedClaim = 0x0501_0000,
 
+  FailedPaidByOther = 0x0501_0001,
+
   /**
    * Payment was successful.
    */
@@ -1326,12 +1328,6 @@ export interface PurchaseRecord {
    * did not picked up yet
    */
   refundAmountAwaiting: AmountString | undefined;
-
-  /**
-   * When the purchase has been shared to other wallet
-   * and the other wallet completed before this one.
-   */
-  paidByOther: boolean | undefined;
 }
 
 export enum ConfigRecordKey {
diff --git a/packages/taler-wallet-core/src/pay-merchant.ts 
b/packages/taler-wallet-core/src/pay-merchant.ts
index be3f7f106..80336fa76 100644
--- a/packages/taler-wallet-core/src/pay-merchant.ts
+++ b/packages/taler-wallet-core/src/pay-merchant.ts
@@ -898,8 +898,7 @@ async function createOrReusePurchase(
               return;
             }
             const oldTxState = computePayMerchantTransactionState(p);
-            p.purchaseStatus = PurchaseStatus.FailedClaim;
-            p.paidByOther = true;
+            p.purchaseStatus = PurchaseStatus.FailedPaidByOther;
             const newTxState = computePayMerchantTransactionState(p);
             await tx.purchases.put(p);
             return { oldTxState, newTxState };
@@ -947,7 +946,6 @@ async function createOrReusePurchase(
     lastSessionId: undefined,
     merchantPaySig: undefined,
     payInfo: undefined,
-    paidByOther: undefined,
     refundAmountAwaiting: undefined,
     timestampAccept: undefined,
     timestampFirstSuccessfulPay: undefined,
@@ -1383,7 +1381,7 @@ async function checkPaymentByProposalId(
       status: PreparePayResultType.AlreadyConfirmed,
       contractTerms: download.contractTermsRaw,
       contractTermsHash: download.contractData.contractTermsHash,
-      paid: purchase.paidByOther === true,
+      paid: purchase.purchaseStatus === PurchaseStatus.FailedPaidByOther,
       amountRaw: Amounts.stringify(download.contractData.amount),
       amountEffective: purchase.payInfo
         ? Amounts.stringify(purchase.payInfo.totalPayCost)
@@ -2036,8 +2034,7 @@ async function processPurchasePay(
             return;
           }
           const oldTxState = computePayMerchantTransactionState(p);
-          p.purchaseStatus = PurchaseStatus.FailedClaim;
-          p.paidByOther = true;
+          p.purchaseStatus = PurchaseStatus.FailedPaidByOther;
           const newTxState = computePayMerchantTransactionState(p);
           await tx.purchases.put(p);
           return { oldTxState, newTxState };
@@ -2386,6 +2383,13 @@ export function computePayMerchantTransactionState(
         major: TransactionMajorState.Failed,
         minor: TransactionMinorState.AbortingBank,
       };
+    case PurchaseStatus.FailedPaidByOther:
+      return {
+        major: TransactionMajorState.Failed,
+        minor: TransactionMinorState.PaidByOther,
+      };
+    default:
+      assertUnreachable(purchaseRecord.purchaseStatus);
   }
 }
 
@@ -2452,6 +2456,10 @@ export function computePayMerchantTransactionActions(
       return [TransactionAction.Delete];
     case PurchaseStatus.FailedAbort:
       return [TransactionAction.Delete];
+    case PurchaseStatus.FailedPaidByOther:
+      return [TransactionAction.Delete];
+    default:
+      assertUnreachable(purchaseRecord.purchaseStatus);
   }
 }
 
@@ -2480,7 +2488,7 @@ export async function sharePayment(
     if (p.purchaseStatus === PurchaseStatus.DialogProposed) {
       p.purchaseStatus = PurchaseStatus.DialogShared;
       p.shared = true;
-      tx.purchases.put(p);
+      await tx.purchases.put(p);
     }
 
     const newTxState = computePayMerchantTransactionState(p);
@@ -2578,8 +2586,7 @@ async function processPurchaseDialogShared(
           return;
         }
         const oldTxState = computePayMerchantTransactionState(p);
-        p.purchaseStatus = PurchaseStatus.FailedClaim;
-        p.paidByOther = true;
+        p.purchaseStatus = PurchaseStatus.FailedPaidByOther;
         const newTxState = computePayMerchantTransactionState(p);
         await tx.purchases.put(p);
         return { oldTxState, newTxState };

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]