generated from pagopa/pagopa-functions-template
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[SELC-5547] feat: refactoring onboarding's logic
- Loading branch information
1 parent
82950d9
commit ff64394
Showing
28 changed files
with
1,183 additions
and
889 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
18 changes: 18 additions & 0 deletions
18
apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/IPAEntity.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package it.pagopa.selfcare.onboarding.entity; | ||
|
||
import lombok.AllArgsConstructor; | ||
import lombok.Builder; | ||
import lombok.Data; | ||
import org.openapi.quarkus.party_registry_proxy_json.model.AOOResource; | ||
import org.openapi.quarkus.party_registry_proxy_json.model.InstitutionResource; | ||
import org.openapi.quarkus.party_registry_proxy_json.model.UOResource; | ||
|
||
@Data | ||
@Builder | ||
@AllArgsConstructor | ||
public class IPAEntity { | ||
|
||
private InstitutionResource institutionResource; | ||
private UOResource uoResource; | ||
private AOOResource aooResource; | ||
} |
36 changes: 36 additions & 0 deletions
36
...g-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/BaseRegistryManager.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
package it.pagopa.selfcare.onboarding.entity.registry; | ||
|
||
|
||
import it.pagopa.selfcare.onboarding.entity.Onboarding; | ||
|
||
public abstract class BaseRegistryManager<T> implements RegistryManager<T> { | ||
|
||
protected static final String ADDITIONAL_INFORMATION_REQUIRED = "Additional Information is required when institutionType is GSP and productId is pagopa"; | ||
protected static final String OTHER_NOTE_REQUIRED = "Other Note is required when other boolean are false"; | ||
protected static final String BILLING_OR_RECIPIENT_CODE_REQUIRED = "Billing and/or recipient code are required"; | ||
protected static final String ONBOARDING_NOT_ALLOWED_ERROR_MESSAGE_NOT_DELEGABLE = "Institution with external id '%s' is not allowed to onboard '%s' product because it is not delegable"; | ||
protected static final String PARENT_TAX_CODE_IS_INVALID = "The tax code of the parent entity of the request does not match the tax code of the parent entity retrieved by IPA"; | ||
protected static final String TAX_CODE_INVOICING_IS_INVALID = "The tax code invoicing of the request does not match any tax code of institutions' hierarchy"; | ||
protected static final int DURATION_TIMEOUT = 5; | ||
protected static final int MAX_NUMBER_ATTEMPTS = 2; | ||
|
||
protected Onboarding onboarding; | ||
protected T registryResource; | ||
|
||
protected BaseRegistryManager(Onboarding onboarding) { | ||
this.onboarding = onboarding; | ||
} | ||
|
||
public void setOnboarding(Onboarding onboarding) { | ||
this.onboarding = onboarding; | ||
} | ||
|
||
public Onboarding getOnboarding() { | ||
return onboarding; | ||
} | ||
|
||
public RegistryManager<T> setResource(T registryResource) { | ||
this.registryResource = registryResource; | ||
return this; | ||
} | ||
} |
21 changes: 21 additions & 0 deletions
21
...rding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManager.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package it.pagopa.selfcare.onboarding.entity.registry; | ||
|
||
import io.smallrye.mutiny.Uni; | ||
import it.pagopa.selfcare.onboarding.entity.Onboarding; | ||
import it.pagopa.selfcare.product.entity.Product; | ||
|
||
public interface RegistryManager<T> { | ||
|
||
T retrieveInstitution(); | ||
|
||
// Method used for additional checks | ||
Uni<Onboarding> customValidation(Product product); | ||
|
||
// Method used to check correspondence between registry and onboarding data | ||
Uni<Boolean> isValid(); | ||
|
||
Onboarding getOnboarding(); | ||
|
||
RegistryManager<T> setResource(T registryResource); | ||
} | ||
|
26 changes: 26 additions & 0 deletions
26
...ng-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerADE.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
package it.pagopa.selfcare.onboarding.entity.registry; | ||
|
||
import io.smallrye.mutiny.Uni; | ||
import it.pagopa.selfcare.onboarding.entity.Onboarding; | ||
import it.pagopa.selfcare.onboarding.entity.registry.client.ClientRegistryADE; | ||
import it.pagopa.selfcare.product.entity.Product; | ||
import org.openapi.quarkus.party_registry_proxy_json.api.NationalRegistriesApi; | ||
import org.openapi.quarkus.user_registry_json.api.UserApi; | ||
|
||
public class RegistryManagerADE extends ClientRegistryADE { | ||
|
||
public RegistryManagerADE(Onboarding onboarding, NationalRegistriesApi nationalRegistriesApi, UserApi userApi) { | ||
super(onboarding, nationalRegistriesApi, userApi); | ||
} | ||
|
||
@Override | ||
public Uni<Onboarding> customValidation(Product product) { | ||
return Uni.createFrom().item(onboarding); | ||
} | ||
|
||
@Override | ||
public Uni<Boolean> isValid() { | ||
return Uni.createFrom().item(true); | ||
} | ||
|
||
} |
35 changes: 35 additions & 0 deletions
35
...g-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerANAC.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
package it.pagopa.selfcare.onboarding.entity.registry; | ||
|
||
import io.smallrye.mutiny.Uni; | ||
import it.pagopa.selfcare.onboarding.entity.registry.client.ClientRegistryANAC; | ||
import it.pagopa.selfcare.onboarding.entity.Onboarding; | ||
import it.pagopa.selfcare.onboarding.exception.InvalidRequestException; | ||
import it.pagopa.selfcare.product.entity.Product; | ||
import org.openapi.quarkus.party_registry_proxy_json.api.StationsApi; | ||
import org.openapi.quarkus.party_registry_proxy_json.model.StationResource; | ||
|
||
public class RegistryManagerANAC extends ClientRegistryANAC { | ||
|
||
public RegistryManagerANAC(Onboarding onboarding, StationsApi stationsApi) { | ||
super(onboarding, stationsApi); | ||
} | ||
|
||
@Override | ||
public Uni<Onboarding> customValidation(Product product) { | ||
return Uni.createFrom().item(onboarding); | ||
} | ||
|
||
@Override | ||
public Uni<Boolean> isValid() { | ||
if (!originANAC(onboarding, registryResource)) { | ||
return Uni.createFrom().failure(new InvalidRequestException("Field digitalAddress or description are not valid")); | ||
} | ||
return Uni.createFrom().item(true); | ||
} | ||
|
||
private boolean originANAC(Onboarding onboarding, StationResource stationResource) { | ||
return onboarding.getInstitution().getDigitalAddress().equals(stationResource.getDigitalAddress()) && | ||
onboarding.getInstitution().getDescription().equals(stationResource.getDescription()); | ||
} | ||
|
||
} |
47 changes: 47 additions & 0 deletions
47
...ng-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerIPA.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package it.pagopa.selfcare.onboarding.entity.registry; | ||
|
||
import io.smallrye.mutiny.Uni; | ||
import it.pagopa.selfcare.onboarding.entity.IPAEntity; | ||
import it.pagopa.selfcare.onboarding.entity.Onboarding; | ||
import it.pagopa.selfcare.onboarding.exception.InvalidRequestException; | ||
import it.pagopa.selfcare.onboarding.exception.ResourceNotFoundException; | ||
import jakarta.ws.rs.WebApplicationException; | ||
import org.openapi.quarkus.party_registry_proxy_json.api.InstitutionApi; | ||
import org.openapi.quarkus.party_registry_proxy_json.api.UoApi; | ||
import org.openapi.quarkus.party_registry_proxy_json.model.InstitutionResource; | ||
|
||
import java.time.Duration; | ||
import java.time.temporal.ChronoUnit; | ||
|
||
public class RegistryManagerIPA extends RegistryManagerIPAUo { | ||
|
||
public RegistryManagerIPA(Onboarding onboarding, UoApi uoApi, InstitutionApi institutionApi) { | ||
super(onboarding, uoApi, institutionApi); | ||
} | ||
|
||
@Override | ||
public IPAEntity retrieveInstitution() { | ||
super.originIdEC = onboarding.getInstitution().getOriginId(); | ||
InstitutionResource institutionResource = super.institutionApi.findInstitutionUsingGET(onboarding.getInstitution().getTaxCode(), null, null) | ||
.onFailure().retry().atMost(MAX_NUMBER_ATTEMPTS) | ||
.onFailure(WebApplicationException.class).recoverWithUni(ex -> ((WebApplicationException) ex).getResponse().getStatus() == 404 | ||
? Uni.createFrom().failure(new ResourceNotFoundException(String.format("Institution with taxCode %s not found", onboarding.getInstitution().getTaxCode()))) | ||
: Uni.createFrom().failure(ex)) | ||
.await().atMost(Duration.of(DURATION_TIMEOUT, ChronoUnit.SECONDS)); | ||
return IPAEntity.builder().institutionResource(institutionResource).build(); | ||
} | ||
|
||
@Override | ||
public Uni<Boolean> isValid() { | ||
if (!originIPA(onboarding, registryResource.getInstitutionResource())) { | ||
return Uni.createFrom().failure(new InvalidRequestException("Field digitalAddress or description are not valid")); | ||
} | ||
return Uni.createFrom().item(true); | ||
} | ||
|
||
private boolean originIPA(Onboarding onboarding, InstitutionResource institutionResource) { | ||
return onboarding.getInstitution().getDigitalAddress().equals(institutionResource.getDigitalAddress()) && | ||
onboarding.getInstitution().getDescription().equals(institutionResource.getDescription()); | ||
} | ||
|
||
} |
47 changes: 47 additions & 0 deletions
47
...ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerIPAAoo.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package it.pagopa.selfcare.onboarding.entity.registry; | ||
|
||
import io.smallrye.mutiny.Uni; | ||
import it.pagopa.selfcare.onboarding.entity.IPAEntity; | ||
import it.pagopa.selfcare.onboarding.entity.Onboarding; | ||
import it.pagopa.selfcare.onboarding.exception.ResourceNotFoundException; | ||
import jakarta.ws.rs.WebApplicationException; | ||
import org.openapi.quarkus.party_registry_proxy_json.api.AooApi; | ||
import org.openapi.quarkus.party_registry_proxy_json.api.UoApi; | ||
import org.openapi.quarkus.party_registry_proxy_json.model.AOOResource; | ||
|
||
import java.time.Duration; | ||
import java.time.temporal.ChronoUnit; | ||
|
||
import static it.pagopa.selfcare.onboarding.constants.CustomError.AOO_NOT_FOUND; | ||
|
||
public class RegistryManagerIPAAoo extends RegistryManagerIPAUo { | ||
|
||
public RegistryManagerIPAAoo(Onboarding onboarding, UoApi uoApi, AooApi aooApi) { | ||
super(onboarding, uoApi, aooApi); | ||
} | ||
|
||
@Override | ||
public IPAEntity retrieveInstitution() { | ||
AOOResource aooResource = super.aooClient.findByUnicodeUsingGET(onboarding.getInstitution().getSubunitCode(), null) | ||
.onFailure().retry().atMost(MAX_NUMBER_ATTEMPTS) | ||
.onFailure(WebApplicationException.class).recoverWithUni(ex -> ((WebApplicationException) ex).getResponse().getStatus() == 404 | ||
? Uni.createFrom().failure(new ResourceNotFoundException(String.format(AOO_NOT_FOUND.getMessage(), onboarding.getInstitution().getSubunitCode()))) | ||
: Uni.createFrom().failure(ex)) | ||
.onItem().invoke(this::enrichOnboardingData) | ||
.await().atMost(Duration.of(BaseRegistryManager.DURATION_TIMEOUT, ChronoUnit.SECONDS)); | ||
super.originIdEC = aooResource.getCodiceIpa(); | ||
super.resourceTaxCode = aooResource.getCodiceFiscaleEnte(); | ||
return IPAEntity.builder().aooResource(aooResource).build(); | ||
} | ||
|
||
private void enrichOnboardingData(AOOResource aooResource) { | ||
onboarding.getInstitution().setParentDescription(aooResource.getDenominazioneEnte()); | ||
onboarding.getInstitution().setIstatCode(aooResource.getCodiceComuneISTAT()); | ||
} | ||
|
||
@Override | ||
public Uni<Boolean> isValid() { | ||
return Uni.createFrom().item(true); | ||
} | ||
|
||
} |
33 changes: 33 additions & 0 deletions
33
...ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerIPAGps.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
package it.pagopa.selfcare.onboarding.entity.registry; | ||
|
||
import io.smallrye.mutiny.Uni; | ||
import it.pagopa.selfcare.onboarding.entity.Onboarding; | ||
import it.pagopa.selfcare.onboarding.exception.InvalidRequestException; | ||
import it.pagopa.selfcare.product.entity.Product; | ||
import org.openapi.quarkus.party_registry_proxy_json.api.UoApi; | ||
|
||
import java.util.Objects; | ||
|
||
import static it.pagopa.selfcare.onboarding.common.ProductId.PROD_PAGOPA; | ||
|
||
public class RegistryManagerIPAGps extends RegistryManagerIPAUo { | ||
|
||
public RegistryManagerIPAGps(Onboarding onboarding, UoApi uoApi) { | ||
super(onboarding, uoApi); | ||
} | ||
|
||
@Override | ||
public Uni<Onboarding> customValidation(Product product) { | ||
if (PROD_PAGOPA.getValue().equals(onboarding.getProductId()) && Objects.isNull(onboarding.getAdditionalInformations())) { | ||
return Uni.createFrom().failure(new InvalidRequestException(BaseRegistryManager.ADDITIONAL_INFORMATION_REQUIRED)); | ||
} else if (PROD_PAGOPA.getValue().equals(onboarding.getProductId()) && | ||
!onboarding.getAdditionalInformations().isIpa() && | ||
!onboarding.getAdditionalInformations().isBelongRegulatedMarket() && | ||
!onboarding.getAdditionalInformations().isEstablishedByRegulatoryProvision() && | ||
!onboarding.getAdditionalInformations().isAgentOfPublicService() && | ||
Objects.isNull(onboarding.getAdditionalInformations().getOtherNote())) { | ||
return Uni.createFrom().failure(new InvalidRequestException(BaseRegistryManager.OTHER_NOTE_REQUIRED)); | ||
} | ||
return Uni.createFrom().item(onboarding); | ||
} | ||
} |
Oops, something went wrong.