Skip to content

Commit

Permalink
feat: Pagination transactions
Browse files Browse the repository at this point in the history
  • Loading branch information
Hantex9 committed May 7, 2024
1 parent 960d424 commit b12da06
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 3 deletions.
3 changes: 3 additions & 0 deletions src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,9 @@ const defaultConfig: IoDevServerConfig = {
allowRandomValues: true
},
features: {
payments: {
numberOfTransactions: 12,
},
bonus: {
cgn: {
isCgnEligible: true,
Expand Down
6 changes: 5 additions & 1 deletion src/features/payments/persistence/transactions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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"];

Expand Down Expand Up @@ -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
Expand Down
8 changes: 6 additions & 2 deletions src/features/payments/routers/transactions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand All @@ -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)
)
);
});
Expand Down
4 changes: 4 additions & 0 deletions src/types/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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([
Expand Down

0 comments on commit b12da06

Please sign in to comment.