gnunet-svn
[Top][All Lists]
Advanced

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

[taler-wallet-core] branch master updated: better workaround with duplic


From: gnunet
Subject: [taler-wallet-core] branch master updated: better workaround with duplication
Date: Fri, 21 Oct 2022 15:11:49 +0200

This is an automated email from the git hooks/post-receive script.

sebasjm pushed a commit to branch master
in repository wallet-core.

The following commit(s) were added to refs/heads/master by this push:
     new e63f202e3 better workaround with duplication
e63f202e3 is described below

commit e63f202e369c9dd84bfcdb273a7219e936d1f699
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Fri Oct 21 10:11:41 2022 -0300

    better workaround with duplication
---
 .../src/operations/pay-merchant.ts                 | 44 ++++++++++++++--------
 .../src/operations/transactions.ts                 | 38 ++-----------------
 2 files changed, 32 insertions(+), 50 deletions(-)

diff --git a/packages/taler-wallet-core/src/operations/pay-merchant.ts 
b/packages/taler-wallet-core/src/operations/pay-merchant.ts
index 2b0ea1f96..082dc42d2 100644
--- a/packages/taler-wallet-core/src/operations/pay-merchant.ts
+++ b/packages/taler-wallet-core/src/operations/pay-merchant.ts
@@ -129,6 +129,7 @@ import {
 } from "./common.js";
 import { getExchangeDetails } from "./exchanges.js";
 import { createRefreshGroup, getTotalRefreshCost } from "./refresh.js";
+import { GetReadOnlyAccess } from "../util/query.js";
 
 /**
  * Logger.
@@ -257,6 +258,9 @@ function getPayRequestTimeout(purchase: PurchaseRecord): 
Duration {
 export async function expectProposalDownload(
   ws: InternalWalletState,
   p: PurchaseRecord,
+  parentTx?: GetReadOnlyAccess<{
+    contractTerms: typeof WalletStoresV1.contractTerms;
+  }>,
 ): Promise<{
   contractData: WalletContractData;
   contractTermsRaw: any;
@@ -265,24 +269,32 @@ export async function expectProposalDownload(
     throw Error("expected proposal to be downloaded");
   }
   const download = p.download;
+
+  async function getFromTransaction(
+    tx: Exclude<typeof parentTx, undefined>,
+  ): Promise<ReturnType<typeof expectProposalDownload>> {
+    const contractTerms = await tx.contractTerms.get(
+      download.contractTermsHash,
+    );
+    if (!contractTerms) {
+      throw Error("contract terms not found");
+    }
+    return {
+      contractData: extractContractData(
+        contractTerms.contractTermsRaw,
+        download.contractTermsHash,
+        download.contractTermsMerchantSig,
+      ),
+      contractTermsRaw: contractTerms.contractTermsRaw,
+    };
+  }
+
+  if (parentTx) {
+    return getFromTransaction(parentTx);
+  }
   return await ws.db
     .mktx((x) => [x.contractTerms])
-    .runReadOnly(async (tx) => {
-      const contractTerms = await tx.contractTerms.get(
-        download.contractTermsHash,
-      );
-      if (!contractTerms) {
-        throw Error("contract terms not found");
-      }
-      return {
-        contractData: extractContractData(
-          contractTerms.contractTermsRaw,
-          download.contractTermsHash,
-          download.contractTermsMerchantSig,
-        ),
-        contractTermsRaw: contractTerms.contractTermsRaw,
-      };
-    });
+    .runReadOnly(getFromTransaction);
 }
 
 export function extractContractData(
diff --git a/packages/taler-wallet-core/src/operations/transactions.ts 
b/packages/taler-wallet-core/src/operations/transactions.ts
index fea165588..3f1d0a224 100644
--- a/packages/taler-wallet-core/src/operations/transactions.ts
+++ b/packages/taler-wallet-core/src/operations/transactions.ts
@@ -212,28 +212,13 @@ export async function getTransactionById(
           }),
         );
 
-        // const download = await expectProposalDownload(ws, purchase);
+        const download = await expectProposalDownload(ws, purchase, tx);
 
-        // FIXME: this is what expectProposalDownload, but nested tx is not 
supported
-        if (!purchase.download) {
-          throw Error("expected proposal to be downloaded");
-        }
-        const contractTerms = await tx.contractTerms.get(
-          purchase.download.contractTermsHash,
-        );
-        if (!contractTerms) {
-          throw Error("contract terms not found");
-        }
-        const contractData = extractContractData(
-          contractTerms.contractTermsRaw,
-          purchase.download.contractTermsHash,
-          purchase.download.contractTermsMerchantSig,
-        );
         const cleanRefunds = filteredRefunds.filter(
           (x): x is WalletRefundItem => !!x,
         );
 
-        // const contractData = download.contractData;
+        const contractData = download.contractData;
         const refunds = mergeRefundByExecutionTime(
           cleanRefunds,
           Amounts.getZero(contractData.amount.currency),
@@ -306,23 +291,8 @@ export async function getTransactionById(
           ),
         );
         if (t) throw Error("deleted");
-        // const download = await expectProposalDownload(ws, purchase);
-        // const contractData = download.contractData;
-        // FIXME: this is what expectProposalDownload, but nested tx is not 
supported
-        if (!purchase.download) {
-          throw Error("expected proposal to be downloaded");
-        }
-        const contractTerms = await tx.contractTerms.get(
-          purchase.download.contractTermsHash,
-        );
-        if (!contractTerms) {
-          throw Error("contract terms not found");
-        }
-        const contractData = extractContractData(
-          contractTerms.contractTermsRaw,
-          purchase.download.contractTermsHash,
-          purchase.download.contractTermsMerchantSig,
-        );
+        const download = await expectProposalDownload(ws, purchase, tx);
+        const contractData = download.contractData;
         const refunds = mergeRefundByExecutionTime(
           [theRefund],
           Amounts.getZero(contractData.amount.currency),

-- 
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]