diff --git a/package.json b/package.json index c4ca8fe8..d99f6faf 100644 --- a/package.json +++ b/package.json @@ -20,8 +20,8 @@ "api_pn": "https://raw.githubusercontent.com/pagopa/io-backend/v13.32.1-RELEASE/api_pn.yaml", "api_idpay": "https://raw.githubusercontent.com/pagopa/cstar-infrastructure/v6.5.0/src/domains/idpay-app/api/idpay_appio_full/openapi.appio.full.yml", "api_fast_login": "https://raw.githubusercontent.com/pagopa/io-backend/v13.32.1-RELEASE/openapi/generated/api_fast_login.yaml", - "api_pagopa_walletv3": "https://raw.githubusercontent.com/pagopa/pagopa-infra/a274e2b5b2fee52954c9a74cd40d88f806fc7f2a/src/domains/wallet-app/api/payment-wallet/v1/_openapi.json.tpl", - "api_pagopa_ecommerce": "https://raw.githubusercontent.com/pagopa/pagopa-infra/a274e2b5b2fee52954c9a74cd40d88f806fc7f2a/src/domains/ecommerce-app/api/ecommerce-io/v1/_openapi.json.tpl", + "api_pagopa_walletv3": "https://raw.githubusercontent.com/pagopa/pagopa-infra/bec0f57606a2002706bd5f5286fad3e508d2f50e/src/domains/wallet-app/api/payment-wallet/v1/_openapi.json.tpl", + "api_pagopa_ecommerce": "https://raw.githubusercontent.com/pagopa/pagopa-infra/2adee4c0a8de8570e74710379f9cccb04c6925b6/src/domains/ecommerce-app/api/ecommerce-io/v1/_openapi.json.tpl", "author": "Matteo Boschi", "license": "MIT", "private": false, diff --git a/src/features/wallet/payloads/paymentMethods.ts b/src/features/wallet/payloads/paymentMethods.ts index c492b3a4..98a3776d 100644 --- a/src/features/wallet/payloads/paymentMethods.ts +++ b/src/features/wallet/payloads/paymentMethods.ts @@ -1,36 +1,6 @@ -import { PaymentMethodStatusEnum } from "../../../../generated/definitions/pagopa/walletv3/PaymentMethodStatus"; import { PaymentMethodsResponse } from "../../../../generated/definitions/pagopa/walletv3/PaymentMethodsResponse"; -import { Range } from "../../../../generated/definitions/pagopa/walletv3/Range"; +import { paymentMethodsDB } from "../persistence/paymentMethods"; export const allPaymentMethods: PaymentMethodsResponse = { - paymentMethods: [ - { - id: "1", - name: "CARDS", - description: "Carta di credito", - status: PaymentMethodStatusEnum.ENABLED, - paymentTypeCode: "CARDS", - ranges: [ - { - min: 0, - max: 1000 - } as Range - ] - }, - { - id: "2", - name: "PAYPAL", - description: "PayPal", - asset: - "https://github.com/pagopa/io-services-metadata/blob/master/logos/apps/paypal.png?raw=true", - status: PaymentMethodStatusEnum.ENABLED, - paymentTypeCode: "PAYPAL", - ranges: [ - { - min: 0, - max: 500 - } as Range - ] - } - ] + paymentMethods: paymentMethodsDB }; diff --git a/src/features/wallet/persistence/paymentMethods.ts b/src/features/wallet/persistence/paymentMethods.ts new file mode 100644 index 00000000..c4231ff4 --- /dev/null +++ b/src/features/wallet/persistence/paymentMethods.ts @@ -0,0 +1,83 @@ +import { faker } from "@faker-js/faker"; +import { format } from "date-fns"; +import { PaymentMethodResponse } from "../../../../generated/definitions/pagopa/walletv3/PaymentMethodResponse"; +import { PaymentMethodStatusEnum } from "../../../../generated/definitions/pagopa/walletv3/PaymentMethodStatus"; +import { Range } from "../../../../generated/definitions/pagopa/walletv3/Range"; +import { + BrandEnum, + WalletInfoDetails +} from "../../../../generated/definitions/pagopa/walletv3/WalletInfoDetails"; +import { getRandomEnumValue } from "../../../payloads/utils/random"; + +export const paymentMethodsDB: ReadonlyArray = [ + { + id: "1", + name: "CARDS", + description: "Carte di credito o debito", + asset: "https://assets.cdn.platform.pagopa.it/creditcard/generic.png", + status: PaymentMethodStatusEnum.ENABLED, + paymentTypeCode: "CP", + ranges: [ + { + min: 0, + max: 1000 + } as Range + ] + }, + { + id: "2", + name: "PAYPAL", + description: "PayPal", + asset: "https://assets.cdn.platform.pagopa.it/apm/paypal.png", + status: PaymentMethodStatusEnum.ENABLED, + paymentTypeCode: "PPAL", + ranges: [ + { + min: 0, + max: 500 + } as Range + ] + }, + { + id: "3", + name: "BANCOMATPAY", + description: "BANCOMAT Pay", + asset: "https://assets.cdn.platform.pagopa.it/apm/bancomatpay.png", + status: PaymentMethodStatusEnum.ENABLED, + paymentTypeCode: "BPAY", + ranges: [ + { + min: 0, + max: 1000 + } as Range + ] + } +]; + +export const generateWalletDetailsByPaymentMethod = ( + paymentMethodId: number +): WalletInfoDetails => { + switch (paymentMethodId) { + case 1: + default: + return { + type: "CARDS", + lastFourDigits: faker.finance.mask(4, false, false), + expiryDate: format(faker.date.future(3), "yyyyMM"), + brand: getRandomEnumValue(BrandEnum) + }; + case 2: + return { + type: "PAYPAL", + abi: faker.random.numeric(5), + maskedEmail: faker.internet.email() + }; + case 3: + return { + type: "BPAY", + maskedNumber: faker.phone.number(), + instituteCode: faker.random.numeric(5), + bankName: faker.finance.accountName() + }; + } +}; diff --git a/src/features/wallet/persistence/userWallet.ts b/src/features/wallet/persistence/userWallet.ts index f33393d7..d648e468 100644 --- a/src/features/wallet/persistence/userWallet.ts +++ b/src/features/wallet/persistence/userWallet.ts @@ -1,62 +1,54 @@ import { faker } from "@faker-js/faker"; import * as E from "fp-ts/lib/Either"; +import { WalletApplication } from "../../../../generated/definitions/pagopa/walletv3/WalletApplication"; +import { WalletApplicationStatusEnum } from "../../../../generated/definitions/pagopa/walletv3/WalletApplicationStatus"; import { WalletInfo } from "../../../../generated/definitions/pagopa/walletv3/WalletInfo"; -import { BrandEnum } from "../../../../generated/definitions/pagopa/walletv3/WalletInfoDetails"; import { WalletStatusEnum } from "../../../../generated/definitions/pagopa/walletv3/WalletStatus"; -import { allPaymentMethods } from "../payloads/paymentMethods"; -import { getWalletTypeFromPaymentMethodId } from "../utils/onboarding"; -import { WalletApplicationStatusEnum } from "../../../../generated/definitions/pagopa/walletv3/WalletApplicationStatus"; -import { WalletApplication } from "../../../../generated/definitions/pagopa/walletv3/WalletApplication"; - -const userWallets = new Map(); +import { generateWalletDetailsByPaymentMethod } from "./paymentMethods"; -const addUserWallet = (walletId: string, wallet: WalletInfo) => { - userWallets.set(walletId, wallet); -}; +const userWallets = new Map(); const getUserWallets = () => Array.from(userWallets.values()); -const getUserWalletInfo = (walletId: string) => userWallets.get(walletId); +const getUserWalletInfo = (walletId: WalletInfo["walletId"]) => + userWallets.get(walletId); + +const addUserWallet = (wallet: WalletInfo) => { + userWallets.set(wallet.walletId, wallet); +}; -const generateUserWallet = (paymentMethodId: string) => { +const removeUserWallet = (walletId: WalletInfo["walletId"]) => { + userWallets.delete(walletId); +}; + +const generateUserWallet = (paymentMethodId: number) => { const walletId = (getUserWallets().length + 1).toString(); - const expiryDate = faker.date.future(); + const details = generateWalletDetailsByPaymentMethod(paymentMethodId); + const randomWallet: WalletInfo = { - creationDate: new Date(), - paymentMethodId, + walletId, + paymentMethodId: paymentMethodId.toString(), + status: WalletStatusEnum.CREATED, + creationDate: faker.date.past(2), + updateDate: faker.date.past(1), applications: [ { name: "PAGOPA", status: WalletApplicationStatusEnum.ENABLED } ], - status: WalletStatusEnum.CREATED, - updateDate: new Date(), paymentMethodAsset: "https://github.com/pagopa/io-services-metadata/blob/master/logos/apps/carte-pagamento.png?raw=true", - walletId, - details: { - type: getWalletTypeFromPaymentMethodId(paymentMethodId), - maskedEmail: "***t@gmail.com", - abi: faker.datatype.string(4), - brand: BrandEnum.MASTERCARD, - expiryDate: expiryDate.toISOString(), - bankName: faker.name.fullName(), - lastFourDigits: "0000" - } + details }; - addUserWallet(walletId, randomWallet); + addUserWallet(randomWallet); return randomWallet; }; -const removeUserWallet = (walletId: string) => { - userWallets.delete(walletId); -}; - const generateWalletData = () => { - generateUserWallet( - faker.helpers.arrayElement(allPaymentMethods.paymentMethods).id - ); + generateUserWallet(3); + generateUserWallet(2); + generateUserWallet(1); }; const updateUserWalletApplication = ( @@ -76,7 +68,7 @@ const updateUserWalletApplication = ( } as WalletApplication) ) }; - addUserWallet(walletId, wallet); + addUserWallet(wallet); return E.right(wallet); } return E.left("Wallet not found"); diff --git a/src/features/wallet/routers/payment.ts b/src/features/wallet/routers/payment.ts index fb2735ab..4bacd322 100644 --- a/src/features/wallet/routers/payment.ts +++ b/src/features/wallet/routers/payment.ts @@ -1,4 +1,3 @@ -import { faker } from "@faker-js/faker"; import { sequenceS } from "fp-ts/lib/Apply"; import * as O from "fp-ts/lib/Option"; import { flow, pipe } from "fp-ts/lib/function"; @@ -10,7 +9,6 @@ import { RequestAuthorizationRequest } from "../../../../generated/definitions/p import { RequestAuthorizationResponse } from "../../../../generated/definitions/pagopa/ecommerce/RequestAuthorizationResponse"; import { RptId } from "../../../../generated/definitions/pagopa/ecommerce/RptId"; import { ValidationFaultEnum } from "../../../../generated/definitions/pagopa/ecommerce/ValidationFault"; -import { WalletInfo as EcommerceWalletInfo } from "../../../../generated/definitions/pagopa/ecommerce/WalletInfo"; import { ioDevServerConfig } from "../../../config"; import { serverUrl } from "../../../utils/server"; import { getPaymentRequestsGetResponse } from "../payloads/payments"; @@ -188,18 +186,7 @@ addPaymentHandler( addPaymentHandler("get", "/wallets", (req, res) => { res.json({ - wallets: WalletDB.getUserWallets().map( - w => - ({ - ...w, - services: [ - ...w.applications.map(a => ({ - ...a, - updateDate: faker.date.recent() - })) - ] as EcommerceWalletInfo["services"] - } as EcommerceWalletInfo) - ) + wallets: WalletDB.getUserWallets() }); }); diff --git a/src/features/wallet/routers/wallets.ts b/src/features/wallet/routers/wallets.ts index 37561eac..bcbb07b3 100644 --- a/src/features/wallet/routers/wallets.ts +++ b/src/features/wallet/routers/wallets.ts @@ -89,7 +89,9 @@ addPaymentWalletHandler( */ addPaymentWalletHandler("post", "/wallets/mock", (req, res) => { const { paymentMethodId } = req.body; - const generatedWallet = WalletDB.generateUserWallet(paymentMethodId); + const generatedWallet = WalletDB.generateUserWallet( + parseInt(paymentMethodId, 10) + ); res.json(generatedWallet); });