From d9e02088cd4bbd71e16918fe12e14d95ce1de94f Mon Sep 17 00:00:00 2001 From: Giuseppe Di Pinto Date: Tue, 23 Apr 2024 18:32:24 +0200 Subject: [PATCH] add featuredItemsSize config param --- src/config.ts | 1 + src/features/services/payloads/get-featured-items.ts | 9 ++++++--- src/features/services/types/configuration.ts | 7 +++++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/config.ts b/src/config.ts index 46d3c5f0..977d0981 100644 --- a/src/config.ts +++ b/src/config.ts @@ -190,6 +190,7 @@ const defaultConfig: IoDevServerConfig = { sessionTTLinMS: 60000 }, service: { + featuredItemsSize: 5, response: { featuredItemsResponseCode: 200, institutionsResponseCode: 200 diff --git a/src/features/services/payloads/get-featured-items.ts b/src/features/services/payloads/get-featured-items.ts index f88326f2..1a8da33a 100644 --- a/src/features/services/payloads/get-featured-items.ts +++ b/src/features/services/payloads/get-featured-items.ts @@ -1,12 +1,15 @@ import { nonEmptyArray } from "fp-ts"; -import * as A from "fp-ts/Array"; +import * as A from "fp-ts/lib/Array"; import * as O from "fp-ts/lib/Option"; import { pipe } from "fp-ts/lib/function"; import { FeaturedItem } from "../../../../generated/definitions/services/FeaturedItem"; import { FeaturedItems } from "../../../../generated/definitions/services/FeaturedItems"; +import { ioDevServerConfig } from "../../../config"; import ServicesDB from "../../../persistence/services"; import { getInstitutionsResponsePayload } from "./get-institutions"; +const featuredItemsSize = ioDevServerConfig.features.service.featuredItemsSize; + /** * Returns a random ordered array subset. * @param array starting array of type T @@ -16,7 +19,7 @@ import { getInstitutionsResponsePayload } from "./get-institutions"; const getRandomArraySubset = (array: T[], size: number): T[] => pipe( O.some(array), - O.fromPredicate(arr => O.isSome(arr) && size <= array.length), + O.fromPredicate(arr => O.isSome(arr) && size > 0 && size <= array.length), O.fold( () => [], () => { @@ -92,7 +95,7 @@ export const getFeaturedItemsResponsePayload = (): FeaturedItems => { ...featuredIntitutions, ...featuredNationalServices ], - arr => getRandomArraySubset(arr, arr.length) + arr => getRandomArraySubset(arr, featuredItemsSize) ); return { diff --git a/src/features/services/types/configuration.ts b/src/features/services/types/configuration.ts index 8abc5122..a06b1a1c 100644 --- a/src/features/services/types/configuration.ts +++ b/src/features/services/types/configuration.ts @@ -1,9 +1,12 @@ +import { WithinRangeNumber } from "@pagopa/ts-commons/lib/numbers"; import * as t from "io-ts"; import { HttpResponseCode } from "../../../types/httpResponseCode"; -export const ServiceConfiguration = t.interface({ +export const ServiceConfiguration = t.type({ + // configure number of featured items + featuredItemsSize: WithinRangeNumber(0, 6), // configure some API response error code - response: t.interface({ + response: t.type({ // 200 success with payload featuredItemsResponseCode: HttpResponseCode, institutionsResponseCode: HttpResponseCode