From 04a376bdb9165eb9a76fe0ec1f84a1e0655e204c Mon Sep 17 00:00:00 2001 From: IlyaDoronin Date: Wed, 30 Aug 2023 17:02:56 +0300 Subject: [PATCH] fix: wallet API --- src/api/wallet.ts | 62 ++++++++++++++++++++++------------- src/pages/Payment/Payment.tsx | 19 ++++++----- 2 files changed, 49 insertions(+), 32 deletions(-) diff --git a/src/api/wallet.ts b/src/api/wallet.ts index 5bb37fb..eb84258 100644 --- a/src/api/wallet.ts +++ b/src/api/wallet.ts @@ -1,32 +1,48 @@ import { makeRequest } from "@frontend/kitui"; import { SendPaymentRequest, SendPaymentResponse } from "@root/model/wallet"; +import { parseAxiosError } from "@root/utils/parse-error"; - -const apiUrl = process.env.NODE_ENV === "production" ? "/customer" : "https://hub.pena.digital/customer"; +const apiUrl = + process.env.NODE_ENV === "production" + ? "/customer" + : "https://hub.pena.digital/customer"; const testPaymentBody: SendPaymentRequest = { - type: "bankCard", - amount: 15020, - currency: "RUB", - bankCard: { - number: "RUB", - expiryYear: "2021", - expiryMonth: "05", - csc: "05", - cardholder: "IVAN IVANOV", - }, - phoneNumber: "79000000000", - login: "login_test", - returnUrl: window.location.origin + "/wallet", + type: "bankCard", + amount: 15020, + currency: "RUB", + bankCard: { + number: "RUB", + expiryYear: "2021", + expiryMonth: "05", + csc: "05", + cardholder: "IVAN IVANOV", + }, + phoneNumber: "79000000000", + login: "login_test", + returnUrl: window.location.origin + "/wallet", }; -export function sendPayment(body: SendPaymentRequest = testPaymentBody) { - return makeRequest({ - url: apiUrl + "/wallet", - contentType: true, - method: "POST", - useToken: true, - withCredentials: false, - body +export async function sendPayment( + body: SendPaymentRequest = testPaymentBody +): Promise<[SendPaymentResponse | null, string?]> { + try { + const sendPaymentResponse = await makeRequest< + SendPaymentRequest, + SendPaymentResponse + >({ + url: apiUrl + "/wallet", + contentType: true, + method: "POST", + useToken: true, + withCredentials: false, + body, }); + + return [sendPaymentResponse]; + } catch (nativeError) { + const [error] = parseAxiosError(nativeError); + + return [null, `Ошибка оплаты. ${error}`]; + } } diff --git a/src/pages/Payment/Payment.tsx b/src/pages/Payment/Payment.tsx index 020da5e..79cf5a4 100644 --- a/src/pages/Payment/Payment.tsx +++ b/src/pages/Payment/Payment.tsx @@ -49,16 +49,17 @@ export default function Payment() { const paymentValue = parseFloat(paymentValueField) * 100; - function handleChoosePaymentClick() { + async function handleChoosePaymentClick() { if (Number(paymentValueField) !== 0) { - sendPayment() - .then((result) => { - setPaymentLink(result.link); - }) - .catch((error) => { - const message = getMessageFromFetchError(error); - if (message) enqueueSnackbar(message); - }); + const [sendPaymentResponse, sendPaymentError] = await sendPayment(); + + if (sendPaymentError) { + return enqueueSnackbar(sendPaymentError); + } + + if (sendPaymentResponse) { + setPaymentLink(sendPaymentResponse.link); + } } }