Skip to content

Commit d306934

Browse files
Vincenzo IngenitoVincenzo Ingenito
authored andcommitted
feat: Gestione document reference da Gatewyay per update
1 parent 3d6bd82 commit d306934

File tree

9 files changed

+233
-136
lines changed

9 files changed

+233
-136
lines changed

src/main/java/it/finanze/sanita/fse2/ms/edsclient/client/IBrokerClient.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@
33

44
import it.finanze.sanita.fse2.ms.edsclient.dto.EdsResponseDTO;
55
import it.finanze.sanita.fse2.ms.edsclient.dto.request.BrokerRequestDTO;
6+
import it.finanze.sanita.fse2.ms.edsclient.dto.response.GetDocumentReferenceResDTO;
67

78
/**
89
* Interface of Eds client.
910
*/
1011
public interface IBrokerClient {
1112

1213
EdsResponseDTO dispatchAndSendData(BrokerRequestDTO brokerRequestDTO);
14+
15+
GetDocumentReferenceResDTO getDocumentReference(String fiscalCode, String masterIdentifier);
1316
}
1417

src/main/java/it/finanze/sanita/fse2/ms/edsclient/client/impl/BrokerClient.java

Lines changed: 141 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.springframework.beans.factory.annotation.Autowired;
1919
import org.springframework.http.HttpEntity;
2020
import org.springframework.http.HttpHeaders;
21+
import org.springframework.http.ResponseEntity;
2122
import org.springframework.stereotype.Component;
2223
import org.springframework.web.client.RestTemplate;
2324
import org.springframework.web.util.UriComponentsBuilder;
@@ -29,6 +30,7 @@
2930
import it.finanze.sanita.fse2.ms.edsclient.dto.EdsResponseDTO;
3031
import it.finanze.sanita.fse2.ms.edsclient.dto.request.BrokerRequestDTO;
3132
import it.finanze.sanita.fse2.ms.edsclient.dto.response.DocumentResponseDTO;
33+
import it.finanze.sanita.fse2.ms.edsclient.dto.response.GetDocumentReferenceResDTO;
3234
import it.finanze.sanita.fse2.ms.edsclient.enums.ProcessorOperationEnum;
3335
import it.finanze.sanita.fse2.ms.edsclient.enums.ResultLogEnum;
3436
import it.finanze.sanita.fse2.ms.edsclient.exceptions.BusinessException;
@@ -41,128 +43,143 @@
4143
@Component
4244
public class BrokerClient implements IBrokerClient {
4345

44-
private static final String MSG_UNSUPPORTED = "Unsupported exception";
45-
46-
@Autowired
47-
private RestTemplate restTemplate;
48-
49-
@Autowired
50-
private LoggerHelper logger;
51-
52-
@Autowired
53-
private BrokerCfg brokerCfg;
54-
55-
@Override
56-
public EdsResponseDTO dispatchAndSendData(BrokerRequestDTO brokerRequestDTO) {
57-
58-
EdsResponseDTO output = new EdsResponseDTO();
59-
final Date startingDate = new Date();
60-
final String successLog = "Informazioni inviate al broker";
61-
final String errorLog = "Errore riscontrato durante l'invio delle informazioni al broker";
62-
63-
URI url = UriComponentsBuilder
64-
.fromUriString(brokerCfg.getBrokerHost() + "/v1/ingestion/document"
65-
+ buildRequestPath(brokerRequestDTO.getOperation(),
66-
brokerRequestDTO.getIdentifier(), brokerRequestDTO.getWorkflowInstanceId(),
67-
brokerRequestDTO.getFiscalCode()))
68-
.build().toUri();
69-
70-
HttpHeaders headers = new HttpHeaders();
71-
headers.set("Content-Type", "application/json");
72-
73-
try {
74-
DocumentDTO requestBody = buildRequestBody(brokerRequestDTO);
75-
HttpEntity<?> entity = new HttpEntity<>(requestBody, headers);
76-
77-
restTemplate.exchange(url, Constants.AppConstants.methodMap.get(brokerRequestDTO.getOperation()), entity,
78-
DocumentResponseDTO.class);
79-
80-
logger.info(successLog, brokerRequestDTO.getOperation().getOperationLogEnum(), ResultLogEnum.OK,
81-
startingDate);
82-
output.setEsito(true);
83-
} catch (Exception ex) {
84-
logger.error(errorLog, brokerRequestDTO.getOperation().getOperationLogEnum(), ResultLogEnum.KO,
85-
startingDate, brokerRequestDTO.getOperation().getErrorLogEnum());
86-
output.setExClassCanonicalName(ExceptionUtils.getRootCause(ex).getClass().getCanonicalName());
87-
output.setMessageError(ex.getMessage());
88-
}
89-
90-
return output;
91-
}
92-
93-
private DocumentDTO buildRequestBody(BrokerRequestDTO brokerRequestDTO) {
94-
DocumentDTO requestBody = null;
95-
IniEdsInvocationETY ety = brokerRequestDTO.getIniEdsInvocationETY() != null
96-
? brokerRequestDTO.getIniEdsInvocationETY()
97-
: null;
98-
99-
switch (brokerRequestDTO.getOperation()) {
100-
case UPDATE:
101-
if (brokerRequestDTO.getUpdateReqDTO() == null) {
102-
// bad request
103-
throw new BusinessException(MSG_UNSUPPORTED);
104-
}
105-
requestBody = new DocumentDTO();
106-
requestBody.setIdentifier(brokerRequestDTO.getIdentifier());
107-
requestBody.setOperation(ProcessorOperationEnum.UPDATE);
108-
requestBody.setJsonString(JsonUtility.objectToJson(brokerRequestDTO.getUpdateReqDTO()));
109-
requestBody.setFiscalCode(brokerRequestDTO.getFiscalCode());
110-
requestBody.setRde(brokerRequestDTO.getIniEdsInvocationETY().getRde());
111-
break;
112-
case REPLACE:
113-
requestBody = new DocumentDTO();
114-
requestBody.setIdentifier(brokerRequestDTO.getIdentifier());
115-
requestBody.setOperation(ProcessorOperationEnum.REPLACE);
116-
requestBody.setFiscalCode(brokerRequestDTO.getIniEdsInvocationETY().getFiscalCode());
117-
requestBody.setRde(brokerRequestDTO.getIniEdsInvocationETY().getRde());
118-
if (ety != null && ety.getData() != null) {
119-
requestBody.setJsonString(JsonUtility.objectToJson(ety.getData()));
120-
} else {
121-
throw new BusinessException(MSG_UNSUPPORTED);
122-
}
123-
break;
124-
125-
case DELETE:
126-
break;
127-
128-
case PUBLISH:
129-
default:
130-
requestBody = new DocumentDTO();
131-
requestBody.setIdentifier(brokerRequestDTO.getIdentifier());
132-
requestBody.setOperation(ProcessorOperationEnum.PUBLISH);
133-
requestBody.setFiscalCode(brokerRequestDTO.getIniEdsInvocationETY().getFiscalCode());
134-
requestBody.setRde(brokerRequestDTO.getIniEdsInvocationETY().getRde());
135-
if (ety != null && ety.getData() != null) {
136-
requestBody.setJsonString(JsonUtility.objectToJson(ety.getData()));
137-
} else {
138-
throw new BusinessException(MSG_UNSUPPORTED);
139-
}
140-
break;
141-
}
142-
143-
return requestBody;
144-
145-
}
146-
147-
private String buildRequestPath(final ProcessorOperationEnum operation, final String identifier,
148-
final String workflowInstanceId,
149-
final String fiscalCode) {
150-
String requestPath = "";
151-
152-
switch (operation) {
153-
case UPDATE:
154-
requestPath = "/metadata";
155-
break;
156-
case DELETE:
157-
requestPath = "/identifier/" + identifier + "/" + fiscalCode;
158-
break;
159-
case REPLACE:
160-
case PUBLISH:
161-
requestPath = "/workflowinstanceid/" + workflowInstanceId;
162-
break;
163-
default:
164-
break;
165-
}
166-
return requestPath;
167-
}
46+
private static final String MSG_UNSUPPORTED = "Unsupported exception";
47+
48+
@Autowired
49+
private RestTemplate restTemplate;
50+
51+
@Autowired
52+
private LoggerHelper logger;
53+
54+
@Autowired
55+
private BrokerCfg brokerCfg;
56+
57+
@Override
58+
public EdsResponseDTO dispatchAndSendData(BrokerRequestDTO brokerRequestDTO) {
59+
60+
EdsResponseDTO output = new EdsResponseDTO();
61+
final Date startingDate = new Date();
62+
final String successLog = "Informazioni inviate al broker";
63+
final String errorLog = "Errore riscontrato durante l'invio delle informazioni al broker";
64+
65+
URI url = UriComponentsBuilder
66+
.fromUriString(brokerCfg.getBrokerHost() + "/v1/ingestion/document"
67+
+ buildRequestPath(brokerRequestDTO.getOperation(),
68+
brokerRequestDTO.getIdentifier(), brokerRequestDTO.getWorkflowInstanceId(),
69+
brokerRequestDTO.getFiscalCode()))
70+
.build().toUri();
71+
72+
HttpHeaders headers = new HttpHeaders();
73+
headers.set("Content-Type", "application/json");
74+
75+
try {
76+
DocumentDTO requestBody = buildRequestBody(brokerRequestDTO);
77+
HttpEntity<?> entity = new HttpEntity<>(requestBody, headers);
78+
79+
restTemplate.exchange(url, Constants.AppConstants.methodMap.get(brokerRequestDTO.getOperation()), entity,
80+
DocumentResponseDTO.class);
81+
82+
logger.info(successLog, brokerRequestDTO.getOperation().getOperationLogEnum(), ResultLogEnum.OK,
83+
startingDate);
84+
output.setEsito(true);
85+
} catch (Exception ex) {
86+
logger.error(errorLog, brokerRequestDTO.getOperation().getOperationLogEnum(), ResultLogEnum.KO,
87+
startingDate, brokerRequestDTO.getOperation().getErrorLogEnum());
88+
output.setExClassCanonicalName(ExceptionUtils.getRootCause(ex).getClass().getCanonicalName());
89+
output.setMessageError(ex.getMessage());
90+
}
91+
92+
return output;
93+
}
94+
95+
private DocumentDTO buildRequestBody(BrokerRequestDTO brokerRequestDTO) {
96+
DocumentDTO requestBody = null;
97+
IniEdsInvocationETY ety = brokerRequestDTO.getIniEdsInvocationETY() != null
98+
? brokerRequestDTO.getIniEdsInvocationETY()
99+
: null;
100+
101+
switch (brokerRequestDTO.getOperation()) {
102+
case UPDATE:
103+
if (brokerRequestDTO.getUpdateReqDTO() == null) {
104+
// bad request
105+
throw new BusinessException(MSG_UNSUPPORTED);
106+
}
107+
requestBody = new DocumentDTO();
108+
requestBody.setIdentifier(brokerRequestDTO.getIdentifier());
109+
requestBody.setOperation(ProcessorOperationEnum.UPDATE);
110+
requestBody.setJsonString(brokerRequestDTO.getUpdateReqDTO().getDocumentReference());
111+
requestBody.setFiscalCode(brokerRequestDTO.getFiscalCode());
112+
// requestBody.setRde(brokerRequestDTO.getIniEdsInvocationETY().getRde());
113+
break;
114+
case REPLACE:
115+
requestBody = new DocumentDTO();
116+
requestBody.setIdentifier(brokerRequestDTO.getIdentifier());
117+
requestBody.setOperation(ProcessorOperationEnum.REPLACE);
118+
requestBody.setFiscalCode(brokerRequestDTO.getIniEdsInvocationETY().getFiscalCode());
119+
requestBody.setRde(brokerRequestDTO.getIniEdsInvocationETY().getRde());
120+
if (ety != null && ety.getData() != null) {
121+
requestBody.setJsonString(JsonUtility.objectToJson(ety.getData()));
122+
} else {
123+
throw new BusinessException(MSG_UNSUPPORTED);
124+
}
125+
break;
126+
127+
case DELETE:
128+
break;
129+
130+
case PUBLISH:
131+
default:
132+
requestBody = new DocumentDTO();
133+
requestBody.setIdentifier(brokerRequestDTO.getIdentifier());
134+
requestBody.setOperation(ProcessorOperationEnum.PUBLISH);
135+
requestBody.setFiscalCode(brokerRequestDTO.getIniEdsInvocationETY().getFiscalCode());
136+
requestBody.setRde(brokerRequestDTO.getIniEdsInvocationETY().getRde());
137+
if (ety != null && ety.getData() != null) {
138+
requestBody.setJsonString(JsonUtility.objectToJson(ety.getData()));
139+
} else {
140+
throw new BusinessException(MSG_UNSUPPORTED);
141+
}
142+
break;
143+
}
144+
145+
return requestBody;
146+
147+
}
148+
149+
private String buildRequestPath(final ProcessorOperationEnum operation, final String identifier,
150+
final String workflowInstanceId,
151+
final String fiscalCode) {
152+
String requestPath = "";
153+
154+
switch (operation) {
155+
case UPDATE:
156+
requestPath = "/metadata";
157+
break;
158+
case DELETE:
159+
requestPath = "/identifier/" + identifier + "/" + fiscalCode;
160+
break;
161+
case REPLACE:
162+
case PUBLISH:
163+
requestPath = "/workflowinstanceid/" + workflowInstanceId;
164+
break;
165+
default:
166+
break;
167+
}
168+
return requestPath;
169+
}
170+
171+
@Override
172+
public GetDocumentReferenceResDTO getDocumentReference(String fiscalCode, String masterIdentifier) {
173+
final URI uri = UriComponentsBuilder
174+
.fromUriString(brokerCfg.getBrokerHost())
175+
.path("/v1/ingestion/document-reference/{fiscalCode}/{masterIdentifier}")
176+
.buildAndExpand(fiscalCode, masterIdentifier)
177+
.toUri();
178+
179+
return restTemplate.getForObject(uri, GetDocumentReferenceResDTO.class);
180+
181+
182+
}
183+
184+
168185
}

