Skip to content

Commit

Permalink
chore. payment methods refactoring (#358)
Browse files Browse the repository at this point in the history
  • Loading branch information
mastro993 authored Apr 4, 2024
1 parent 05c7fa0 commit 7833940
Show file tree
Hide file tree
Showing 6 changed files with 119 additions and 85 deletions.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
34 changes: 2 additions & 32 deletions src/features/wallet/payloads/paymentMethods.ts
Original file line number Diff line number Diff line change
@@ -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
};
83 changes: 83 additions & 0 deletions src/features/wallet/persistence/paymentMethods.ts
Original file line number Diff line number Diff line change
@@ -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<PaymentMethodResponse> = [
{
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()
};
}
};
64 changes: 28 additions & 36 deletions src/features/wallet/persistence/userWallet.ts
Original file line number Diff line number Diff line change
@@ -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<string, WalletInfo>();
import { generateWalletDetailsByPaymentMethod } from "./paymentMethods";

const addUserWallet = (walletId: string, wallet: WalletInfo) => {
userWallets.set(walletId, wallet);
};
const userWallets = new Map<WalletInfo["walletId"], WalletInfo>();

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: "***[email protected]",
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 = (
Expand All @@ -76,7 +68,7 @@ const updateUserWalletApplication = (
} as WalletApplication)
)
};
addUserWallet(walletId, wallet);
addUserWallet(wallet);
return E.right(wallet);
}
return E.left("Wallet not found");
Expand Down
15 changes: 1 addition & 14 deletions src/features/wallet/routers/payment.ts
Original file line number Diff line number Diff line change
@@ -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";
Expand All @@ -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";
Expand Down Expand Up @@ -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()
});
});

Expand Down
4 changes: 3 additions & 1 deletion src/features/wallet/routers/wallets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});

Expand Down

0 comments on commit 7833940

Please sign in to comment.