Skip to content

Commit dde1e46

Browse files
authored
Merge pull request #200
[PN-13422] Modifica flusso national-registries per recupero domicilio digitale per PF in caso di abilitazione del nuovo workflow
2 parents 14a9202 + 7f77c54 commit dde1e46

19 files changed

+539
-177
lines changed

config/application.properties

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,7 @@ pn.national.registries.health-check-path=http://localhost
9494
# Queue inbound event configuration
9595
spring.cloud.stream.function.routing.enabled=true
9696
spring.cloud.stream.bindings.functionRouter-in-0.destination=pn-national_registry_gateway_inputs
97-
spring.cloud.stream.sqs.bindings.functionRouter-in-0.consumer.snsFanout=false
97+
spring.cloud.stream.sqs.bindings.functionRouter-in-0.consumer.snsFanout=false
98+
99+
pn.national-registries.pfnewworkflowstart=1099-02-13T23:00:00Z
100+
pn.national-registries.pfnewworkflowstop=2099-03-31T23:00:00Z

scripts/aws/cfn/microservice-dev-cfg.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
"CustomRetryMaxAttempts": "3",
4343
"PnCronAnalyzer": "-",
4444
"WireTapLogActivation": "false",
45-
"MountEfs": "false"
45+
"MountEfs": "false",
46+
"pfNewWorkflowStart": "2019-07-14T20:00:00Z",
47+
"pfNewWorkflowStop": "2099-07-14T23:59:59Z"
4648
}
4749
}

scripts/aws/cfn/microservice.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,16 @@ Parameters:
289289
- true
290290
- false
291291

292+
pfNewWorkflowStart:
293+
Type: String
294+
Description: 'Start date for new workflow'
295+
Default: '2021-01-01T00:00:00Z'
296+
297+
pfNewWorkflowStop:
298+
Type: String
299+
Description: 'End date for new workflow'
300+
Default: '2021-01-01T00:00:00Z'
301+
292302
PnCronAnalyzer:
293303
Type: String
294304
Default: '-'
@@ -474,6 +484,8 @@ Resources:
474484
ContainerEnvEntry39: !Sub 'PN_NATIONAL_REGISTRY_CUSTOM_RETRY_MAX_ATTEMPTS=${CustomRetryMaxAttempts}'
475485
ContainerEnvEntry40: !Sub 'PN_CRON_ANALYZER=${PnCronAnalyzer}'
476486
ContainerEnvEntry41: !Sub 'WIRE_TAP_LOG=${WireTapLogActivation}'
487+
ContainerEnvEntry42: !Sub 'PN_NATIONALREGISTRIES_PFNEWWORKFLOWSTART=${pfNewWorkflowStart}'
488+
ContainerEnvEntry43: !Sub 'PN_NATIONALREGISTRIES_PFNEWWORKFLOWSTOP=${pfNewWorkflowStop}'
477489

