diff --git a/docker/readmodel-db/catalog.sql b/docker/readmodel-db/catalog.sql index 2f0519d0af..effc22cffe 100644 --- a/docker/readmodel-db/catalog.sql +++ b/docker/readmodel-db/catalog.sql @@ -21,7 +21,7 @@ CREATE TABLE IF NOT EXISTS readmodel_catalog.eservice_descriptor ( id UUID, eservice_id UUID NOT NULL REFERENCES readmodel_catalog.eservice (id) ON DELETE CASCADE, metadata_version INTEGER NOT NULL, - version VARCHAR NOT NULL, + version INTEGER NOT NULL, description VARCHAR, state VARCHAR NOT NULL, audience VARCHAR ARRAY NOT NULL, diff --git a/packages/agreement-process/src/model/domain/errors.ts b/packages/agreement-process/src/model/domain/errors.ts index 3b5d544de6..283cdc06ab 100644 --- a/packages/agreement-process/src/model/domain/errors.ts +++ b/packages/agreement-process/src/model/domain/errors.ts @@ -26,7 +26,6 @@ export const errorCodes = { agreementAlreadyExists: "0010", noNewerDescriptor: "0011", publishedDescriptorNotFound: "0012", - unexpectedVersionFormat: "0013", descriptorNotFound: "0014", stampNotFound: "0015", documentNotFound: "0017", @@ -242,17 +241,6 @@ export function publishedDescriptorNotFound( }); } -export function unexpectedVersionFormat( - eserviceId: EServiceId, - descriptorId: DescriptorId -): ApiError { - return new ApiError({ - detail: `Version in not an Int for descriptor ${descriptorId} of EService ${eserviceId}`, - code: "unexpectedVersionFormat", - title: "Unexpected version format", - }); -} - export function noNewerDescriptor( eserviceId: EServiceId, descriptorId: DescriptorId diff --git a/packages/agreement-process/src/model/domain/models.ts b/packages/agreement-process/src/model/domain/models.ts index 7b6436a10f..6d9e43f915 100644 --- a/packages/agreement-process/src/model/domain/models.ts +++ b/packages/agreement-process/src/model/domain/models.ts @@ -72,7 +72,7 @@ export type AgreementContractPDFPayload = { eserviceId: EServiceId; eserviceName: string; descriptorId: DescriptorId; - descriptorVersion: string; + descriptorVersion: number; producerName: string; producerIpaCode: string | undefined; consumerName: string; diff --git a/packages/agreement-process/src/services/agreementService.ts b/packages/agreement-process/src/services/agreementService.ts index 9bd4fa6b90..9e23412571 100644 --- a/packages/agreement-process/src/services/agreementService.ts +++ b/packages/agreement-process/src/services/agreementService.ts @@ -1,4 +1,3 @@ -import { z } from "zod"; import { AppContext, CreateEvent, @@ -58,7 +57,6 @@ import { tenantIsNotTheDelegateConsumer, publishedDescriptorNotFound, tenantNotFound, - unexpectedVersionFormat, } from "../model/domain/errors.js"; import { ActiveDelegations, @@ -716,26 +714,13 @@ export function agreementServiceBuilder( if (newDescriptor === undefined) { throw publishedDescriptorNotFound(eservice.id); } - const latestDescriptorVersion = z - .preprocess((x) => Number(x), z.number()) - .safeParse(newDescriptor.version); - if (!latestDescriptorVersion.success) { - throw unexpectedVersionFormat(eservice.id, newDescriptor.id); - } const currentDescriptor = retrieveDescriptor( agreementToBeUpgraded.data.descriptorId, eservice ); - const currentVersion = z - .preprocess((x) => Number(x), z.number()) - .safeParse(currentDescriptor.version); - if (!currentVersion.success) { - throw unexpectedVersionFormat(eservice.id, currentDescriptor.id); - } - - if (latestDescriptorVersion.data <= currentVersion.data) { + if (newDescriptor.version <= currentDescriptor.version) { throw noNewerDescriptor(eservice.id, currentDescriptor.id); } diff --git a/packages/agreement-process/test/integration/agreementStatesFlows.test.ts b/packages/agreement-process/test/integration/agreementStatesFlows.test.ts index 2b6ff9c5c8..d478ce63e4 100644 --- a/packages/agreement-process/test/integration/agreementStatesFlows.test.ts +++ b/packages/agreement-process/test/integration/agreementStatesFlows.test.ts @@ -83,7 +83,7 @@ describe("Agreeement states flows", () => { [[validDeclaredEserviceAttribute]] // No verified attributes required in V1 ), - version: "1", + version: 1, agreementApprovalPolicy: "Automatic", }; @@ -162,7 +162,7 @@ describe("Agreeement states flows", () => { const descriptorV2: Descriptor = { ...descriptorV1, id: generateId(), - version: "2", + version: 2, attributes: { certified: descriptorV1.attributes.certified, declared: descriptorV1.attributes.declared, @@ -308,7 +308,7 @@ describe("Agreeement states flows", () => { [[validDeclaredEserviceAttribute]] // No verified attributes required in V1 ), - version: "1", + version: 1, agreementApprovalPolicy: "Automatic", }; @@ -372,7 +372,7 @@ describe("Agreeement states flows", () => { const descriptorV2: Descriptor = { ...descriptorV1, id: generateId(), - version: "2", + version: 2, attributes: { certified: descriptorV1.attributes.certified, declared: descriptorV1.attributes.declared, diff --git a/packages/agreement-process/test/integration/createAgreement.test.ts b/packages/agreement-process/test/integration/createAgreement.test.ts index a1ea56295c..3931c96585 100644 --- a/packages/agreement-process/test/integration/createAgreement.test.ts +++ b/packages/agreement-process/test/integration/createAgreement.test.ts @@ -349,13 +349,13 @@ describe("create agreement", () => { const descriptor0: Descriptor = getMockDescriptorPublished(); const descriptor1: Descriptor = { ...getMockDescriptorPublished(), - version: "1", + version: 1, state: descriptorState.draft, }; const descriptor2: Descriptor = { ...getMockDescriptorPublished(), - version: "2", + version: 2, state: descriptorState.draft, }; @@ -477,12 +477,12 @@ describe("create agreement", () => { const descriptor0: Descriptor = { ...getMockDescriptorPublished(), - version: "0", + version: 0, state: randomArrayItem(notDraftDescriptorStates), }; const descriptor1: Descriptor = { ...getMockDescriptorPublished(), - version: "1", + version: 1, state: randomArrayItem(notDraftDescriptorStates), }; @@ -513,7 +513,7 @@ describe("create agreement", () => { const descriptor: Descriptor = { ...getMockDescriptorPublished(), - version: "0", + version: 0, state: randomArrayItem( Object.values(descriptorState).filter( (state) => diff --git a/packages/agreement-process/test/integration/submitAgreement.test.ts b/packages/agreement-process/test/integration/submitAgreement.test.ts index db82f664d8..42cf5f08c0 100644 --- a/packages/agreement-process/test/integration/submitAgreement.test.ts +++ b/packages/agreement-process/test/integration/submitAgreement.test.ts @@ -38,6 +38,7 @@ import { AgreementSubmittedV2, AgreementV2, Attribute, + Descriptor, DescriptorId, DescriptorState, EServiceId, @@ -589,7 +590,7 @@ describe("submit agreement", () => { ], }; - const oldDescriptor = { + const oldDescriptor: Descriptor = { ...getMockDescriptor(), id: descriptorId, state: randomArrayItem( @@ -599,10 +600,10 @@ describe("submit agreement", () => { state !== descriptorState.waitingForApproval ) ), - version: "1", + version: 1, }; - const newDescriptor = { + const newDescriptor: Descriptor = { ...getMockDescriptor(), state: randomArrayItem( Object.values(descriptorState).filter( @@ -611,7 +612,7 @@ describe("submit agreement", () => { state !== descriptorState.waitingForApproval ) ), - version: "2", + version: 2, }; const eservice = getMockEService(generateId(), producer.id, [ oldDescriptor, diff --git a/packages/agreement-process/test/integration/upgradeAgreement.test.ts b/packages/agreement-process/test/integration/upgradeAgreement.test.ts index b0f992fef4..3e65226ba7 100644 --- a/packages/agreement-process/test/integration/upgradeAgreement.test.ts +++ b/packages/agreement-process/test/integration/upgradeAgreement.test.ts @@ -66,7 +66,6 @@ import { tenantIsNotTheDelegateConsumer, publishedDescriptorNotFound, tenantNotFound, - unexpectedVersionFormat, } from "../../src/model/domain/errors.js"; import { config } from "../../src/config/config.js"; import { AgreementContractPDFPayload } from "../../src/model/domain/models.js"; @@ -129,7 +128,7 @@ describe("upgrade Agreement", () => { const newPublishedDescriptor: Descriptor = { ...getMockDescriptorPublished(), - version: "2", + version: 2, attributes: { certified: [[getMockEServiceAttribute(certifiedAttribute.id)]], declared: [[getMockEServiceAttribute(declaredAttribute.id)]], @@ -140,7 +139,7 @@ describe("upgrade Agreement", () => { const currentDescriptor: Descriptor = { ...getMockDescriptorPublished(), state: descriptorState.deprecated, - version: "1", + version: 1, }; const eservice: EService = { ...getMockEService(), @@ -408,7 +407,7 @@ describe("upgrade Agreement", () => { const newPublishedDescriptor: Descriptor = { ...getMockDescriptorPublished(), - version: "2", + version: 2, attributes: { certified: [ [getMockEServiceAttribute(validCertifiedTenantAttribute.id)], @@ -429,7 +428,7 @@ describe("upgrade Agreement", () => { const currentDescriptor: Descriptor = { ...getMockDescriptorPublished(), state: descriptorState.deprecated, - version: "1", + version: 1, }; const eservice: EService = { ...getMockEService(), @@ -597,7 +596,7 @@ describe("upgrade Agreement", () => { const newPublishedDescriptor: Descriptor = { ...getMockDescriptorPublished(), - version: "2", + version: 2, attributes: { certified: [[getMockEServiceAttribute(certifiedAttribute.id)]], declared: [[getMockEServiceAttribute(declaredAttribute.id)]], @@ -608,7 +607,7 @@ describe("upgrade Agreement", () => { const currentDescriptor: Descriptor = { ...getMockDescriptorPublished(), state: descriptorState.deprecated, - version: "1", + version: 1, }; const eservice: EService = { ...getMockEService(), @@ -965,7 +964,7 @@ describe("upgrade Agreement", () => { const newPublishedDescriptor: Descriptor = { ...getMockDescriptorPublished(), - version: "2", + version: 2, attributes: { certified: [ [getMockEServiceAttribute(validCertifiedTenantAttribute.id)], @@ -986,7 +985,7 @@ describe("upgrade Agreement", () => { const currentDescriptor: Descriptor = { ...getMockDescriptorPublished(), state: descriptorState.deprecated, - version: "1", + version: 1, }; const eservice: EService = { ...getMockEService(), @@ -1250,47 +1249,13 @@ describe("upgrade Agreement", () => { ).rejects.toThrowError(publishedDescriptorNotFound(agreement.eserviceId)); }); - it("should throw an unexpectedVersionFormat error when the published descriptor has an unexpected version format", async () => { - const consumerId = generateId(); - const authData = getMockAuthData(consumerId); - - const publishedDescriptor: Descriptor = { - ...getMockDescriptorPublished(), - version: "invalid-version-number", - }; - const eservice: EService = { - ...getMockEService(), - descriptors: [publishedDescriptor], - }; - await addOneEService(eservice); - - const agreement: Agreement = { - ...getMockAgreement( - eservice.id, - consumerId, - randomArrayItem(agreementUpgradableStates) - ), - producerId: eservice.producerId, - }; - await addOneAgreement(agreement); - - await expect( - agreementService.upgradeAgreement( - agreement.id, - getMockContext({ authData }) - ) - ).rejects.toThrowError( - unexpectedVersionFormat(agreement.eserviceId, publishedDescriptor.id) - ); - }); - it("should throw a descriptorNotFound error when the agreement descriptor does not exist", async () => { const consumerId = generateId(); const authData = getMockAuthData(consumerId); const publishedDescriptor: Descriptor = { ...getMockDescriptorPublished(), - version: "2", + version: 2, }; const eservice: EService = { @@ -1319,60 +1284,19 @@ describe("upgrade Agreement", () => { ); }); - it("should throw an unexpectedVersionFormat error when the agreement descriptor has an unexpected version format", async () => { - const consumerId = generateId(); - const authData = getMockAuthData(consumerId); - - const newPublishedDescriptor: Descriptor = { - ...getMockDescriptorPublished(), - version: "2", - }; - - const currentDescriptor: Descriptor = { - ...getMockDescriptorPublished(), - state: descriptorState.deprecated, - version: "invalid-version-number", - }; - const eservice: EService = { - ...getMockEService(), - descriptors: [newPublishedDescriptor, currentDescriptor], - }; - await addOneEService(eservice); - - const agreement: Agreement = { - ...getMockAgreement( - eservice.id, - consumerId, - randomArrayItem(agreementUpgradableStates) - ), - producerId: eservice.producerId, - descriptorId: currentDescriptor.id, - }; - await addOneAgreement(agreement); - - await expect( - agreementService.upgradeAgreement( - agreement.id, - getMockContext({ authData }) - ) - ).rejects.toThrowError( - unexpectedVersionFormat(eservice.id, agreement.descriptorId) - ); - }); - it("should throw a noNewerDescriptor error when the latest published descriptor has version number lower than or equal to the agreement current descriptor", async () => { const consumerId = generateId(); const authData = getMockAuthData(consumerId); const newPublishedDescriptor: Descriptor = { ...getMockDescriptorPublished(), - version: "1", + version: 1, }; const currentDescriptor: Descriptor = { ...getMockDescriptorPublished(), state: descriptorState.deprecated, - version: randomArrayItem(["1", "2"]), + version: randomArrayItem([1, 2]), }; const eservice: EService = { ...getMockEService(), @@ -1407,13 +1331,13 @@ describe("upgrade Agreement", () => { const newPublishedDescriptor: Descriptor = { ...getMockDescriptorPublished(), - version: "2", + version: 2, }; const currentDescriptor: Descriptor = { ...getMockDescriptorPublished(), state: descriptorState.deprecated, - version: "1", + version: 1, }; const eservice: EService = { ...getMockEService(), @@ -1447,13 +1371,13 @@ describe("upgrade Agreement", () => { const newPublishedDescriptor: Descriptor = { ...getMockDescriptorPublished(), - version: "2", + version: 2, }; const currentDescriptor: Descriptor = { ...getMockDescriptorPublished(), state: descriptorState.deprecated, - version: "1", + version: 1, }; const eservice: EService = { ...getMockEService(), @@ -1498,7 +1422,7 @@ describe("upgrade Agreement", () => { const newPublishedDescriptor: Descriptor = { ...getMockDescriptorPublished(), - version: "2", + version: 2, attributes: { certified: [ [getMockEServiceAttribute(invalidCertifiedTenantAttribute.id)], @@ -1511,7 +1435,7 @@ describe("upgrade Agreement", () => { const currentDescriptor: Descriptor = { ...getMockDescriptorPublished(), state: descriptorState.deprecated, - version: "1", + version: 1, }; const eservice: EService = { ...getMockEService(), @@ -1551,7 +1475,7 @@ describe("upgrade Agreement", () => { const newPublishedDescriptor: Descriptor = { ...getMockDescriptorPublished(), - version: "2", + version: 2, attributes: { certified: [], declared: [], @@ -1562,7 +1486,7 @@ describe("upgrade Agreement", () => { const currentDescriptor: Descriptor = { ...getMockDescriptorPublished(), state: descriptorState.deprecated, - version: "1", + version: 1, }; const eservice: EService = { ...getMockEService(), @@ -1611,7 +1535,7 @@ describe("upgrade Agreement", () => { const newPublishedDescriptor: Descriptor = { ...getMockDescriptorPublished(), - version: "2", + version: 2, attributes: { certified: [], declared: [ @@ -1624,7 +1548,7 @@ describe("upgrade Agreement", () => { const currentDescriptor: Descriptor = { ...getMockDescriptorPublished(), state: descriptorState.deprecated, - version: "1", + version: 1, }; const eservice: EService = { ...getMockEService(), diff --git a/packages/api-clients/open-api/apiGatewayApi.yml b/packages/api-clients/open-api/apiGatewayApi.yml index 691fb4a524..0927c84b80 100644 --- a/packages/api-clients/open-api/apiGatewayApi.yml +++ b/packages/api-clients/open-api/apiGatewayApi.yml @@ -2542,7 +2542,8 @@ components: format: uuid version: description: eservice descriptor version - type: string + type: integer + format: int32 description: description: eservice descriptor description type: string @@ -2602,8 +2603,8 @@ components: description: eservice name type: string version: - type: string - pattern: ^[0-9]{1,4}$ + type: integer + format: int32 description: description: eservice description type: string diff --git a/packages/api-clients/open-api/bffApi.yml b/packages/api-clients/open-api/bffApi.yml index 2855294382..df3d699e34 100644 --- a/packages/api-clients/open-api/bffApi.yml +++ b/packages/api-clients/open-api/bffApi.yml @@ -20346,7 +20346,8 @@ components: type: string format: uuid version: - type: string + type: integer + format: int32 description: type: string interface: @@ -20633,7 +20634,8 @@ components: type: string format: uuid version: - type: string + type: integer + format: int32 description: type: string interface: @@ -21086,7 +21088,8 @@ components: state: $ref: "#/components/schemas/EServiceDescriptorState" version: - type: string + type: integer + format: int32 audience: type: array items: @@ -21402,7 +21405,8 @@ components: state: $ref: "#/components/schemas/EServiceDescriptorState" version: - type: string + type: integer + format: int32 audience: type: array items: @@ -21977,7 +21981,8 @@ components: name: type: string version: - type: string + type: integer + format: int32 activeDescriptor: $ref: "#/components/schemas/CompactDescriptor" required: @@ -22718,7 +22723,8 @@ components: type: string format: uuid version: - type: string + type: integer + format: int32 name: type: string required: diff --git a/packages/api-clients/open-api/catalogApi.yml b/packages/api-clients/open-api/catalogApi.yml index 3b511eba3c..4afe23b1a0 100644 --- a/packages/api-clients/open-api/catalogApi.yml +++ b/packages/api-clients/open-api/catalogApi.yml @@ -3039,7 +3039,8 @@ components: type: string format: uuid version: - type: string + type: integer + format: int32 description: type: string audience: diff --git a/packages/authorization-updater/test/authorizationUpdater.test.ts b/packages/authorization-updater/test/authorizationUpdater.test.ts index ab0c7a1d69..41fe32700d 100644 --- a/packages/authorization-updater/test/authorizationUpdater.test.ts +++ b/packages/authorization-updater/test/authorizationUpdater.test.ts @@ -140,7 +140,7 @@ describe("Authorization Updater processMessage", () => { async (eventType) => { const descriptor: Descriptor = { ...getMockDescriptorPublished(), - version: "1", + version: 1, }; const eservice: EService = { ...getMockEService(), @@ -206,7 +206,7 @@ describe("Authorization Updater processMessage", () => { it("should correctly process a catalog message with type EServiceDescriptorQuotasUpdated and call updateEServiceState", async () => { const descriptor: Descriptor = { ...getMockDescriptorPublished(), - version: "1", + version: 1, }; const eservice: EService = { ...getMockEService(), @@ -326,7 +326,7 @@ describe("Authorization Updater processMessage", () => { it("Should correctly process an agreement message with type AgreementUpgraded and call updateAgreementAndEServiceStates", async () => { const descriptor: Descriptor = { ...getMockDescriptorPublished(), - version: "1", + version: 1, state: randomArrayItem(Object.values(descriptorState)), }; const eservice: EService = { diff --git a/packages/backend-for-frontend/src/services/catalogService.ts b/packages/backend-for-frontend/src/services/catalogService.ts index 9a038e3d84..0b507c204c 100644 --- a/packages/backend-for-frontend/src/services/catalogService.ts +++ b/packages/backend-for-frontend/src/services/catalogService.ts @@ -1105,9 +1105,7 @@ export function catalogServiceBuilder( ): catalogApi.EServiceDescriptor => descriptors.reduce( (latestDescriptor, curr) => - parseInt(curr.version, 10) > parseInt(latestDescriptor.version, 10) - ? curr - : latestDescriptor, + curr.version > latestDescriptor.version ? curr : latestDescriptor, descriptors[0] ); diff --git a/packages/backend-for-frontend/test/exportEServiceDescriptor.test.ts b/packages/backend-for-frontend/test/exportEServiceDescriptor.test.ts index d302cf007d..0d0a5593a1 100644 --- a/packages/backend-for-frontend/test/exportEServiceDescriptor.test.ts +++ b/packages/backend-for-frontend/test/exportEServiceDescriptor.test.ts @@ -57,7 +57,7 @@ describe("exportEServiceDescriptor", () => { descriptors: [ { id: descriptorId, - version: "1.0.0", + version: 1, audience: [], voucherLifespan: 1, dailyCallsPerConsumer: 2, diff --git a/packages/backend-for-frontend/test/getCatalogEServiceDescriptor.test.ts b/packages/backend-for-frontend/test/getCatalogEServiceDescriptor.test.ts index 8f3afa5820..cf2e6c37c6 100644 --- a/packages/backend-for-frontend/test/getCatalogEServiceDescriptor.test.ts +++ b/packages/backend-for-frontend/test/getCatalogEServiceDescriptor.test.ts @@ -77,7 +77,7 @@ describe("getCatalogEServiceDescriptor", () => { ], ], }, - version: "", + version: 0, serverUrls: [], audience: [], voucherLifespan: 0, diff --git a/packages/backend-for-frontend/test/importEService.test.ts b/packages/backend-for-frontend/test/importEService.test.ts index 772ffee9a0..83cdaa317a 100644 --- a/packages/backend-for-frontend/test/importEService.test.ts +++ b/packages/backend-for-frontend/test/importEService.test.ts @@ -43,7 +43,7 @@ describe("importEService", () => { descriptors: [ { id: generateId(), - version: "3.0.0", + version: 3, audience: [], voucherLifespan: 1, dailyCallsPerConsumer: 2, diff --git a/packages/backend-for-frontend/test/mockUtils.ts b/packages/backend-for-frontend/test/mockUtils.ts index 3681a5fca5..7d2ab8ee5c 100644 --- a/packages/backend-for-frontend/test/mockUtils.ts +++ b/packages/backend-for-frontend/test/mockUtils.ts @@ -160,7 +160,7 @@ export const getMockBffApiCompactEServiceLight = ( export const getMockBffApiProducerEServiceDescriptor = (): bffApi.ProducerEServiceDescriptor => ({ id: generateId(), - version: generateMock(z.string()), + version: generateMock(z.number().int()), description: generateMock(z.string().optional()), interface: generateMock(bffApi.EServiceDoc.optional()), docs: generateMock(z.array(bffApi.EServiceDoc)), @@ -213,7 +213,7 @@ export const getMockBffApiProducerEServiceDetails = export const getMockBffApiCatalogEServiceDescriptor = (): bffApi.CatalogEServiceDescriptor => ({ id: generateId(), - version: generateMock(z.string()), + version: generateMock(z.number().int()), description: generateMock(z.string().optional()), interface: generateMock(bffApi.EServiceDoc.optional()), docs: generateMock(z.array(bffApi.EServiceDoc)), @@ -290,7 +290,7 @@ export const getMockBffApiPresignedUrl = (): bffApi.PresignedUrl => ({ export const getMockCatalogApiEServiceDescriptor = (): catalogApi.EServiceDescriptor & { id: DescriptorId } => ({ id: generateId(), - version: generateMock(z.string()), + version: generateMock(z.number().int()), description: generateMock(z.string().optional()), audience: generateMock(z.array(z.string())), voucherLifespan: generateMock(z.number().int()), diff --git a/packages/backend-for-frontend/test/utils.ts b/packages/backend-for-frontend/test/utils.ts index 05d4ca6d87..5d37c452fa 100644 --- a/packages/backend-for-frontend/test/utils.ts +++ b/packages/backend-for-frontend/test/utils.ts @@ -84,7 +84,7 @@ export const toEserviceCatalogProcessMock = ( { ...descriptor, state: "DRAFT", - version: "1", + version: 1, agreementApprovalPolicy: "AUTOMATIC", publishedAt: new Date().toISOString(), suspendedAt: undefined, diff --git a/packages/catalog-platformstate-writer/src/consumerServiceV2.ts b/packages/catalog-platformstate-writer/src/consumerServiceV2.ts index 6d93c0c894..d0251dbd2a 100644 --- a/packages/catalog-platformstate-writer/src/consumerServiceV2.ts +++ b/packages/catalog-platformstate-writer/src/consumerServiceV2.ts @@ -43,7 +43,7 @@ export async function handleMessageV2( message.type ); const previousDescriptor = eservice.descriptors.find( - (d) => d.version === (Number(descriptor.version) - 1).toString() + (d) => d.version === descriptor.version - 1 ); // flow for current descriptor diff --git a/packages/catalog-platformstate-writer/test/consumerServiceV2.test.ts b/packages/catalog-platformstate-writer/test/consumerServiceV2.test.ts index ee3eae91ac..d3724b8382 100644 --- a/packages/catalog-platformstate-writer/test/consumerServiceV2.test.ts +++ b/packages/catalog-platformstate-writer/test/consumerServiceV2.test.ts @@ -826,7 +826,7 @@ describe("integration tests V2 events", async () => { state: descriptorState.archived, audience: ["pagopa.it/test1", "pagopa.it/test2"], interface: getMockDocument(), - version: "1", + version: 1, publishedAt: new Date(), archivedAt: new Date(), }; @@ -836,7 +836,7 @@ describe("integration tests V2 events", async () => { state: descriptorState.published, audience: ["pagopa.it/test1", "pagopa.it/test2"], interface: getMockDocument(), - version: "2", + version: 2, }; const eservice: EService = { diff --git a/packages/catalog-process/src/model/domain/models.ts b/packages/catalog-process/src/model/domain/models.ts index 33a91157eb..2dee19d677 100644 --- a/packages/catalog-process/src/model/domain/models.ts +++ b/packages/catalog-process/src/model/domain/models.ts @@ -43,7 +43,7 @@ export type EServiceDocument = { }; export const consumer = z.object({ - descriptorVersion: z.string(), + descriptorVersion: z.coerce.number().int(), descriptorState: DescriptorState, agreementState: AgreementState, consumerName: z.string(), diff --git a/packages/catalog-process/src/routers/EServiceRouter.ts b/packages/catalog-process/src/routers/EServiceRouter.ts index 81b41f5808..9e36145eab 100644 --- a/packages/catalog-process/src/routers/EServiceRouter.ts +++ b/packages/catalog-process/src/routers/EServiceRouter.ts @@ -302,7 +302,7 @@ const eservicesRouter = ( return res.status(200).send( catalogApi.EServiceConsumers.parse({ results: consumers.results.map((c) => ({ - descriptorVersion: parseInt(c.descriptorVersion, 10), + descriptorVersion: c.descriptorVersion, descriptorState: descriptorStateToApiEServiceDescriptorState( c.descriptorState ), diff --git a/packages/catalog-process/src/services/catalogService.ts b/packages/catalog-process/src/services/catalogService.ts index 15cec2be2a..0620538b36 100644 --- a/packages/catalog-process/src/services/catalogService.ts +++ b/packages/catalog-process/src/services/catalogService.ts @@ -529,7 +529,7 @@ function innerCreateEService( const draftDescriptor: Descriptor = { id: generateId(), description: seed.descriptor.description, - version: "1", + version: 1, interface: undefined, docs: [], state: descriptorState.draft, @@ -1679,14 +1679,14 @@ export function catalogServiceBuilder( d.state === descriptorState.deprecated || d.state === descriptorState.published ) - .map((d: Descriptor) => parseInt(d.version, 10)); + .map((d: Descriptor) => d.version); const recentDescriptorVersion = Math.max(...descriptorVersions); // eslint-disable-next-line @typescript-eslint/explicit-function-return-type const event = () => { if ( recentDescriptorVersion !== null && - parseInt(descriptor.version, 10) === recentDescriptorVersion + descriptor.version === recentDescriptorVersion ) { const newEservice = replaceDescriptor( eservice.data, @@ -1822,7 +1822,7 @@ export function catalogServiceBuilder( { ...descriptor, id: generateId(), - version: "1", + version: 1, interface: clonedInterfaceDocument, docs: clonedDocuments, state: descriptorState.draft, diff --git a/packages/catalog-process/src/utilities/versionGenerator.ts b/packages/catalog-process/src/utilities/versionGenerator.ts index 9e54940151..8cb35fa5d1 100644 --- a/packages/catalog-process/src/utilities/versionGenerator.ts +++ b/packages/catalog-process/src/utilities/versionGenerator.ts @@ -1,28 +1,11 @@ import { Descriptor, EService } from "pagopa-interop-models"; -import { z } from "zod"; -import { invalidDescriptorVersion } from "../model/domain/errors.js"; - -function parseVersionNumber(version: string): number { - const versionNumber = z.coerce.number().safeParse(version); - if (!versionNumber.success) { - throw invalidDescriptorVersion( - `${version} is not a valid descriptor version` - ); - } - return versionNumber.data; -} export const getLatestDescriptor = ( eservice: EService ): Descriptor | undefined => - [...eservice.descriptors] - .sort( - (a, b) => parseVersionNumber(a.version) - parseVersionNumber(b.version) - ) - .at(-1); + [...eservice.descriptors].sort((a, b) => a.version - b.version).at(-1); -export const nextDescriptorVersion = (eservice: EService): string => { - const currentVersion = getLatestDescriptor(eservice)?.version ?? "0"; - const parsedVersion = parseVersionNumber(currentVersion); - return (parsedVersion + 1).toString(); +export const nextDescriptorVersion = (eservice: EService): number => { + const currentVersion = getLatestDescriptor(eservice)?.version ?? 0; + return currentVersion + 1; }; diff --git a/packages/catalog-process/test/api/createDescriptor.test.ts b/packages/catalog-process/test/api/createDescriptor.test.ts index 9a8ff0aa78..3cc7dbcb08 100644 --- a/packages/catalog-process/test/api/createDescriptor.test.ts +++ b/packages/catalog-process/test/api/createDescriptor.test.ts @@ -3,6 +3,7 @@ import { describe, it, expect, vi } from "vitest"; import request from "supertest"; import { Attribute, + Descriptor, EService, EServiceId, generateId, @@ -49,9 +50,9 @@ describe("API /eservices/{eServiceId}/descriptors authorization test", () => { }, }; - const newDescriptor = { + const newDescriptor: Descriptor = { ...mockDescriptor, - version: "1", + version: 1, createdAt: new Date(), id: mockDescriptor.id, serverUrls: [], diff --git a/packages/catalog-process/test/api/createTemplateInstanceDescriptor.test.ts b/packages/catalog-process/test/api/createTemplateInstanceDescriptor.test.ts index 91af03f911..cbcc0ffb67 100644 --- a/packages/catalog-process/test/api/createTemplateInstanceDescriptor.test.ts +++ b/packages/catalog-process/test/api/createTemplateInstanceDescriptor.test.ts @@ -46,7 +46,7 @@ describe("API /templates/eservices/{eServiceId}/descriptors authorization test", const mockDescriptor: Descriptor = { ...getMockDescriptor(), - version: "1", + version: 1, state: descriptorState.published, interface: getMockDocument(), templateVersionRef: { diff --git a/packages/catalog-process/test/api/getEserviceConsumers.test.ts b/packages/catalog-process/test/api/getEserviceConsumers.test.ts index 69416f1795..db94022618 100644 --- a/packages/catalog-process/test/api/getEserviceConsumers.test.ts +++ b/packages/catalog-process/test/api/getEserviceConsumers.test.ts @@ -57,7 +57,7 @@ describe("API /eservices/{eServiceId}/consumers authorization test", () => { const apiResponse = catalogApi.EServiceConsumers.parse({ results: mockResponse.results.map((c) => ({ - descriptorVersion: parseInt(c.descriptorVersion, 10), + descriptorVersion: c.descriptorVersion, descriptorState: descriptorStateToApiEServiceDescriptorState( c.descriptorState ), diff --git a/packages/catalog-process/test/api/upgradeEserviceTemplateInstance.test.ts b/packages/catalog-process/test/api/upgradeEserviceTemplateInstance.test.ts index 072f1c0644..0d04f00ca4 100644 --- a/packages/catalog-process/test/api/upgradeEserviceTemplateInstance.test.ts +++ b/packages/catalog-process/test/api/upgradeEserviceTemplateInstance.test.ts @@ -54,7 +54,7 @@ describe("API /templates/eservices/{eServiceId}/upgrade authorization test", () const descriptor: Descriptor = { ...getMockDescriptor(), templateVersionRef: { id: firstTemplateVersion.id }, - version: "1", + version: 1, state: descriptorState.published, interface: undefined, docs: [], diff --git a/packages/catalog-process/test/integration/approveDelegatedEServiceDescriptor.test.ts b/packages/catalog-process/test/integration/approveDelegatedEServiceDescriptor.test.ts index c11ee2f952..06d6e5aa41 100644 --- a/packages/catalog-process/test/integration/approveDelegatedEServiceDescriptor.test.ts +++ b/packages/catalog-process/test/integration/approveDelegatedEServiceDescriptor.test.ts @@ -97,7 +97,7 @@ describe("publish descriptor", () => { const descriptor1: Descriptor = { ...mockDescriptor, id: generateId(), - version: "1", + version: 1, state: descriptorState.published, publishedAt: new Date(), interface: getMockDocument(), @@ -105,7 +105,7 @@ describe("publish descriptor", () => { const descriptor2: Descriptor = { ...mockDescriptor, id: generateId(), - version: "2", + version: 2, state: descriptorState.waitingForApproval, interface: getMockDocument(), }; @@ -158,7 +158,7 @@ describe("publish descriptor", () => { const descriptor1: Descriptor = { ...mockDescriptor, id: generateId(), - version: "1", + version: 1, state: descriptorState.published, publishedAt: new Date(), interface: getMockDocument(), @@ -166,7 +166,7 @@ describe("publish descriptor", () => { const descriptor2: Descriptor = { ...mockDescriptor, id: generateId(), - version: "2", + version: 2, state: descriptorState.waitingForApproval, interface: getMockDocument(), }; diff --git a/packages/catalog-process/test/integration/cloneDescriptor.test.ts b/packages/catalog-process/test/integration/cloneDescriptor.test.ts index 0967672852..0c4d2aa462 100644 --- a/packages/catalog-process/test/integration/cloneDescriptor.test.ts +++ b/packages/catalog-process/test/integration/cloneDescriptor.test.ts @@ -182,7 +182,7 @@ describe("clone descriptor", () => { const expectedDescriptor: Descriptor = { ...descriptor, id: unsafeBrandId(writtenPayload.eservice!.descriptors[0].id), - version: "1", + version: 1, interface: expectedInterface, createdAt: new Date( Number(writtenPayload.eservice?.descriptors[0].createdAt) diff --git a/packages/catalog-process/test/integration/createDescriptor.test.ts b/packages/catalog-process/test/integration/createDescriptor.test.ts index 30dcf450ca..46ab026b69 100644 --- a/packages/catalog-process/test/integration/createDescriptor.test.ts +++ b/packages/catalog-process/test/integration/createDescriptor.test.ts @@ -103,7 +103,7 @@ describe("create descriptor", async () => { descriptors: [ { ...mockDescriptor, - version: "1", + version: 1, createdAt: new Date( Number(writtenPayload.eservice!.descriptors[0]!.createdAt) ), @@ -206,7 +206,7 @@ describe("create descriptor", async () => { const newDescriptor: Descriptor = { ...mockDescriptor, - version: "2", + version: 2, createdAt: new Date(), id: newDescriptorId, serverUrls: [], @@ -326,7 +326,7 @@ describe("create descriptor", async () => { const newDescriptor: Descriptor = { ...mockDescriptor, - version: "2", + version: 2, createdAt: new Date(), id: newDescriptorId, serverUrls: [], diff --git a/packages/catalog-process/test/integration/createTemplateInstanceDescriptor.test.ts b/packages/catalog-process/test/integration/createTemplateInstanceDescriptor.test.ts index 223efca190..93bc453268 100644 --- a/packages/catalog-process/test/integration/createTemplateInstanceDescriptor.test.ts +++ b/packages/catalog-process/test/integration/createTemplateInstanceDescriptor.test.ts @@ -60,7 +60,7 @@ describe("create descriptor", async () => { const prevDescriptor: Descriptor = { ...getMockDescriptor(), - version: "1", + version: 1, state: descriptorState.published, interface: getMockDocument(), templateVersionRef: { @@ -119,7 +119,7 @@ describe("create descriptor", async () => { audience: descriptorSeed.audience, dailyCallsPerConsumer: descriptorSeed.dailyCallsPerConsumer, dailyCallsTotal: descriptorSeed.dailyCallsTotal, - version: "2", + version: 2, serverUrls: [], interface: undefined, }, @@ -152,7 +152,7 @@ describe("create descriptor", async () => { const prevDescriptor: Descriptor = { ...getMockDescriptor(), - version: "1", + version: 1, state: descriptorState.published, interface: getMockDocument(), templateVersionRef: { @@ -218,7 +218,7 @@ describe("create descriptor", async () => { audience: descriptorSeed.audience, dailyCallsPerConsumer: descriptorSeed.dailyCallsPerConsumer, dailyCallsTotal: descriptorSeed.dailyCallsTotal, - version: "2", + version: 2, serverUrls: [], interface: undefined, }, @@ -253,7 +253,7 @@ describe("create descriptor", async () => { const prevDescriptor: Descriptor = { ...getMockDescriptor(), - version: "1", + version: 1, state, interface: getMockDocument(), templateVersionRef: { @@ -298,7 +298,7 @@ describe("create descriptor", async () => { const prevDescriptor: Descriptor = { ...getMockDescriptor(), - version: "1", + version: 1, state: descriptorState.published, interface: getMockDocument(), templateVersionRef: { @@ -341,7 +341,7 @@ describe("create descriptor", async () => { const prevDescriptor: Descriptor = { ...getMockDescriptor(), - version: "1", + version: 1, state: descriptorState.published, interface: getMockDocument(), templateVersionRef: { @@ -378,7 +378,7 @@ describe("create descriptor", async () => { const prevDescriptor: Descriptor = { ...getMockDescriptor(), - version: "1", + version: 1, state: descriptorState.published, interface: getMockDocument(), templateVersionRef: { @@ -422,7 +422,7 @@ describe("create descriptor", async () => { const prevDescriptor: Descriptor = { ...getMockDescriptor(), - version: "1", + version: 1, state: descriptorState.published, interface: getMockDocument(), templateVersionRef: { diff --git a/packages/catalog-process/test/integration/deleteDraftDescriptor.test.ts b/packages/catalog-process/test/integration/deleteDraftDescriptor.test.ts index 7127376b87..0ac9313ff4 100644 --- a/packages/catalog-process/test/integration/deleteDraftDescriptor.test.ts +++ b/packages/catalog-process/test/integration/deleteDraftDescriptor.test.ts @@ -47,11 +47,11 @@ describe("delete draft descriptor", () => { const publishedDescriptor: Descriptor = { ...getMockDescriptor(descriptorState.published), - version: "1", + version: 1, }; const descriptorToDelete: Descriptor = { ...getMockDescriptor(descriptorState.draft), - version: "2", + version: 2, }; const eservice: EService = { @@ -115,13 +115,13 @@ describe("delete draft descriptor", () => { const publishedDescriptor: Descriptor = { ...getMockDescriptor(descriptorState.published), - version: "1", + version: 1, }; const descriptorToDelete: Descriptor = { ...getMockDescriptor(descriptorState.draft), docs: [document1, document2], interface: interfaceDocument, - version: "2", + version: 2, }; const eservice: EService = { @@ -364,12 +364,12 @@ describe("delete draft descriptor", () => { const publishedDescriptor: Descriptor = { ...getMockDescriptor(descriptorState.published), - version: "1", + version: 1, }; const descriptorToDelete: Descriptor = { ...getMockDescriptor(descriptorState.draft), docs: [getMockDocument(), getMockDocument()], - version: "2", + version: 2, }; const eservice: EService = { ...getMockEService(), @@ -425,11 +425,11 @@ describe("delete draft descriptor", () => { it("should throw operationForbidden if the requester is not the producer", async () => { const publishedDescriptor: Descriptor = { ...getMockDescriptor(descriptorState.published), - version: "1", + version: 1, }; const descriptorToDelete: Descriptor = { ...getMockDescriptor(descriptorState.draft), - version: "2", + version: 2, }; const eservice: EService = { ...getMockEService(), @@ -448,11 +448,11 @@ describe("delete draft descriptor", () => { it("should throw operationForbidden if the requester if the given e-service has been delegated and caller is not the delegate", async () => { const publishedDescriptor: Descriptor = { ...getMockDescriptor(descriptorState.published), - version: "1", + version: 1, }; const descriptorToDelete: Descriptor = { ...getMockDescriptor(descriptorState.draft), - version: "2", + version: 2, }; const eservice: EService = { ...getMockEService(), @@ -504,11 +504,11 @@ describe("delete draft descriptor", () => { const descriptorToDelete: Descriptor = { ...getMockDescriptor(state), interface: mockDocument, - version: "1", + version: 1, }; const publishedDescriptor: Descriptor = { ...getMockDescriptor(descriptorState.published), - version: "2", + version: 2, }; const eservice: EService = { ...getMockEService(), diff --git a/packages/catalog-process/test/integration/deleteEservice.test.ts b/packages/catalog-process/test/integration/deleteEservice.test.ts index 246aa1a96a..fda4f1aab9 100644 --- a/packages/catalog-process/test/integration/deleteEservice.test.ts +++ b/packages/catalog-process/test/integration/deleteEservice.test.ts @@ -251,14 +251,14 @@ describe("delete eservice", () => { it("should throw eserviceNotInDraftState if the eservice has both draft and non-draft descriptors", async () => { const descriptor1: Descriptor = { ...getMockDescriptor(), - version: "1", + version: 1, interface: getMockDocument(), state: descriptorState.published, publishedAt: new Date(), }; const descriptor2: Descriptor = { ...getMockDescriptor(), - version: "2", + version: 2, interface: getMockDocument(), state: descriptorState.draft, }; diff --git a/packages/catalog-process/test/integration/getEserviceById.test.ts b/packages/catalog-process/test/integration/getEserviceById.test.ts index 56e66c66fa..bb1c40b3c6 100644 --- a/packages/catalog-process/test/integration/getEserviceById.test.ts +++ b/packages/catalog-process/test/integration/getEserviceById.test.ts @@ -172,12 +172,12 @@ describe("get eservice by id", () => { async (context) => { const descriptorA: Descriptor = { ...getMockDescriptor(), - version: "1", + version: 1, state, }; const descriptorB: Descriptor = { ...getMockDescriptor(), - version: "2", + version: 2, state: descriptorState.published, interface: mockDocument, publishedAt: new Date(), @@ -203,12 +203,12 @@ describe("get eservice by id", () => { it("if the eservice has both of that state and not (requester is the producer, but user role is 'security')", async () => { const descriptorA: Descriptor = { ...getMockDescriptor(), - version: "1", + version: 1, state, }; const descriptorB: Descriptor = { ...getMockDescriptor(), - version: "2", + version: 2, state: descriptorState.published, interface: mockDocument, publishedAt: new Date(), @@ -232,12 +232,12 @@ describe("get eservice by id", () => { it("if the eservice has both of that state and not (requester is delegate, but user role is 'security')", async () => { const descriptorA: Descriptor = { ...getMockDescriptor(), - version: "1", + version: 1, state, }; const descriptorB: Descriptor = { ...getMockDescriptor(), - version: "2", + version: 2, state: descriptorState.published, interface: mockDocument, publishedAt: new Date(), @@ -275,12 +275,12 @@ describe("get eservice by id", () => { async (context) => { const descriptorA: Descriptor = { ...getMockDescriptor(), - version: "1", + version: 1, state, }; const descriptorB: Descriptor = { ...getMockDescriptor(), - version: "2", + version: 2, state: descriptorState.published, interface: mockDocument, publishedAt: new Date(), @@ -304,12 +304,12 @@ describe("get eservice by id", () => { async (context) => { const descriptorA: Descriptor = { ...getMockDescriptor(), - version: "1", + version: 1, state, }; const descriptorB: Descriptor = { ...getMockDescriptor(), - version: "2", + version: 2, state: descriptorState.published, interface: mockDocument, publishedAt: new Date(), diff --git a/packages/catalog-process/test/integration/getEservices.test.ts b/packages/catalog-process/test/integration/getEservices.test.ts index 0a9152dd7b..496bc4b183 100644 --- a/packages/catalog-process/test/integration/getEservices.test.ts +++ b/packages/catalog-process/test/integration/getEservices.test.ts @@ -1575,7 +1575,7 @@ describe("get eservices", () => { const descriptor9b: Descriptor = { ...mockDescriptor, id: generateId(), - version: "2", + version: 2, state, }; const eservice9: EService = { @@ -1628,7 +1628,7 @@ describe("get eservices", () => { const descriptor9b: Descriptor = { ...mockDescriptor, id: generateId(), - version: "2", + version: 2, state, }; const eservice9: EService = { @@ -1689,7 +1689,7 @@ describe("get eservices", () => { const descriptor9b: Descriptor = { ...mockDescriptor, id: generateId(), - version: "2", + version: 2, state, }; const eservice9: EService = { @@ -1748,7 +1748,7 @@ describe("get eservices", () => { const descriptor9b: Descriptor = { ...mockDescriptor, id: generateId(), - version: "2", + version: 2, state, }; const eservice9: EService = { diff --git a/packages/catalog-process/test/integration/publishDescriptor.test.ts b/packages/catalog-process/test/integration/publishDescriptor.test.ts index b07ea8be8c..93062233f9 100644 --- a/packages/catalog-process/test/integration/publishDescriptor.test.ts +++ b/packages/catalog-process/test/integration/publishDescriptor.test.ts @@ -245,7 +245,7 @@ describe("publish descriptor", () => { const descriptor1: Descriptor = { ...mockDescriptor, id: generateId(), - version: "1", + version: 1, state: descriptorState.published, publishedAt: new Date(), interface: getMockDocument(), @@ -253,7 +253,7 @@ describe("publish descriptor", () => { const descriptor2: Descriptor = { ...mockDescriptor, id: generateId(), - version: "2", + version: 2, state: descriptorState.draft, interface: getMockDocument(), }; @@ -305,7 +305,7 @@ describe("publish descriptor", () => { it("should also deprecate the previously published descriptor if there was a valid agreement", async () => { const descriptor1: Descriptor = { ...mockDescriptor, - version: "1", + version: 1, id: generateId(), state: descriptorState.published, publishedAt: new Date(), @@ -313,7 +313,7 @@ describe("publish descriptor", () => { }; const descriptor2: Descriptor = { ...mockDescriptor, - version: "2", + version: 2, id: generateId(), state: descriptorState.draft, interface: getMockDocument(), diff --git a/packages/catalog-process/test/integration/upgradeEserviceTemplateInstance.test.ts b/packages/catalog-process/test/integration/upgradeEserviceTemplateInstance.test.ts index 47acba5778..f4a0a3aead 100644 --- a/packages/catalog-process/test/integration/upgradeEserviceTemplateInstance.test.ts +++ b/packages/catalog-process/test/integration/upgradeEserviceTemplateInstance.test.ts @@ -104,7 +104,7 @@ describe("upgrade eservice template instance", () => { { ...mockDescriptor, templateVersionRef: { id: firstTemplateVersion.id }, - version: "1", + version: 1, state: descriptorState.published, interface: undefined, docs: [], @@ -176,7 +176,7 @@ describe("upgrade eservice template instance", () => { const expectedDescriptor: Descriptor = { id: unsafeBrandId(writtenPayload.eservice!.descriptors[1].id), - version: "2", + version: 2, interface: undefined, createdAt: new Date( Number(writtenPayload.eservice?.descriptors[1].createdAt) @@ -275,7 +275,7 @@ describe("upgrade eservice template instance", () => { { ...mockDescriptor, templateVersionRef: { id: firstTemplateVersion.id }, - version: "1", + version: 1, state: descriptorState.published, interface: undefined, docs: [], @@ -355,7 +355,7 @@ describe("upgrade eservice template instance", () => { const expectedDescriptor: Descriptor = { id: unsafeBrandId(writtenPayload.eservice!.descriptors[1].id), - version: "2", + version: 2, interface: undefined, createdAt: new Date( Number(writtenPayload.eservice?.descriptors[1].createdAt) @@ -442,7 +442,7 @@ describe("upgrade eservice template instance", () => { { ...mockDescriptor, templateVersionRef: { id: firstTemplateVersion.id }, - version: "1", + version: 1, state: descriptorState.published, interface: undefined, docs: [], @@ -539,7 +539,7 @@ describe("upgrade eservice template instance", () => { { ...getMockDescriptor(), templateVersionRef: { id: firstTemplateVersion.id }, - version: "1", + version: 1, state: descriptorState.published, interface: undefined, docs: [], @@ -547,7 +547,7 @@ describe("upgrade eservice template instance", () => { { ...getMockDescriptor(), templateVersionRef: { id: secondTemplateVersion.id }, - version: "2", + version: 1, state: descriptorState.draft, interface: undefined, docs: [], diff --git a/packages/catalog-readmodel-writer-sql/test/catalogReadmodelWriter.integration.test.ts b/packages/catalog-readmodel-writer-sql/test/catalogReadmodelWriter.integration.test.ts index bbcd5c13ee..9c4b14c370 100644 --- a/packages/catalog-readmodel-writer-sql/test/catalogReadmodelWriter.integration.test.ts +++ b/packages/catalog-readmodel-writer-sql/test/catalogReadmodelWriter.integration.test.ts @@ -1628,7 +1628,7 @@ export const getMockEService = (): EService => ({ export const getMockDescriptor = (): Descriptor => ({ id: generateId(), - version: "1", + version: 1, docs: [], state: descriptorState.draft, audience: [], diff --git a/packages/catalog-readmodel-writer/test/catalogReadmodelWriter.integration.test.ts b/packages/catalog-readmodel-writer/test/catalogReadmodelWriter.integration.test.ts index 4f39db6508..bee1d2d712 100644 --- a/packages/catalog-readmodel-writer/test/catalogReadmodelWriter.integration.test.ts +++ b/packages/catalog-readmodel-writer/test/catalogReadmodelWriter.integration.test.ts @@ -1725,7 +1725,7 @@ export const getMockEService = (): EService => ({ export const getMockDescriptor = (): Descriptor => ({ id: generateId(), - version: "1", + version: 1, docs: [], state: descriptorState.draft, audience: [], diff --git a/packages/commons-test/src/apiMocks.ts b/packages/commons-test/src/apiMocks.ts index 6d5346646b..db4282054d 100644 --- a/packages/commons-test/src/apiMocks.ts +++ b/packages/commons-test/src/apiMocks.ts @@ -221,7 +221,7 @@ export function getMockedApiEserviceDescriptor({ } = {}): catalogApi.EServiceDescriptor { return { id: generateId(), - version: generateMock(z.string()), + version: generateMock(z.number().int()), description: generateMock(z.string().length(10)), audience: generateMock(z.array(z.string())), voucherLifespan: generateMock(z.number().int().min(60).max(86400)), diff --git a/packages/commons-test/src/protobufConvertersToV1/catalogProtobufConverterToV1.ts b/packages/commons-test/src/protobufConvertersToV1/catalogProtobufConverterToV1.ts index d6e5df0ef0..70309a842a 100644 --- a/packages/commons-test/src/protobufConvertersToV1/catalogProtobufConverterToV1.ts +++ b/packages/commons-test/src/protobufConvertersToV1/catalogProtobufConverterToV1.ts @@ -66,6 +66,7 @@ export const toDocumentV1 = (input: Document): EServiceDocumentV1 => ({ export const toDescriptorV1 = (input: Descriptor): EServiceDescriptorV1 => ({ ...input, + version: input.version.toString(), attributes: { certified: input.attributes.certified.map(toEServiceAttributeV1), declared: input.attributes.declared.map(toEServiceAttributeV1), diff --git a/packages/commons-test/src/testUtils.ts b/packages/commons-test/src/testUtils.ts index 13708b60f3..2c186f9c88 100644 --- a/packages/commons-test/src/testUtils.ts +++ b/packages/commons-test/src/testUtils.ts @@ -363,7 +363,7 @@ export const getMockPurposeVersionDocument = (): PurposeVersionDocument => ({ export const getMockDescriptor = (state?: DescriptorState): Descriptor => ({ id: generateId(), - version: "1", + version: 1, docs: [], state: state || descriptorState.draft, audience: ["pagopa.it"], diff --git a/packages/datalake-data-export/test/read-model-queries-service.test.ts b/packages/datalake-data-export/test/read-model-queries-service.test.ts index 89bd50d3ff..6fc3a611df 100644 --- a/packages/datalake-data-export/test/read-model-queries-service.test.ts +++ b/packages/datalake-data-export/test/read-model-queries-service.test.ts @@ -104,14 +104,14 @@ describe("read-model-queries.service", () => { { ...getMockDescriptor(), id: unsafeBrandId("a9c705d9-ecdb-47ff-bcd2-667495b111f2"), - version: "2", + version: 2, state: descriptorState.published, }, { ...getMockDescriptor(), id: unsafeBrandId("a9c705d9-ecdb-47ff-bcd2-667495b111f3"), state: descriptorState.draft, - version: "1", + version: 1, attributes: { certified: [], verified: [], @@ -136,14 +136,14 @@ describe("read-model-queries.service", () => { { ...getMockDescriptor(), id: unsafeBrandId("a9c705d9-ecdb-47ff-bcd2-667495b111f2"), - version: "2", + version: 2, state: descriptorState.published, }, { ...getMockDescriptor(), id: unsafeBrandId("a9c705d9-ecdb-47ff-bcd2-667495b111f3"), state: descriptorState.waitingForApproval, - version: "1", + version: 1, attributes: { certified: [], verified: [], diff --git a/packages/dtd-catalog-exporter/src/models/models.ts b/packages/dtd-catalog-exporter/src/models/models.ts index 35aad3b398..bd72cc7707 100644 --- a/packages/dtd-catalog-exporter/src/models/models.ts +++ b/packages/dtd-catalog-exporter/src/models/models.ts @@ -43,7 +43,7 @@ export type PublicEServiceDoc = z.infer; const PublicEServiceDescriptor = z.object({ id: z.string(), state: z.enum(["PUBLISHED", "SUSPENDED"]), - version: z.string(), + version: z.number().int(), }); export type PublicEServiceDescriptor = z.infer; @@ -73,7 +73,7 @@ export const FlattenedPublicEService = z.object({ attributes: z.string(), activeDescriptorId: z.string(), activeDescriptorState: z.enum(["PUBLISHED", "SUSPENDED"]), - activeDescriptorVersion: z.string(), + activeDescriptorVersion: z.coerce.number().int(), }); export type FlattenedPublicEService = z.infer; diff --git a/packages/eservice-descriptors-archiver/test/eserviceDescriptorsArchiver.integration.test.ts b/packages/eservice-descriptors-archiver/test/eserviceDescriptorsArchiver.integration.test.ts index dd438798e0..8b844b8f50 100644 --- a/packages/eservice-descriptors-archiver/test/eserviceDescriptorsArchiver.integration.test.ts +++ b/packages/eservice-descriptors-archiver/test/eserviceDescriptorsArchiver.integration.test.ts @@ -16,6 +16,7 @@ import { import { RefreshableInteropToken, genericLogger } from "pagopa-interop-commons"; import { CorrelationId, + Descriptor, EServiceId, TenantId, agreementState, @@ -130,15 +131,15 @@ describe("EService Descriptors Archiver", async () => { it("should call archive Descriptor when all Agreements are Archived, the Descriptor is suspended, and a newer Descriptor exists", async () => { const producerId: TenantId = generateId(); - const descriptor = { + const descriptor: Descriptor = { ...getMockDescriptorPublished(), state: descriptorState.suspended, - version: "1", + version: 1, }; - const newerDescriptor = { + const newerDescriptor: Descriptor = { ...getMockDescriptorPublished(), - version: "2", + version: 2, }; const eservice = { @@ -322,10 +323,10 @@ describe("EService Descriptors Archiver", async () => { it("should not call archive Descriptor when the Descriptor is suspended but no newer Descriptor exists", async () => { const producerId: TenantId = generateId(); - const descriptor = { + const descriptor: Descriptor = { ...getMockDescriptorPublished(), state: descriptorState.suspended, - version: "1", + version: 1, }; const eservice = { diff --git a/packages/m2m-gateway/src/api/eserviceApiConverter.ts b/packages/m2m-gateway/src/api/eserviceApiConverter.ts index fbf620df1d..43cc83a503 100644 --- a/packages/m2m-gateway/src/api/eserviceApiConverter.ts +++ b/packages/m2m-gateway/src/api/eserviceApiConverter.ts @@ -41,7 +41,7 @@ export function toM2MGatewayApiEServiceDescriptor( ): m2mGatewayApi.EServiceDescriptor { return { id: descriptor.id, - version: descriptor.version, + version: descriptor.version.toString(), description: descriptor.description, audience: descriptor.audience, voucherLifespan: descriptor.voucherLifespan, diff --git a/packages/m2m-gateway/test/integration/eservices/getEserviceDescriptor.test.ts b/packages/m2m-gateway/test/integration/eservices/getEserviceDescriptor.test.ts index 7b8e70d5ad..db9cd54009 100644 --- a/packages/m2m-gateway/test/integration/eservices/getEserviceDescriptor.test.ts +++ b/packages/m2m-gateway/test/integration/eservices/getEserviceDescriptor.test.ts @@ -40,7 +40,7 @@ describe("getEserviceDescriptor", () => { it("Should succeed and perform API clients calls", async () => { const m2mEserviceDescriptorResponse: m2mGatewayApi.EServiceDescriptor = { id: mockCatalogProcessResponseDescriptor.id, - version: mockCatalogProcessResponseDescriptor.version, + version: mockCatalogProcessResponseDescriptor.version.toString(), description: mockCatalogProcessResponseDescriptor.description, audience: mockCatalogProcessResponseDescriptor.audience, voucherLifespan: mockCatalogProcessResponseDescriptor.voucherLifespan, diff --git a/packages/m2m-gateway/test/integration/eservices/getEserviceDescriptors.test.ts b/packages/m2m-gateway/test/integration/eservices/getEserviceDescriptors.test.ts index 6a3301aa81..859bf552ec 100644 --- a/packages/m2m-gateway/test/integration/eservices/getEserviceDescriptors.test.ts +++ b/packages/m2m-gateway/test/integration/eservices/getEserviceDescriptors.test.ts @@ -51,7 +51,7 @@ describe("getEserviceDescriptors", () => { descriptor: catalogApi.EServiceDescriptor ): m2mGatewayApi.EServiceDescriptor => ({ id: descriptor.id, - version: descriptor.version, + version: descriptor.version.toString(), description: descriptor.description, audience: descriptor.audience, voucherLifespan: descriptor.voucherLifespan, diff --git a/packages/models/src/eservice/eservice.ts b/packages/models/src/eservice/eservice.ts index 18f9cfba3f..1630d03bdb 100644 --- a/packages/models/src/eservice/eservice.ts +++ b/packages/models/src/eservice/eservice.ts @@ -95,7 +95,7 @@ export type EServiceTemplateVersionRef = z.infer< export const Descriptor = z.object({ id: DescriptorId, - version: z.string(), + version: z.number().int(), description: z.string().optional(), interface: Document.optional(), docs: z.array(Document), diff --git a/packages/models/src/eservice/protobufConverterFromV1.ts b/packages/models/src/eservice/protobufConverterFromV1.ts index 72887df83b..6c9e27a67a 100644 --- a/packages/models/src/eservice/protobufConverterFromV1.ts +++ b/packages/models/src/eservice/protobufConverterFromV1.ts @@ -153,6 +153,7 @@ export const fromDescriptorV1 = (input: EServiceDescriptorV1): Descriptor => { suspendedAt: bigIntToDate(input.suspendedAt), deprecatedAt: bigIntToDate(input.deprecatedAt), archivedAt: bigIntToDate(input.archivedAt), + version: Number(input.version), }; }; diff --git a/packages/models/src/eservice/protobufConverterFromV2.ts b/packages/models/src/eservice/protobufConverterFromV2.ts index cbdf8d7993..08a1197f8d 100644 --- a/packages/models/src/eservice/protobufConverterFromV2.ts +++ b/packages/models/src/eservice/protobufConverterFromV2.ts @@ -115,7 +115,7 @@ export const fromEServiceTemplateVersionRefV2 = ( export const fromDescriptorV2 = (input: EServiceDescriptorV2): Descriptor => ({ ...input, id: unsafeBrandId(input.id), - version: input.version.toString(), + version: Number(input.version), attributes: input.attributes != null ? { diff --git a/packages/notification-email-sender/test/sendEserviceDescriptorPublishedEmail.integration.test.ts b/packages/notification-email-sender/test/sendEserviceDescriptorPublishedEmail.integration.test.ts index 581ad7c4a3..0bb9b5ea6e 100644 --- a/packages/notification-email-sender/test/sendEserviceDescriptorPublishedEmail.integration.test.ts +++ b/packages/notification-email-sender/test/sendEserviceDescriptorPublishedEmail.integration.test.ts @@ -60,7 +60,7 @@ describe("sendEserviceDescriptorPublishedEmail", () => { const descriptor: Descriptor = { ...getMockDescriptor(), state: "Published", - version: "1", + version: 1, }; const eservice: EService = { @@ -214,7 +214,7 @@ describe("sendEserviceDescriptorPublishedEmail", () => { const descriptor: Descriptor = { ...getMockDescriptor(), state: "Published", - version: "1", + version: 1, }; const eservice: EService = { diff --git a/packages/notifier-seeder/src/models/catalog/catalogItemEventNotificationMappers.ts b/packages/notifier-seeder/src/models/catalog/catalogItemEventNotificationMappers.ts index 894780e623..4c1fa44095 100644 --- a/packages/notifier-seeder/src/models/catalog/catalogItemEventNotificationMappers.ts +++ b/packages/notifier-seeder/src/models/catalog/catalogItemEventNotificationMappers.ts @@ -97,7 +97,7 @@ export const toCatalogDescriptorV1 = ( ): CatalogDescriptorV1Notification[] => descriptors.map((d) => ({ id: d.id, - version: d.version, + version: d.version.toString(), description: d.description, docs: d.docs.map(toCatalogDocumentV1), state: toCatalogDescriptorStateV1(d.state), diff --git a/packages/notifier-seeder/test/notificationMessage.integration.test.ts b/packages/notifier-seeder/test/notificationMessage.integration.test.ts index 1c82100303..e72539d0cb 100644 --- a/packages/notifier-seeder/test/notificationMessage.integration.test.ts +++ b/packages/notifier-seeder/test/notificationMessage.integration.test.ts @@ -44,7 +44,7 @@ import { queueWriter } from "./utils.js"; const getDescriptorMock = (descriptorId: string): EServiceDescriptorV2 => toDescriptorV2({ id: unsafeBrandId(descriptorId), - version: "1", + version: 1, description: "Questo รจ un e-service di test", docs: [], state: descriptorState.suspended, diff --git a/packages/purpose-process/test/integration/createPurpose.test.ts b/packages/purpose-process/test/integration/createPurpose.test.ts index f3e66a8714..430a65b4c4 100644 --- a/packages/purpose-process/test/integration/createPurpose.test.ts +++ b/packages/purpose-process/test/integration/createPurpose.test.ts @@ -65,7 +65,6 @@ describe("createPurpose", () => { const descriptor1: Descriptor = { ...getMockDescriptor(), state: descriptorState.published, - version: "", }; const eService1: EService = { diff --git a/packages/readmodel-models/src/drizzle/schema.ts b/packages/readmodel-models/src/drizzle/schema.ts index d2a2697681..5db063fbfb 100644 --- a/packages/readmodel-models/src/drizzle/schema.ts +++ b/packages/readmodel-models/src/drizzle/schema.ts @@ -381,7 +381,7 @@ export const eserviceDescriptorInReadmodelCatalog = readmodelCatalog.table( id: uuid().primaryKey().notNull(), eserviceId: uuid("eservice_id").notNull(), metadataVersion: integer("metadata_version").notNull(), - version: varchar().notNull(), + version: integer("version").notNull(), description: varchar(), state: varchar().notNull(), audience: varchar().array().notNull(),