diff options
author | Florian Dold <florian.dold@gmail.com> | 2020-09-08 20:45:33 +0530 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2020-09-08 20:45:33 +0530 |
commit | ddbb09b1403214cff3e5a598dc51bdf37df72971 (patch) | |
tree | 0238eb77bbfb623e98b9660e1eac53c88a74e66f | |
parent | f79d10eea291acba42dd27e5900d2128a1242daa (diff) |
DB tweaks
5 files changed, 46 insertions, 51 deletions
diff --git a/packages/taler-wallet-core/src/operations/pay.ts b/packages/taler-wallet-core/src/operations/pay.ts index c655aa7d8..a6f941ff1 100644 --- a/packages/taler-wallet-core/src/operations/pay.ts +++ b/packages/taler-wallet-core/src/operations/pay.ts @@ -34,6 +34,7 @@ import { WalletContractData, CoinRecord, DenominationRecord, + PayCoinSelection, } from "../types/dbTypes"; import { NotificationType } from "../types/notifications"; import { @@ -84,37 +85,6 @@ import { initRetryInfo, updateRetryInfoTimeout, getRetryDuration } from "../util const logger = new Logger("pay.ts"); /** - * Result of selecting coins, contains the exchange, and selected - * coins with their denomination. - */ -export interface PayCoinSelection { - /** - * Amount requested by the merchant. - */ - paymentAmount: AmountJson; - - /** - * Public keys of the coins that were selected. - */ - coinPubs: string[]; - - /** - * Amount that each coin contributes. - */ - coinContributions: AmountJson[]; - - /** - * How much of the wire fees is the customer paying? - */ - customerWireFees: AmountJson; - - /** - * How much of the deposit fees is the customer paying? - */ - customerDepositFees: AmountJson; -} - -/** * Structure to describe a coin that is available to be * used in a payment. */ @@ -141,9 +111,6 @@ export interface AvailableCoinInfo { feeDeposit: AmountJson; } -export interface PayCostInfo { - totalCost: AmountJson; -} /** * Compute the total cost of a payment to the customer. @@ -155,7 +122,7 @@ export interface PayCostInfo { export async function getTotalPaymentCost( ws: InternalWalletState, pcs: PayCoinSelection, -): Promise<PayCostInfo> { +): Promise<AmountJson> { const costs = []; for (let i = 0; i < pcs.coinPubs.length; i++) { const coin = await ws.db.get(Stores.coins, pcs.coinPubs[i]); @@ -183,9 +150,7 @@ export async function getTotalPaymentCost( costs.push(pcs.coinContributions[i]); costs.push(refreshCost); } - return { - totalCost: Amounts.sum(costs).amount, - }; + return Amounts.sum(costs).amount; } /** @@ -470,7 +435,7 @@ async function recordConfirmPay( contractData: d.contractData, lastSessionId: sessionId, payCoinSelection: coinSelection, - payCostInfo, + totalPayCost: payCostInfo, coinDepositPermissions, timestampAccept: getTimestampNow(), timestampLastRefundStatus: undefined, @@ -1057,15 +1022,15 @@ export async function preparePayForUri( }; } - const costInfo = await getTotalPaymentCost(ws, res); - logger.trace("costInfo", costInfo); + const totalCost = await getTotalPaymentCost(ws, res); + logger.trace("costInfo", totalCost); logger.trace("coinsForPayment", res); return { status: PreparePayResultType.PaymentPossible, contractTerms: JSON.parse(d.contractTermsRaw), proposalId: proposal.proposalId, - amountEffective: Amounts.stringify(costInfo.totalCost), + amountEffective: Amounts.stringify(totalCost), amountRaw: Amounts.stringify(res.paymentAmount), }; } @@ -1092,7 +1057,7 @@ export async function preparePayForUri( contractTermsHash: purchase.contractData.contractTermsHash, paid: true, amountRaw: Amounts.stringify(purchase.contractData.amount), - amountEffective: Amounts.stringify(purchase.payCostInfo.totalCost), + amountEffective: Amounts.stringify(purchase.totalPayCost), proposalId, }; } else if (!purchase.timestampFirstSuccessfulPay) { @@ -1102,7 +1067,7 @@ export async function preparePayForUri( contractTermsHash: purchase.contractData.contractTermsHash, paid: false, amountRaw: Amounts.stringify(purchase.contractData.amount), - amountEffective: Amounts.stringify(purchase.payCostInfo.totalCost), + amountEffective: Amounts.stringify(purchase.totalPayCost), proposalId, }; } else { @@ -1113,7 +1078,7 @@ export async function preparePayForUri( contractTermsHash: purchase.contractData.contractTermsHash, paid, amountRaw: Amounts.stringify(purchase.contractData.amount), - amountEffective: Amounts.stringify(purchase.payCostInfo.totalCost), + amountEffective: Amounts.stringify(purchase.totalPayCost), ...(paid ? { nextUrl: purchase.contractData.orderId } : {}), proposalId, }; diff --git a/packages/taler-wallet-core/src/operations/refund.ts b/packages/taler-wallet-core/src/operations/refund.ts index d49675c09..097e20863 100644 --- a/packages/taler-wallet-core/src/operations/refund.ts +++ b/packages/taler-wallet-core/src/operations/refund.ts @@ -470,7 +470,7 @@ export async function applyRefund( return { contractTermsHash: purchase.contractData.contractTermsHash, proposalId: purchase.proposalId, - amountEffectivePaid: Amounts.stringify(purchase.payCostInfo.totalCost), + amountEffectivePaid: Amounts.stringify(purchase.totalPayCost), amountRefundGone: Amounts.stringify(amountRefundGone), amountRefundGranted: Amounts.stringify(amountRefundGranted), pendingAtExchange, diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts index 54d4d5574..5bc4ebace 100644 --- a/packages/taler-wallet-core/src/operations/transactions.ts +++ b/packages/taler-wallet-core/src/operations/transactions.ts @@ -238,7 +238,7 @@ export async function getTransactions( transactions.push({ type: TransactionType.Payment, amountRaw: Amounts.stringify(pr.contractData.amount), - amountEffective: Amounts.stringify(pr.payCostInfo.totalCost), + amountEffective: Amounts.stringify(pr.totalPayCost), status: pr.timestampFirstSuccessfulPay ? PaymentStatus.Paid : PaymentStatus.Accepted, diff --git a/packages/taler-wallet-core/src/types/dbTypes.ts b/packages/taler-wallet-core/src/types/dbTypes.ts index 0074409e8..62eadc78b 100644 --- a/packages/taler-wallet-core/src/types/dbTypes.ts +++ b/packages/taler-wallet-core/src/types/dbTypes.ts @@ -27,7 +27,6 @@ import { AmountJson } from "../util/amounts"; import { Auditor, CoinDepositPermission, - TipResponse, ExchangeSignKeyJson, MerchantInfo, Product, @@ -43,8 +42,7 @@ import { ReserveClosingTransaction, ReserveRecoupTransaction, } from "./ReserveTransaction"; -import { Timestamp, Duration, getTimestampNow } from "../util/time"; -import { PayCoinSelection, PayCostInfo } from "../operations/pay"; +import { Timestamp, Duration } from "../util/time"; import { IDBKeyPath } from "idb-bridge"; import { RetryInfo } from "../util/retries"; @@ -1256,6 +1254,37 @@ export interface WalletContractData { } /** + * Result of selecting coins, contains the exchange, and selected + * coins with their denomination. + */ +export interface PayCoinSelection { + /** + * Amount requested by the merchant. + */ + paymentAmount: AmountJson; + + /** + * Public keys of the coins that were selected. + */ + coinPubs: string[]; + + /** + * Amount that each coin contributes. + */ + coinContributions: AmountJson[]; + + /** + * How much of the wire fees is the customer paying? + */ + customerWireFees: AmountJson; + + /** + * How much of the deposit fees is the customer paying? + */ + customerDepositFees: AmountJson; +} + +/** * Record that stores status information about one purchase, starting from when * the customer accepts a proposal. Includes refund status if applicable. */ @@ -1280,7 +1309,7 @@ export interface PurchaseRecord { payCoinSelection: PayCoinSelection; - payCostInfo: PayCostInfo; + totalPayCost: AmountJson; /** * Timestamp of the first time that sending a payment to the merchant diff --git a/packages/taler-wallet-core/src/types/walletTypes.ts b/packages/taler-wallet-core/src/types/walletTypes.ts index c9014830b..5507822fa 100644 --- a/packages/taler-wallet-core/src/types/walletTypes.ts +++ b/packages/taler-wallet-core/src/types/walletTypes.ts @@ -931,3 +931,4 @@ export const codecForAcceptTipRequest = (): Codec<AcceptTipRequest> => buildCodecForObject<AcceptTipRequest>() .property("walletTipId", codecForString()) .build("AcceptTipRequest"); + |