src/main/java/it/finanze/sanita/fse2/ms/edsclient/controller/IEDSPublicationCTL.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
package it.finanze.sanita.fse2.ms.edsclient.controller;
1313

1414
import org.springframework.http.MediaType;
15+
import org.springframework.http.ResponseEntity;
1516
import org.springframework.web.bind.annotation.DeleteMapping;
17+
import org.springframework.web.bind.annotation.GetMapping;
1618
import org.springframework.web.bind.annotation.PathVariable;
1719
import org.springframework.web.bind.annotation.PostMapping;
1820
import org.springframework.web.bind.annotation.PutMapping;
@@ -24,12 +26,16 @@
2426
import io.swagger.v3.oas.annotations.media.Schema;
2527
import io.swagger.v3.oas.annotations.responses.ApiResponse;
2628
import io.swagger.v3.oas.annotations.responses.ApiResponses;
29+
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
30+
import io.swagger.v3.oas.annotations.security.SecurityRequirements;
2731
import io.swagger.v3.oas.annotations.tags.Tag;
32+
import it.finanze.sanita.fse2.ms.edsclient.dto.DocumentDTO;
2833
import it.finanze.sanita.fse2.ms.edsclient.dto.EdsResponseDTO;
2934
import it.finanze.sanita.fse2.ms.edsclient.dto.request.DocumentRequestDTO;
3035
import it.finanze.sanita.fse2.ms.edsclient.dto.request.EdsMetadataUpdateReqDTO;
3136
import it.finanze.sanita.fse2.ms.edsclient.dto.request.PublicationRequestBodyDTO;
3237
import it.finanze.sanita.fse2.ms.edsclient.dto.response.ErrorResponseDTO;
38+
import it.finanze.sanita.fse2.ms.edsclient.dto.response.GetDocumentReferenceResDTO;
3339
import jakarta.servlet.http.HttpServletRequest;
3440
import jakarta.validation.constraints.Size;
3541

@@ -78,5 +84,21 @@ EdsResponseDTO update(@Size(min = 1, max = 256) @PathVariable(value = "idDoc", r
7884
@ApiResponse(responseCode = "500", description = "Internal Server Error", content = @Content(mediaType = MediaType.APPLICATION_PROBLEM_JSON_VALUE, schema = @Schema(implementation = ErrorResponseDTO.class))) })
7985
EdsResponseDTO delete(@Size(min = 1, max = 256) @PathVariable(value = "idDoc", required = true) String idDoc,
8086
@PathVariable(value = "fiscalCode", required = true) String fiscalCode, HttpServletRequest request);
87+
88+
/**
89+
* Function to retrieve the list of all documents from the staging database.
90+
*
91+
* @param request The Http Servlet Request
92+
* @return DocumentReferenceDTO List of Document Reference DTO
93+
*/
94+
@GetMapping(value = "/document/{fiscalCode}/{masterIdentifier}", produces = {
95+
MediaType.APPLICATION_JSON_VALUE })
96+
@Operation(summary = "Returns the list of all documents from the staging database", description = "Servizio che consente di ritornare la lista dei documenti dal database di staging.")
97+
@ApiResponse(content = @Content(mediaType = MediaType.APPLICATION_PROBLEM_JSON_VALUE, schema = @Schema(implementation = DocumentDTO.class)))
98+
@ApiResponses(value = {
99+
@ApiResponse(responseCode = "200", description = "Richiesta Documents avvenuta con successo", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = GetDocumentReferenceResDTO.class))),
100+
@ApiResponse(responseCode = "500", description = "Internal Server Error", content = @Content(mediaType = MediaType.APPLICATION_PROBLEM_JSON_VALUE, schema = @Schema(implementation = ErrorResponseDTO.class))) })
101+
ResponseEntity<GetDocumentReferenceResDTO> getDocumentReference(@PathVariable String fiscalCode,@PathVariable String masterIdentifier,HttpServletRequest request);
102+
81103

82104
}

src/main/java/it/finanze/sanita/fse2/ms/edsclient/controller/impl/EDSPublicationCTL.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@
1212
package it.finanze.sanita.fse2.ms.edsclient.controller.impl;
1313

1414
import org.springframework.beans.factory.annotation.Autowired;
15+
import org.springframework.http.ResponseEntity;
1516
import org.springframework.web.bind.annotation.RestController;
1617

1718
import it.finanze.sanita.fse2.ms.edsclient.controller.IEDSPublicationCTL;
1819
import it.finanze.sanita.fse2.ms.edsclient.dto.EdsResponseDTO;
1920
import it.finanze.sanita.fse2.ms.edsclient.dto.request.DocumentRequestDTO;
2021
import it.finanze.sanita.fse2.ms.edsclient.dto.request.EdsMetadataUpdateReqDTO;
2122
import it.finanze.sanita.fse2.ms.edsclient.dto.request.PublicationRequestBodyDTO;
23+
import it.finanze.sanita.fse2.ms.edsclient.dto.response.GetDocumentReferenceResDTO;
2224
import it.finanze.sanita.fse2.ms.edsclient.dto.response.LogTraceInfoDTO;
2325
import it.finanze.sanita.fse2.ms.edsclient.service.IEdsInvocationSRV;
2426
import jakarta.servlet.http.HttpServletRequest;
@@ -87,4 +89,10 @@ public EdsResponseDTO update(String idDoc, EdsMetadataUpdateReqDTO dto, HttpServ
8789
return output;
8890
}
8991

92+
@Override
93+
public ResponseEntity<GetDocumentReferenceResDTO> getDocumentReference(String fiscalCode, String masterIdentifier, HttpServletRequest request) {
94+
GetDocumentReferenceResDTO documentReference = edsInvocationSRV.getDocumentReference(masterIdentifier, fiscalCode);
95+
return ResponseEntity.ok(documentReference);
96+
}
97+
9098
}

src/main/java/it/finanze/sanita/fse2/ms/edsclient/dto/request/EdsMetadataUpdateReqDTO.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
@Data
1818
@AllArgsConstructor
1919
public class EdsMetadataUpdateReqDTO {
20+
private String idDoc;
2021
private String workflowInstanceId;
21-
private PublicationMetadataReqDTO body;
22+
private String documentReference;
2223
private String fiscalCode;
23-
}
24+
}

0 commit comments

Comments
 (0)