478490
# MicroServiceSecretAndSSMPrefix: !Sub '${SecretAndSSMPrefix}'
479491
MappedPaths: '/national-registries-private/*'
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package it.pagopa.pn.national.registries.config;
2+
3+
import it.pagopa.pn.commons.conf.SharedAutoConfiguration;
4+
import lombok.Data;
5+
import org.springframework.boot.context.properties.ConfigurationProperties;
6+
import org.springframework.context.annotation.Configuration;
7+
import org.springframework.context.annotation.Import;
8+
9+
@Configuration
10+
@ConfigurationProperties(prefix = "pn.national-registries")
11+
@Data
12+
@Import(SharedAutoConfiguration.class)
13+
public class NationalRegistriesConfig {
14+
15+
private String pfNewWorkflowStart;
16+
17+
private String pfNewWorkflowStop;
18+
19+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package it.pagopa.pn.national.registries.constant;
2+
3+
import it.pagopa.pn.commons.exceptions.PnInternalException;
4+
import lombok.extern.slf4j.Slf4j;
5+
6+
import static it.pagopa.pn.national.registries.exceptions.PnNationalRegistriesExceptionCodes.ERROR_CODE_INVALID_RECIPIENTTYPE;
7+
8+
@Slf4j
9+
public enum RecipientType {
10+
11+
PG,
12+
PF;
13+
14+
public static RecipientType fromString(String value) {
15+
try {
16+
return RecipientType.valueOf(value);
17+
} catch (IllegalArgumentException e) {
18+
log.warn("Invalid recipientType [{}], allowed values are: PG, PF", value);
19+
throw new PnInternalException("Invalid recipientType, allowed values are: PG, PF", ERROR_CODE_INVALID_RECIPIENTTYPE);
20+
}
21+
}
22+
23+
}

src/main/java/it/pagopa/pn/national/registries/converter/InadConverter.java

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package it.pagopa.pn.national.registries.converter;
22

3+
import it.pagopa.pn.national.registries.constant.RecipientType;
4+
import it.pagopa.pn.national.registries.entity.BatchRequest;
35
import it.pagopa.pn.national.registries.exceptions.PnNationalRegistriesException;
46
import it.pagopa.pn.national.registries.generated.openapi.msclient.inad.v1.dto.ElementDigitalAddress;
57
import it.pagopa.pn.national.registries.generated.openapi.msclient.inad.v1.dto.MotivationTermination;
@@ -33,7 +35,11 @@ public class InadConverter {
3335
private InadConverter() {
3436
}
3537

36-
public static GetDigitalAddressINADOKDto mapToResponseOk(ResponseRequestDigitalAddress elementDigitalAddress, String recipientType, String taxId) {
38+
public static RecipientType retrieveRecipientType(BatchRequest request) {
39+
return StringUtils.hasText(request.getCf()) && request.getCf().length() == CF_LENGTH ? RecipientType.PF : RecipientType.PG;
40+
}
41+
42+
public static GetDigitalAddressINADOKDto mapToResponseOk(ResponseRequestDigitalAddress elementDigitalAddress, RecipientType recipientType, String taxId, boolean newWorkflowEnabled) {
3743
GetDigitalAddressINADOKDto response = new GetDigitalAddressINADOKDto();
3844
if (elementDigitalAddress != null) {
3945
response.setSince(elementDigitalAddress.getSince());
@@ -44,8 +50,8 @@ public static GetDigitalAddressINADOKDto mapToResponseOk(ResponseRequestDigitalA
4450
.map(InadConverter::convertToGetDigitalAddressINADOKDigitalAddressInnerDto)
4551
.toList();
4652
switch (recipientType) {
47-
case "PF" -> mapToPfAddress(digitalAddressDtoList, response);
48-
case "PG" -> mapToPgAddress(digitalAddressDtoList, taxId, response);
53+
case PF -> mapToPfAddress(digitalAddressDtoList, response, newWorkflowEnabled);
54+
case PG -> mapToPgAddress(digitalAddressDtoList, taxId, response);
4955
default -> throw new PnNationalRegistriesException("Invalid recipientType",HttpStatus.BAD_REQUEST.value(),
5056
HttpStatus.BAD_REQUEST.getReasonPhrase(),null,null , Charset.defaultCharset(), InadResponseKO.class);
5157
}
@@ -61,9 +67,7 @@ private static void mapToPgAddress (List<DigitalAddressDto> digitalAddressDtoLis
6167
digitalAddressDtoList.size() == 1 && !StringUtils.hasText(digitalAddressDtoList.get(0).getPracticedProfession())) {
6268
response.setDigitalAddress(digitalAddressDtoList.get(0));
6369
}else{
64-
digitalAddressDtoList.stream()
65-
.filter(item -> StringUtils.hasText(item.getPracticedProfession()))
66-
.findFirst()
70+
retrieveProfessionalAddress(digitalAddressDtoList)
6771
.ifPresentOrElse(
6872
response::setDigitalAddress,
6973
() -> {
@@ -73,20 +77,38 @@ private static void mapToPgAddress (List<DigitalAddressDto> digitalAddressDtoLis
7377
);
7478
}
7579
}
76-
private static void mapToPfAddress(List<DigitalAddressDto> digitalAddressDtoList, GetDigitalAddressINADOKDto response)
77-
{
80+
private static void mapToPfAddress(List<DigitalAddressDto> digitalAddressDtoList, GetDigitalAddressINADOKDto response, boolean newWorkflowEnabled) {
81+
if (newWorkflowEnabled) {
82+
retrieveProfessionalAddress(digitalAddressDtoList)
83+
.ifPresentOrElse(
84+
response::setDigitalAddress,
85+
() -> retrievePersonalAddress(digitalAddressDtoList, response));
86+
87+
} else {
88+
retrievePersonalAddress(digitalAddressDtoList, response);
89+
}
90+
}
91+
92+
private static void retrievePersonalAddress(List<DigitalAddressDto> digitalAddressDtoList, GetDigitalAddressINADOKDto response) {
7893
digitalAddressDtoList.stream()
7994
.filter(item -> !StringUtils.hasText(item.getPracticedProfession()) && response.getTaxId().length() == CF_LENGTH)
8095
.findFirst()
8196
.ifPresentOrElse(
8297
response::setDigitalAddress,
8398
() -> {
8499
throw new PnNationalRegistriesException(INAD_CF_NOT_FOUND, HttpStatus.NOT_FOUND.value(),
85-
HttpStatus.NOT_FOUND.getReasonPhrase(),null, null, Charset.defaultCharset(), InadResponseKO.class);
100+
HttpStatus.NOT_FOUND.getReasonPhrase(), null, null, Charset.defaultCharset(), InadResponseKO.class);
86101
}
87102
);
88103
}
89104

105+
private static Optional<DigitalAddressDto> retrieveProfessionalAddress(List<DigitalAddressDto> digitalAddressDtoList) {
106+
return digitalAddressDtoList.stream()
107+
.filter(item -> StringUtils.hasText(item.getPracticedProfession()))
108+
.findFirst();
109+
}
110+
111+
90112
private static DigitalAddressDto convertToGetDigitalAddressINADOKDigitalAddressInnerDto(ElementDigitalAddress item) {
91113
DigitalAddressDto digitalAddress = new DigitalAddressDto();
92114

src/main/java/it/pagopa/pn/national/registries/exceptions/PnNationalRegistriesExceptionCodes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public class PnNationalRegistriesExceptionCodes extends PnExceptionsCodes {
2727
public static final String ERROR_CODE_SECRET_MANAGER = "PN_NATIONAL_REGISTRIES_SECRET_MANAGER";
2828

2929
public static final String ERROR_CODE_UNAUTHORIZED = "PN_NATIONAL_REGISTRIES_UNAUTHORIZED";
30-
30+
public static final String ERROR_CODE_INVALID_RECIPIENTTYPE = "PN_NATIONAL_REGISTRIES_INVALID_RECIPIENTTYPE";
3131
public static final String ERROR_CODE_INFOCAMERE_TOKEN_DURATION = "PN_NATIONAL_REGISTRIES_INFOCAMERE_TOKEN_DURATION";
3232

3333
public static final String ERROR_CODE_ADE_LEGAL_OPENSAML_INIT = "PN_NATIONAL_REGISTRIES_ADE_LEGAL_OPENSAML_INIT";

src/main/java/it/pagopa/pn/national/registries/rest/InadController.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package it.pagopa.pn.national.registries.rest;
22

3+
import it.pagopa.pn.national.registries.constant.RecipientType;
34
import it.pagopa.pn.national.registries.generated.openapi.server.v1.api.DigitalAddressInadApi;
45
import it.pagopa.pn.national.registries.generated.openapi.server.v1.dto.GetDigitalAddressINADOKDto;
56
import it.pagopa.pn.national.registries.generated.openapi.server.v1.dto.GetDigitalAddressINADRequestBodyDto;
@@ -39,7 +40,8 @@ public InadController(InadService inadService, Scheduler scheduler) {
3940
*/
4041
@Override
4142
public Mono<ResponseEntity<GetDigitalAddressINADOKDto>> digitalAddressINAD(String recipientType, Mono<GetDigitalAddressINADRequestBodyDto> extractDigitalAddressINADRequestBodyDto, final ServerWebExchange exchange) {
42-
return extractDigitalAddressINADRequestBodyDto.flatMap(request -> inadService.callEService(request, recipientType))
43+
RecipientType recipientTypeEnum = RecipientType.fromString(recipientType);
44+
return extractDigitalAddressINADRequestBodyDto.flatMap(request -> inadService.callEService(request, recipientTypeEnum, null))
4345
.map(t -> ResponseEntity.ok().body(t))
4446
.publishOn(scheduler);
4547
}

src/main/java/it/pagopa/pn/national/registries/service/DigitalAddressBatchPollingService.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import it.pagopa.pn.national.registries.constant.BatchSendStatus;
55
import it.pagopa.pn.national.registries.constant.BatchStatus;
66
import it.pagopa.pn.national.registries.constant.DigitalAddressRecipientType;
7+
import it.pagopa.pn.national.registries.constant.RecipientType;
78
import it.pagopa.pn.national.registries.converter.GatewayConverter;
9+
import it.pagopa.pn.national.registries.converter.InadConverter;
810
import it.pagopa.pn.national.registries.converter.InfoCamereConverter;
911
import it.pagopa.pn.national.registries.entity.BatchPolling;
1012
import it.pagopa.pn.national.registries.entity.BatchRequest;
@@ -41,6 +43,7 @@
4143
import java.util.regex.Pattern;
4244

4345
import static it.pagopa.pn.commons.utils.MDCUtils.MDC_TRACE_ID_KEY;
46+
import static it.pagopa.pn.national.registries.constant.RecipientType.PF;
4447
import static it.pagopa.pn.national.registries.exceptions.PnNationalRegistriesExceptionCodes.ERROR_MESSAGE_INIPEC_RETRY_EXHAUSTED_TO_SQS;
4548

4649
@Slf4j
@@ -259,11 +262,14 @@ private static void removeInvalidEmails(CodeSqsDto sqsDto) {
259262
}
260263

261264
private void callInadEservice(BatchRequest request) {
265+
266+
RecipientType recipientType = InadConverter.retrieveRecipientType(request);
267+
262268
String correlationId = request.getCorrelationId().split(batchRequestPkSeparator)[0];
263-
inadService.callEService(convertToGetDigitalAddressInadRequest(request), "PG")
269+
inadService.callEService(convertToGetDigitalAddressInadRequest(request), recipientType, request.getReferenceRequestDate().toInstant(ZoneOffset.UTC))
264270
.flatMap(this::emailValidation)
265271
.doOnNext(inadResponse -> {
266-
request.setMessage(convertCodeSqsDtoToString(inadToSqsDto(correlationId, inadResponse, DigitalAddressRecipientType.IMPRESA)));
272+
request.setMessage(convertCodeSqsDtoToString(inadToSqsDto(correlationId, inadResponse, PF.equals(recipientType) ? DigitalAddressRecipientType.PERSONA_FISICA : DigitalAddressRecipientType.IMPRESA)));
267273
request.setStatus(BatchStatus.WORKED.getValue());
268274
})
269275
.doOnNext(sendMessageResponse -> log.info("retrieved digital address from INAD for correlationId: {}", request.getCorrelationId()))

0 commit comments

Comments
 (0)