Skip to content

Commit

Permalink
Merge branch 'master' into IOPID-689-check-email
Browse files Browse the repository at this point in the history
  • Loading branch information
shadowsheep1 authored Dec 1, 2023
2 parents e795a59 + c01edea commit a6997c2
Show file tree
Hide file tree
Showing 16 changed files with 417 additions and 141 deletions.
64 changes: 64 additions & 0 deletions assets/wallet/wallet_payment.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<!DOCTYPE html>
<html lang="en">

<head>
<script type="text/javascript">
const outcomeList = [
["0", "SUCCESS"],
["1", "GENERIC_ERROR"],
["2", "AUTH_ERROR"],
["3", "INVALID_DATA"],
["4", "TIMEOUT"],
["5", "CIRCUIT_ERROR"],
["6", "MISSING_FIELDS"],
["7", "INVALID_CARD"],
["8", "CANCELED_BY_USER"],
["9", "DUPLICATE_ORDER"],
["10", "EXCESSIVE_AMOUNT"],
["11", "ORDER_NOT_PRESENT"],
["12", "INVALID_METHOD"],
["13", "KO_RETRIABLE"],
["14", "INVALID_SESSION"]
];

const simulateOutcome = () => {
const queryString = location.search;
const urlParams = new URLSearchParams(queryString);
const transactionId = urlParams.get("transactionId");
const container = document.getElementById("outcomeSelect");
window.location.href = `/ecommerce/io/v1/transactions/${transactionId}/outcomes?outcome=${container.value}`;
}

function onLoad() {
const options = outcomeList.map(v => `<option value="${v[0]}">${v[0]} - ${v[1]}</option>`).join();
const select = `<select id="outcomeSelect" style="width: 400px;height: 60px;font-size: 32px">${options}</select>`;
const container = document.getElementById("select_container");
container.innerHTML = `<div>${select}</div>`;
}

</script>
<meta charset="UTF-8">
<title>Wallet - Payment</title>
</head>

<body onload="onLoad()">

<div align="center" style="width: 100%; height:100%;margin: auto; margin-top: 20%;">
<h1 style="font-size: 62px;">WALLET PAYMENT</h1>
<div style="width: 100%; margin-top: 20px">
<div style="margin-top: 40px; font-size: 42px; margin-bottom: 20px;">
Select outcome
</div>
<div id="select_container">
</div>
<div style="margin-top: 60px; ">
<div onclick="simulateOutcome()"
style="padding: 16px; width: 350px; font-size: 30px; color: white; background-color: #e67f00; text-decoration: none;">
SIMULATE OUTCOME
</div>
</div>
</div>
</div>
</body>

</html>
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
"api_idpay": "https://raw.githubusercontent.com/pagopa/cstar-infrastructure/v6.3.0/src/domains/idpay-app/api/idpay_appio_full/openapi.appio.full.yml",
"api_fast_login": "https://raw.githubusercontent.com/pagopa/io-backend/v13.22.0-RELEASE/openapi/generated/api_fast_login.yaml",
"api_pagopa_walletv3": "https://raw.githubusercontent.com/pagopa/pagopa-infra/5bd3f60aff52d2653111aa47a3975997295ae210/src/domains/wallet-app/api/payment-wallet/v1/_openapi.json.tpl",
"api_pagopa_ecommerce": "https://raw.githubusercontent.com/pagopa/pagopa-infra/65878f9913fcc0eaff499ba8a1a20427a412c010/src/domains/ecommerce-app/api/ecommerce-io/v1/_openapi.json.tpl",
"author": "Matteo Boschi",
"license": "MIT",
"private": false,
Expand All @@ -50,6 +51,7 @@
"generate:pagopa-privative-configuration-definitions": "rimraf generated/definitions/pagopa/privative/configuration && mkdir -p generated/definitions/pagopa/privative/configuration && gen-api-models --api-spec $npm_package_pagopa_privative_configuration --out-dir ./generated/definitions/pagopa/privative/configuration",
"generate:pagopa-walletv2-definitions": "rimraf generated/definitions/pagopa/walletv2 && mkdir -p generated/definitions/pagopa/walletv2 && gen-api-models --api-spec $npm_package_api_pagopa_walletv2 --out-dir ./generated/definitions/pagopa/walletv2",
"generate:pagopa-walletv3-definitions": "rimraf generated/definitions/pagopa/walletv3 && mkdir -p generated/definitions/pagopa/walletv3 && gen-api-models --api-spec $npm_package_api_pagopa_walletv3 --out-dir ./generated/definitions/pagopa/walletv3",
"generate:pagopa-ecommerce-definitions": "rimraf generated/definitions/pagopa/ecommerce && mkdir -p generated/definitions/pagopa/ecommerce && gen-api-models --api-spec $npm_package_api_pagopa_ecommerce --out-dir ./generated/definitions/pagopa/ecommerce",
"generate:pagopa-api": "rimraf generated/definitions/pagopa && mkdir -p generated/definitions/pagopa && gen-api-models --api-spec $npm_package_api_pagopa --out-dir ./generated/definitions/pagopa",
"generate:bonus-vacanze-definitions": "rimraf generated/definitions/bonus_vacanze && mkdir -p generated/definitions/bonus_vacanze && gen-api-models --api-spec $npm_package_api_bonus_vacanze --out-dir ./generated/definitions/bonus_vacanze ",
"generate:cgn-definitions": "rimraf generated/definitions/cgn && mkdir -p generated/definitions/cgn && gen-api-models --api-spec $npm_package_api_cgn --out-dir ./generated/definitions/cgn ",
Expand All @@ -68,7 +70,7 @@
"generate:pn-definitions": "rimraf generated/definitions/pn && mkdir -p generated/definitions/pn && gen-api-models --api-spec $npm_package_api_pn --out-dir ./generated/definitions/pn --no-strict --request-types --response-decoders",
"generate:idpay-definitions": "rimraf generated/definitions/idpay && mkdir -p generated/definitions/idpay && gen-api-models --api-spec $npm_package_api_idpay --out-dir ./generated/definitions/idpay --no-strict",
"generate:fast-login-definitions": "rimraf generated/definitions/fast_login && mkdir -p generated/definitions/fast_login && gen-api-models --api-spec $npm_package_api_fast_login --out-dir ./generated/definitions/fast_login --no-strict --request-types --response-decoders",
"generate:pagopa": "npm-run-all generate:pagopa-walletv2-definitions generate:pagopa-privative-configuration-definitions generate:pagopa-cobadge-configuration-definitions generate:pagopa-walletv3-definitions",
"generate:pagopa": "npm-run-all generate:pagopa-walletv2-definitions generate:pagopa-privative-configuration-definitions generate:pagopa-cobadge-configuration-definitions generate:pagopa-walletv3-definitions generate:pagopa-ecommerce-definitions",
"generate": "npm-run-all generate:*"
},
"jest": {
Expand Down
4 changes: 1 addition & 3 deletions src/features/wallet/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
import "./onboarding";

export { walletV3Router } from "./routers";
export { walletRouter } from "./routers";
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
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 { TypeEnum } from "../../../../../generated/definitions/pagopa/walletv3/WalletInfoDetails";
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 { TypeEnum } from "../../../../generated/definitions/pagopa/walletv3/WalletInfoDetails";

export const allPaymentMethods: PaymentMethodsResponse = {
paymentMethods: [
Expand Down
29 changes: 29 additions & 0 deletions src/features/wallet/payloads/payments.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { faker } from "@faker-js/faker/locale/it";
import * as O from "fp-ts/lib/Option";
import { pipe } from "fp-ts/lib/function";
import { ServicePublic } from "../../../../generated/definitions/backend/ServicePublic";
import { PaymentRequestsGetResponse } from "../../../../generated/definitions/pagopa/ecommerce/PaymentRequestsGetResponse";
import { RptId } from "../../../../generated/definitions/pagopa/ecommerce/RptId";
import ServicesDB from "../../../persistence/services";

export const getPaymentRequestsGetResponse = (
rptId: RptId
): O.Option<PaymentRequestsGetResponse> =>
pipe(
ServicesDB.getSummaries(),
faker.helpers.arrayElement,
({ service_id }) => service_id,
ServicesDB.getService,
O.fromNullable,
O.map((randomService: ServicePublic) => ({
rptId,
amount: faker.datatype.number({
min: 1,
max: 9999
}) as PaymentRequestsGetResponse["amount"],
paFiscalCode: randomService.organization_fiscal_code,
paName: randomService.organization_name,
description: faker.finance.transactionDescription(),
dueDate: faker.date.future()
}))
);
77 changes: 77 additions & 0 deletions src/features/wallet/payloads/transactions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import { faker } from "@faker-js/faker/locale/it";
import * as O from "fp-ts/lib/Option";
import { ulid } from "ulid";
import { CalculateFeeResponse } from "../../../../generated/definitions/pagopa/ecommerce/CalculateFeeResponse";
import {
ClientIdEnum,
NewTransactionResponse,
SendPaymentResultOutcomeEnum
} from "../../../../generated/definitions/pagopa/ecommerce/NewTransactionResponse";
import { PaymentInfo } from "../../../../generated/definitions/pagopa/ecommerce/PaymentInfo";
import { PaymentMethodStatusEnum } from "../../../../generated/definitions/pagopa/ecommerce/PaymentMethodStatus";
import { RptId } from "../../../../generated/definitions/pagopa/ecommerce/RptId";
import { TransactionInfo } from "../../../../generated/definitions/pagopa/ecommerce/TransactionInfo";
import { TransactionStatusEnum } from "../../../../generated/definitions/pagopa/ecommerce/TransactionStatus";

export const getNewTransactionResponsePayload = (
payments: ReadonlyArray<PaymentInfo>
): O.Option<NewTransactionResponse> =>
O.some({
transactionId: ulid(),
payments,
status: TransactionStatusEnum.ACTIVATED,
clientId: ClientIdEnum.IO,
sendPaymentResultOutcome: SendPaymentResultOutcomeEnum.OK
});

export const getTransactionInfoPayload = (
transactionId: string
): O.Option<TransactionInfo> =>
O.some({
transactionId,
payments: [
{
rptId: "77777777777302012387654312384" as RptId,
amount: faker.datatype.number({
min: 1,
max: 9999
}) as PaymentInfo["amount"]
}
],
status: TransactionStatusEnum.ACTIVATED,
clientId: ClientIdEnum.IO,
sendPaymentResultOutcome: SendPaymentResultOutcomeEnum.OK
});

export const getCalculateFeeResponsePayload = (
_walletId: string,
_amount: number
): O.Option<CalculateFeeResponse> =>
O.some({
paymentMethodName: "VISA",
paymentMethodDescription: "Test",
paymentMethodStatus: PaymentMethodStatusEnum.ENABLED,
bundles: [
{
abi: "01010",
taxPayerFee: 123,
primaryCiIncurredFee: 123,
bundleName: "BANCO di NAPOLI",
idBundle: "A"
},
{
abi: "01015",
bundleName: "Banco di Sardegna",
taxPayerFee: 456,
primaryCiIncurredFee: 456,
idBundle: "B"
},
{
abi: "03015",
bundleName: "FINECO",
taxPayerFee: 789,
primaryCiIncurredFee: 789,
idBundle: "C"
}
]
});
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { faker } from "@faker-js/faker";
import { WalletInfo } from "../../../../generated/definitions/pagopa/walletv3/WalletInfo";
import { ServiceNameEnum } from "../../../../generated/definitions/pagopa/walletv3/ServiceName";
import { WalletStatusEnum } from "../../../../generated/definitions/pagopa/walletv3/WalletStatus";
import { WalletInfo } from "../../../../generated/definitions/pagopa/walletv3/WalletInfo";
import { BrandEnum } from "../../../../generated/definitions/pagopa/walletv3/WalletInfoDetails";
import { getWalletTypeFromPaymentMethodId } from "../onboarding/utils";
import { WalletStatusEnum } from "../../../../generated/definitions/pagopa/walletv3/WalletStatus";
import { allPaymentMethods } from "../payloads/paymentMethods";
import { getWalletTypeFromPaymentMethodId } from "../utils/onboarding";

const userWallets = new Map<string, WalletInfo>();

Expand Down Expand Up @@ -47,6 +48,15 @@ const removeUserWallet = (walletId: string) => {
userWallets.delete(walletId);
};

const generateWalletData = () => {
generateUserWallet(
faker.helpers.arrayElement(allPaymentMethods.paymentMethods).id
);
};

// At server startup
generateWalletData();

export default {
addUserWallet,
getUserWallets,
Expand Down
31 changes: 3 additions & 28 deletions src/features/wallet/routers/index.ts
Original file line number Diff line number Diff line change
@@ -1,29 +1,4 @@
import { Request, Response, Router } from "express";
import { addHandler, SupportedMethod } from "../../../payloads/response";
import "./payment";
import "./wallets";

export const walletV3Router = Router();

export const PAYMENT_WALLET_PREFIX = "/payment-wallet/v1";

export const addWalletV3Prefix = (path: string) =>
`${PAYMENT_WALLET_PREFIX}/wallets${path}`;
export const addPaymentMethodsPrefix = (path: string) =>
`${PAYMENT_WALLET_PREFIX}/payment-methods${path}`;

export const addWalletV3Handler = (
method: SupportedMethod,
path: string,
handleRequest: (request: Request, response: Response) => void
) => addHandler(walletV3Router, method, addWalletV3Prefix(path), handleRequest);

export const addPaymentMethodsHandler = (
method: SupportedMethod,
path: string,
handleRequest: (request: Request, response: Response) => void
) =>
addHandler(
walletV3Router,
method,
addPaymentMethodsPrefix(path),
handleRequest
);
export { walletRouter } from "./router";
Loading

0 comments on commit a6997c2

Please sign in to comment.