Skip to content

Commit e0c4d1b

Browse files
[SELC-8074] feat: added check to atecoCodes (#946)
1 parent 4aa07be commit e0c4d1b

File tree

16 files changed

+590
-172
lines changed

16 files changed

+590
-172
lines changed

apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerPDNDInfocamere.java

Lines changed: 61 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,58 @@
1313
import org.openapi.quarkus.user_registry_json.model.SaveUserDto;
1414
import org.openapi.quarkus.user_registry_json.model.UserSearchDto;
1515

16+
import java.util.List;
17+
import java.util.Objects;
18+
import java.util.Optional;
19+
20+
import static it.pagopa.selfcare.onboarding.common.ProductId.PROD_IDPAY_MERCHANT;
21+
1622
public class RegistryManagerPDNDInfocamere extends ClientRegistryPDNDInfocamere {
1723

1824
public static final String USERS_FIELD_TAXCODE = "fiscalCode";
1925

2026
private final UserApi userRegistryApi;
27+
private final Optional<String> allowedAtecoCodes;
2128

22-
public RegistryManagerPDNDInfocamere(Onboarding onboarding, InfocamerePdndApi infocamerePdndApi, UserApi userRegistryApi) {
29+
public RegistryManagerPDNDInfocamere(Onboarding onboarding, InfocamerePdndApi infocamerePdndApi, UserApi userRegistryApi,
30+
Optional<String> allowedAtecoCodes) {
2331
super(onboarding, infocamerePdndApi);
2432
this.userRegistryApi = userRegistryApi;
33+
this.allowedAtecoCodes = allowedAtecoCodes;
2534
}
2635

2736
@Override
2837
public Uni<Onboarding> customValidation(Product product) {
29-
if (InstitutionType.PRV_PF.equals(onboarding.getInstitution().getInstitutionType())) {
30-
final String fiscalCode = onboarding.getInstitution().getTaxCode();
31-
final UserSearchDto searchDto = new UserSearchDto().fiscalCode(fiscalCode);
32-
return userRegistryApi.searchUsingPOST(USERS_FIELD_TAXCODE, searchDto)
33-
.onItem().transform(userResource ->
34-
updateOnboardingWithUserId(onboarding, userResource.getId().toString())
35-
)
36-
.onFailure(WebApplicationException.class)
37-
.recoverWithUni(ex ->
38-
handleSearchFailure((WebApplicationException) ex, onboarding, fiscalCode)
39-
);
38+
if (isIdPayMerchantProduct(product)) {
39+
return validateAtecoCodes();
40+
}
41+
if (isPrivatePersonInstitution()) {
42+
return manageTaxCode();
4043
}
4144
return Uni.createFrom().item(onboarding);
4245
}
4346

47+
private boolean isIdPayMerchantProduct(Product product) {
48+
return Objects.nonNull(product) && PROD_IDPAY_MERCHANT.getValue().equals(product.getId());
49+
}
50+
51+
private boolean isPrivatePersonInstitution() {
52+
return InstitutionType.PRV_PF.equals(onboarding.getInstitution().getInstitutionType());
53+
}
54+
55+
private Uni<Onboarding> manageTaxCode() {
56+
final String fiscalCode = onboarding.getInstitution().getTaxCode();
57+
final UserSearchDto searchDto = new UserSearchDto().fiscalCode(fiscalCode);
58+
return userRegistryApi.searchUsingPOST(USERS_FIELD_TAXCODE, searchDto)
59+
.onItem().transform(userResource ->
60+
updateOnboardingWithUserId(onboarding, userResource.getId().toString())
61+
)
62+
.onFailure(WebApplicationException.class)
63+
.recoverWithUni(ex ->
64+
handleSearchFailure((WebApplicationException) ex, onboarding, fiscalCode)
65+
);
66+
}
67+
4468
/**
4569
* Gestisce il fallimento della ricerca utente. Se l'errore è un 404 (Not Found),
4670
* procede con la creazione di un nuovo utente. Altrimenti, propaga l'errore.
@@ -75,6 +99,31 @@ private Onboarding updateOnboardingWithUserId(Onboarding onboarding, String user
7599
return onboarding;
76100
}
77101

102+
/**
103+
* Valida che almeno uno dei codici ATECO dell'istituzione sia presente nella lista di codici ATECO consentiti.
104+
* @return Uni<Void> che fallisce con InvalidRequestException se la validazione fallisce
105+
*/
106+
private Uni<Onboarding> validateAtecoCodes() {
107+
List<String> institutionAtecoCodes = onboarding.getInstitution().getAtecoCodes();
108+
109+
if (Objects.isNull(institutionAtecoCodes) || institutionAtecoCodes.isEmpty()) {
110+
return Uni.createFrom().failure(new InvalidRequestException("Institution must have at least one ATECO code"));
111+
}
112+
113+
List<String> allowedCodes = allowedAtecoCodes
114+
.filter(codes -> !codes.trim().isEmpty())
115+
.map(codes -> List.of(codes.split(",")))
116+
.orElseThrow(() -> new InvalidRequestException("Allowed ATECO codes are not configured"));
117+
boolean hasValidAteco = institutionAtecoCodes.stream()
118+
.anyMatch(ateco -> allowedCodes.contains(ateco.trim()));
119+
120+
if (!hasValidAteco) {
121+
return Uni.createFrom().failure(new InvalidRequestException("Institution ATECO codes are not allowed for this product"));
122+
}
123+
124+
return Uni.createFrom().item(onboarding);
125+
}
126+
78127
@Override
79128
public Uni<Boolean> isValid() {
80129
/*if (!originPDNDInfocamere(onboarding, registryResource)) {

apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryResourceFactory.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@
88
import it.pagopa.selfcare.onboarding.entity.Onboarding;
99
import jakarta.enterprise.context.ApplicationScoped;
1010
import jakarta.inject.Inject;
11+
import org.eclipse.microprofile.config.inject.ConfigProperty;
1112
import org.eclipse.microprofile.rest.client.inject.RestClient;
1213
import org.openapi.quarkus.party_registry_proxy_json.api.*;
1314
import org.openapi.quarkus.user_registry_json.api.UserApi;
1415

16+
import java.util.Optional;
17+
1518
@ApplicationScoped
1619
public class RegistryResourceFactory {
1720

@@ -55,11 +58,14 @@ public class RegistryResourceFactory {
5558
@Inject
5659
GeographicTaxonomiesApi geographicTaxonomiesApi;
5760

61+
@ConfigProperty(name = "onboarding-ms.allowed-ateco-codes")
62+
Optional<String> allowedAtecoCodes;
63+
5864
public RegistryManager<?> create(Onboarding onboarding, String managerTaxCode) {
5965
return switch (onboarding.getInstitution().getOrigin() != null
6066
? onboarding.getInstitution().getOrigin()
6167
: Origin.SELC) {
62-
case PDND_INFOCAMERE -> new RegistryManagerPDNDInfocamere(onboarding, infocamerePdndApi, userRegistryApi);
68+
case PDND_INFOCAMERE -> new RegistryManagerPDNDInfocamere(onboarding, infocamerePdndApi, userRegistryApi, allowedAtecoCodes);
6369
case ANAC -> new RegistryManagerANAC(onboarding, stationsApi);
6470
case IVASS -> new RegistryManagerIVASS(onboarding, insuranceCompaniesApi);
6571
case INFOCAMERE -> new RegistryManagerInfocamere(onboarding, infocamereApi, managerTaxCode);

apps/onboarding-ms/src/main/resources/application.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ quarkus.mongodb.database = selcOnboarding
1919

2020
onboarding.institutions-allowed-list=${ONBOARDING_ALLOWED_INSTITUTIONS_PRODUCTS}
2121
onboarding.orchestration.enabled = ${ONBOARDING_ORCHESTRATION_ENABLED:true}
22+
onboarding-ms.allowed-ateco-codes = ${ALLOWED_ATECO_CODES}
2223

2324

2425
## SIGNATURE

apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/entity/RegistryManagerPDNDInfocamereTest.java

Lines changed: 0 additions & 157 deletions
This file was deleted.

0 commit comments

Comments
 (0)