diff --git a/src/config.ts b/src/config.ts index 977d0981..824fef3f 100644 --- a/src/config.ts +++ b/src/config.ts @@ -173,6 +173,9 @@ const defaultConfig: IoDevServerConfig = { allowRandomValues: true }, features: { + payments: { + numberOfTransactions: 12, + }, bonus: { cgn: { isCgnEligible: true, diff --git a/src/features/payments/persistence/transactions.ts b/src/features/payments/persistence/transactions.ts index 77794e2d..f89025c2 100644 --- a/src/features/payments/persistence/transactions.ts +++ b/src/features/payments/persistence/transactions.ts @@ -5,6 +5,7 @@ import { TransactionListItem } from "../../../../generated/definitions/pagopa/tr import { TransactionDetailResponse } from "../../../../generated/definitions/pagopa/transactions/TransactionDetailResponse"; import { TransactionInfo } from "../../../../generated/definitions/pagopa/ecommerce/TransactionInfo"; import { generateRandomInfoTransaction } from "../utils/transactions"; +import { ioDevServerConfig } from "../../../config"; type TransactionId = TransactionListItem["transactionId"]; @@ -78,7 +79,10 @@ const generateUserTransaction = ( }; const generateUserTransactionData = () => { - generateUserTransaction("1"); + // eslint-disable-next-line functional/no-let + for (let i = 0; i < ioDevServerConfig.features.payments.numberOfTransactions; i = i + 1) { + generateUserTransaction(faker.datatype.uuid()); + } }; // At server startup diff --git a/src/features/payments/routers/transactions.ts b/src/features/payments/routers/transactions.ts index 8fe3d93d..498d6f1e 100644 --- a/src/features/payments/routers/transactions.ts +++ b/src/features/payments/routers/transactions.ts @@ -4,9 +4,13 @@ import TransactionsDB from "../persistence/transactions"; import { addTransactionHandler } from "./router"; +const CONTINUATION_TOKEN_HEADER = "x-continuation-token"; + addTransactionHandler("get", "/transactions", (req, res) => { const size = req.query.size ? Number(req.query.size) : 10; - const transactions = TransactionsDB.getUserTransactions().slice(0, size); + const offset = req.headers[CONTINUATION_TOKEN_HEADER] ? Number(req.headers[CONTINUATION_TOKEN_HEADER]) : 0; + const transactions = TransactionsDB.getUserTransactions().slice(offset, (offset + size)); + const continuationTokenHeader = { [CONTINUATION_TOKEN_HEADER]: TransactionsDB.getUserTransactions().length > (offset + size) ? (offset + size) : null }; pipe( transactions, O.fromPredicate(transactions => transactions.length > 0), @@ -16,7 +20,7 @@ addTransactionHandler("get", "/transactions", (req, res) => { status: 404, detail: "No transactions found for the user" }), - transactions => res.status(200).json(transactions) + transactions => res.status(200).set(continuationTokenHeader).json(transactions) ) ); }); diff --git a/src/types/config.ts b/src/types/config.ts index 0bceeff7..1e6e2eed 100644 --- a/src/types/config.ts +++ b/src/types/config.ts @@ -187,6 +187,10 @@ export const IoDevServerConfig = t.interface({ ]), features: t.intersection([ t.interface({ + payments: t.interface({ + // the number of transactions to generate at the beginning + numberOfTransactions: t.number + }), bonus: t.interface({ // defines the special configuration for cgn eligibility cgn: t.intersection([