Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PIN-5776 descriptor state waiting for approval changes and analysis #1325

Open
wants to merge 15 commits into
base: develop
Choose a base branch
from

Conversation

Viktor-K
Copy link
Collaborator

@Viktor-K Viktor-K commented Dec 19, 2024

Closes PIN-5776

Descrizione

Con il rilascio della feature capofila è stato aggiunto il nuovo stato WAITING_FOR_APPROVAL per i descriptor degli eservice. Durante lo sviluppo di questa PR sono stati analizzati gli usi e logiche legate agli stati DRAFT e WAITING_FOR_APPROVAL dei descriptor di un eservice. In alcuni punti sono state applicate modifiche per permettere alle logiche di eseguire le operazioni anche quando lo stato del descriptor è quello di WAITING_FOR_APPROVAL (WFA).
In sintesi si considera lo stato WFA come un DRAFT e il descrittore è considerato azionabile e valido alle operazioni se si trova in uno degli altri stati : SUSPENDED, ARCHIVED, DEPRECATED, PUBLISHED.


🚀 API Gateway

Tutte le seguenti API arricchiscono le risposte con l'ultimo descrittore valido di un dato eservice, definendo lo stato la versione e serverURLS, con le modifiche di questa PR viene ritenuto valido un descrittore che non si trova ne nello stato di DRAFT ne in WFA. Di seguito le API affette da questa modifica:

Tenant API

  • GET /organizations/origin/:origin/externalId/:externalId/eservices : restituisce gli eservice associati a un’organizzazione, con i rispettivi descrittori validi.

Catalog API

  • GET /eservices/:eserviceId recupera le informazioni di un eservice specifico
  • GET /eservices/:eserviceId/descriptors ritorna la lista dei descriptor, In questo metodo viene applicato il filtro isValidDescriptorState che elimina i descrittori non validi.
  • GET /eservices/:eserviceId/descriptors/:descriptorId utilizza l’asserzione assertNotValidDescriptor per verificare che il descrittore sia valido.



🍽️ Backend for Frontend

Converter

Il converter toBffCatalogDescriptorEService usato per la creazione del payload di risposta, filtra dalla risposta i descrittori non validi. Di seguito le API affette da questa modifica:

  • GET /catalog/eservices/:eserviceId/descriptor/:descriptorId usa il metodo getCatalogEServiceDescriptor, che applica il filtro sopra descritto.

  • GET /export/eservices/:eserviceId/descriptors/:descriptorId usa il metodo verifyExportEligibility che ora verifica che un descrittore non sia valido, oltre a controllare altre condizioni di idoneità.

Validatori

Sono state modificate le logiche nei validatori del BFF per identificare i descrittori non validi, ossia quelli in stato DRAFT o WFA.

Producer Eservice

  • GET /producers/eservices utilizza il metodo getProducerEServices, che arricchisce i dati con la funzione enhanceProducerEService. Quest’ultima include un campo draftDescriptor, che contiene descrittori in stato DRAFT e WFA.

ℹ️ funzione che costruisce un ProducerDescriptorCompact calcola il valore di requireCorrections solo in relazione allo stato DRAFT, ignorando lo stato WFA.


Visibilità descriptor esportati

La rotte che prevedono l'export degli eservice dopo le modifiche esporteranno solo descriptor che non sono ne in stato DRAFT ne WFA, rotta di riferimento

  • GET /export/eservices/:eserviceId/descriptors/:descriptorId

Converter from Event V1

Nel converter protobufConverterFromV1 si utilizza solo lo stato DRAFT per determinare se aggiungere il campo publishedAt. Non verrà aggiunta logica per gestire lo stato WFA, in quanto gli eventi V1 non sono più gestiti.

Converter from Event V2

Gestiscono il nuovo campo è gestito correttamente



⚙️ Catalog Process

Tutte le seguenti operazioni di catalog process richiedono che l’eservice sia nello stato DRAFT per essere eseguite:
• updateEService
• deleteEService
• createRiskAnalysis
• updateRiskAnalysis
• deleteRiskAnalysis

ℹ️ Non viene tenuto conto dei descriptor che sono in stato WFA.


Descriptor visibility API payload response

Le api che restituiscono dai di un eservice utilizzano la funzione applyVisibilityToEService che con le nuove modifiche considera visibili tutti i descrittori che non sono né in stato DRAFT né in stato WFA.
Le seguenti rotte ora filtrano i descriptor restituendo solo quelli "validi":

  • GET /eservices (listing eservice)
  • GET /eservices/:eServiceId (retrieve eservice by id)
  • GET /eservices/:eServiceId/descriptors/:descriptorId/documents/:documentId, non ritorna dei descriptor ma sfrutta gli stesi criteri per determinare che tra i descrittori validi non ci sia quello contenuto nella richiesta.

Upload Document

Attualmente, è possibile caricare un documento solo se lo stato del descrittore è uno dei seguenti: DRAFT, PUBLISHED, SUSPENDED, DEPRECATED.

ℹ️ Non è previsto che sia possibile caricare un documento per descrittori in stato WFA a prescinderese esiste una delega attiva o se il chiamante è il delegato


Delete Document

Se l’operazione riguarda la cancellazione di un documento, viene tenuto conto anche dello stato WFA del descrittore.

Delete Draft Descriptor & Update Draft Descriptor

Queste operazioni possono avvenire solo se il descrittore è nello stato DRAFT. Lo stato WFA non è considerato.

Publish Descriptor

La pubblicazione di un descrittore può avvenire solo se il descrittore è nello stato DRAFT. Lo stato WFA non è considerato.

Clone Descriptor

Il clone di un descrittore avviene sempre se il descrittore è nello stato DRAFT. Lo stato WFA non è considerato.

Update Eservice Description

L’operazione di aggiornamento della descrizione di un eservice (updateEServiceDescription) non considera lo stato WFA.

Test

✅ test updated

@Viktor-K Viktor-K changed the title PIN-5776 descriptor state waiting approval PIN-5776 descriptor state waiting for approval changes and analysis Dec 20, 2024
@Viktor-K Viktor-K marked this pull request as ready for review December 20, 2024 11:29
@Viktor-K Viktor-K requested a review from sandrotaje December 20, 2024 11:29
Copy link
Collaborator

@ecamellini ecamellini left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left some minor naming comments plus a proposal on pattern matching for all the state checks!

packages/api-gateway/src/api/catalogApiConverter.ts Outdated Show resolved Hide resolved
packages/api-gateway/src/services/validators.ts Outdated Show resolved Hide resolved
packages/api-gateway/src/services/validators.ts Outdated Show resolved Hide resolved
packages/api-gateway/src/services/catalogService.ts Outdated Show resolved Hide resolved
packages/catalog-process/src/services/validators.ts Outdated Show resolved Hide resolved
packages/backend-for-frontend/src/services/validators.ts Outdated Show resolved Hide resolved
packages/catalog-process/src/services/validators.ts Outdated Show resolved Hide resolved
packages/catalog-process/src/services/validators.ts Outdated Show resolved Hide resolved
Copy link
Contributor

@AsterITA AsterITA left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work, I agree with @ecamellini points

@Viktor-K Viktor-K requested a review from ecamellini January 21, 2025 14:02
@Viktor-K Viktor-K requested a review from AsterITA January 21, 2025 16:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants