From 7c14440f947d78b960e99b97928ebb36858a9cf9 Mon Sep 17 00:00:00 2001 From: maxsca <130107847+maxsca@users.noreply.github.com> Date: Thu, 1 Feb 2024 17:37:32 +0100 Subject: [PATCH 1/3] NOD-642 fix conversion --- .../fdr/service/history/HistoryService.java | 9 ++++++--- .../gov/pagopa/fdr/service/re/ReService.java | 10 +++++++--- .../it/gov/pagopa/fdr/util/StringUtil.java | 20 +++++++++++++++++++ 3 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 src/main/java/it/gov/pagopa/fdr/util/StringUtil.java diff --git a/src/main/java/it/gov/pagopa/fdr/service/history/HistoryService.java b/src/main/java/it/gov/pagopa/fdr/service/history/HistoryService.java index 7cc28a28..e28e020f 100644 --- a/src/main/java/it/gov/pagopa/fdr/service/history/HistoryService.java +++ b/src/main/java/it/gov/pagopa/fdr/service/history/HistoryService.java @@ -28,7 +28,9 @@ import it.gov.pagopa.fdr.service.history.model.HistoryBlobBody; import it.gov.pagopa.fdr.service.history.model.JsonSchemaVersionEnum; import it.gov.pagopa.fdr.util.FileUtil; +import it.gov.pagopa.fdr.util.StringUtil; import jakarta.enterprise.context.ApplicationScoped; +import java.io.IOException; import java.time.Instant; import java.util.*; import java.util.stream.Collectors; @@ -114,14 +116,15 @@ public HistoryBlobBody saveJsonFile( fdrHistoryEntity.setPaymentList(fdrHistoryPaymentEntityList); String fileName = String.format( - "%s_%s_%s.json", + "%s_%s_%s.json.zip", fdrEntity.getFdr(), fdrEntity.getSender().getPspId(), fdrEntity.getRevision()); try { objMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); String fdrHistoryEntityJson = objMapper.writeValueAsString(fdrHistoryEntity); isJsonValid(fdrHistoryEntityJson, jsonSchema); - BinaryData jsonFile = BinaryData.fromString(fdrHistoryEntityJson); + String compressedFdrHistoryEntityJson = StringUtil.zip(fdrHistoryEntityJson); + BinaryData jsonFile = BinaryData.fromString(compressedFdrHistoryEntityJson); uploadBlob(fileName, jsonFile); return HistoryBlobBody.builder() @@ -131,7 +134,7 @@ public HistoryBlobBody saveJsonFile( .fileLength(jsonFile.getLength()) .jsonSchemaVersion(JsonSchemaVersionEnum.valueOf(jsonSchemaVersion)) .build(); - } catch (JsonProcessingException e) { + } catch (IOException e) { logger.error("Error processing fdrHistoryEntity", e); throw new AppException(AppErrorCodeMessageEnum.FDR_HISTORY_JSON_PROCESSING_ERROR); } diff --git a/src/main/java/it/gov/pagopa/fdr/service/re/ReService.java b/src/main/java/it/gov/pagopa/fdr/service/re/ReService.java index 7af8d1df..f9dde0d1 100644 --- a/src/main/java/it/gov/pagopa/fdr/service/re/ReService.java +++ b/src/main/java/it/gov/pagopa/fdr/service/re/ReService.java @@ -17,8 +17,10 @@ import it.gov.pagopa.fdr.service.re.model.ReAbstract; import it.gov.pagopa.fdr.service.re.model.ReInterface; import it.gov.pagopa.fdr.util.AppConstant; +import it.gov.pagopa.fdr.util.StringUtil; import jakarta.enterprise.context.ApplicationScoped; import java.io.ByteArrayInputStream; +import java.io.IOException; import java.nio.charset.StandardCharsets; import java.time.ZoneId; import java.time.format.DateTimeFormatter; @@ -104,17 +106,19 @@ public final void sendEvent(T... reList) { private static final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(PATTERN_DATE_FORMAT).withZone(ZoneId.systemDefault()); - public void writeBlobIfExist(T re) { + public void writeBlobIfExist(T re) throws IOException { if (re instanceof ReInterface reInterface) { String bodyStr = reInterface.getPayload(); if (bodyStr != null && !bodyStr.isBlank()) { String fileName = String.format( - "%s_%s_%s", re.getSessionId(), re.getFdrAction(), reInterface.getHttpType().name()); + "%s_%s_%s.json.zip", + re.getSessionId(), re.getFdrAction(), reInterface.getHttpType().name()); + String compressedBody = StringUtil.zip(bodyStr); BinaryData body = BinaryData.fromStream( - new ByteArrayInputStream(bodyStr.getBytes(StandardCharsets.UTF_8))); + new ByteArrayInputStream(compressedBody.getBytes(StandardCharsets.UTF_8))); BlobClient blobClient = blobContainerClient.getBlobClient(fileName); blobClient.upload(body); diff --git a/src/main/java/it/gov/pagopa/fdr/util/StringUtil.java b/src/main/java/it/gov/pagopa/fdr/util/StringUtil.java new file mode 100644 index 00000000..2c521e41 --- /dev/null +++ b/src/main/java/it/gov/pagopa/fdr/util/StringUtil.java @@ -0,0 +1,20 @@ +package it.gov.pagopa.fdr.util; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.zip.GZIPOutputStream; + +public class StringUtil { + + public static String zip(String str) throws IOException { + byte[] strBytes = str.getBytes(StandardCharsets.UTF_8); + ByteArrayOutputStream bais = new ByteArrayOutputStream(strBytes.length); + GZIPOutputStream gzipOut = new GZIPOutputStream(bais); + gzipOut.write(strBytes); + gzipOut.close(); + String compressed = bais.toString(StandardCharsets.UTF_8); + bais.close(); + return compressed; + } +} From cf7d35496a6e62b95c50d6fd09c153a67fe4c76c Mon Sep 17 00:00:00 2001 From: maxsca <130107847+maxsca@users.noreply.github.com> Date: Thu, 1 Feb 2024 18:00:11 +0100 Subject: [PATCH 2/3] NOD-642 fix conversion --- .../pagopa/fdr/exception/AppErrorCodeMessageEnum.java | 3 ++- .../java/it/gov/pagopa/fdr/service/re/ReService.java | 10 ++++++++-- src/main/resources/messages.properties | 1 + 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/it/gov/pagopa/fdr/exception/AppErrorCodeMessageEnum.java b/src/main/java/it/gov/pagopa/fdr/exception/AppErrorCodeMessageEnum.java index 067b441e..4e801637 100644 --- a/src/main/java/it/gov/pagopa/fdr/exception/AppErrorCodeMessageEnum.java +++ b/src/main/java/it/gov/pagopa/fdr/exception/AppErrorCodeMessageEnum.java @@ -60,7 +60,8 @@ public enum AppErrorCodeMessageEnum implements AppErrorCodeMessageInterface { FDR_HISTORY_SAVE_TABLE_STORAGE_ERROR( "0728", "fdr.fdrHistorySaveOnTableStorageError", Status.INTERNAL_SERVER_ERROR), FILE_UTILS_CONVERSION_ERROR("0729", "fdr.fileUtilsConversionError", Status.INTERNAL_SERVER_ERROR), - FILE_UTILS_FILE_NOT_FOUND("0730", "fdr.fileUtilsFileNotFound", Status.INTERNAL_SERVER_ERROR); + FILE_UTILS_FILE_NOT_FOUND("0730", "fdr.fileUtilsFileNotFound", Status.INTERNAL_SERVER_ERROR), + COMPRESS_JSON("0731", "compress.json.error", Status.INTERNAL_SERVER_ERROR); private final String errorCode; private final String errorMessageKey; private final RestResponse.Status httpStatus; diff --git a/src/main/java/it/gov/pagopa/fdr/service/re/ReService.java b/src/main/java/it/gov/pagopa/fdr/service/re/ReService.java index f9dde0d1..c7c7c75b 100644 --- a/src/main/java/it/gov/pagopa/fdr/service/re/ReService.java +++ b/src/main/java/it/gov/pagopa/fdr/service/re/ReService.java @@ -106,7 +106,7 @@ public final void sendEvent(T... reList) { private static final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(PATTERN_DATE_FORMAT).withZone(ZoneId.systemDefault()); - public void writeBlobIfExist(T re) throws IOException { + public void writeBlobIfExist(T re) { if (re instanceof ReInterface reInterface) { String bodyStr = reInterface.getPayload(); if (bodyStr != null && !bodyStr.isBlank()) { @@ -115,7 +115,13 @@ public void writeBlobIfExist(T re) throws IOException { "%s_%s_%s.json.zip", re.getSessionId(), re.getFdrAction(), reInterface.getHttpType().name()); - String compressedBody = StringUtil.zip(bodyStr); + String compressedBody = null; + try { + compressedBody = StringUtil.zip(bodyStr); + } catch (IOException e) { + log.errorf("Compress json error", e); + throw new AppException(AppErrorCodeMessageEnum.COMPRESS_JSON); + } BinaryData body = BinaryData.fromStream( new ByteArrayInputStream(compressedBody.getBytes(StandardCharsets.UTF_8))); diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 1dbba179..da9e815a 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -43,3 +43,4 @@ fdr.name-psp.wrongFormat=Fdr [{0}] has wrong psp eHub.re.parse=EventHub RE: Error when write object to json eHub.re.tooLarge=EventHub RE: Event is too large for an empty batch. Max size: [{0}] +compress.json.error=Json compression error From 00da2f8c7aaa3112d86f7f5a055fa05340dbfef4 Mon Sep 17 00:00:00 2001 From: maxsca <130107847+maxsca@users.noreply.github.com> Date: Thu, 1 Feb 2024 18:24:38 +0100 Subject: [PATCH 3/3] NOD-642 fix conversion --- .../psps/mapper/PspsServiceServiceMapper.java | 1 + .../InternalOrganizationResourceTest.java | 12 ++++++------ .../pagopa/fdr/test/util/AppConstantTestHelper.java | 1 - 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/it/gov/pagopa/fdr/service/psps/mapper/PspsServiceServiceMapper.java b/src/main/java/it/gov/pagopa/fdr/service/psps/mapper/PspsServiceServiceMapper.java index 071f1c4c..2d4c9437 100644 --- a/src/main/java/it/gov/pagopa/fdr/service/psps/mapper/PspsServiceServiceMapper.java +++ b/src/main/java/it/gov/pagopa/fdr/service/psps/mapper/PspsServiceServiceMapper.java @@ -42,6 +42,7 @@ public interface PspsServiceServiceMapper { List toFdrPaymentInsertEntityList(List paymentDto); @Mapping(target = "published", ignore = true) + @Mapping(target = "refJson", ignore = true) FdrPublishEntity toFdrPublishEntity(FdrInsertEntity fdrInsertEntity); List toFdrPaymentPublishEntityList( diff --git a/src/test/java/it/gov/pagopa/fdr/rest/organizations/InternalOrganizationResourceTest.java b/src/test/java/it/gov/pagopa/fdr/rest/organizations/InternalOrganizationResourceTest.java index f8c4d58f..fe396a7c 100644 --- a/src/test/java/it/gov/pagopa/fdr/rest/organizations/InternalOrganizationResourceTest.java +++ b/src/test/java/it/gov/pagopa/fdr/rest/organizations/InternalOrganizationResourceTest.java @@ -36,7 +36,7 @@ class InternalOrganizationResourceTest { private static final String GET_ALL_PUBLISHED_FLOW_URL = - "/internal/organizations/ndp/fdrs?" + AppConstant.PSP + "=%s"; + "/internal/organizations/%s/fdrs?" + AppConstant.PSP + "=%s"; private static final String GET_REPORTING_FLOW_URL = "/internal/organizations/%s/fdrs/%s/revisions/%s/psps/%s"; private static final String GET_REPORTING_FLOW_PAYMENTS_URL = @@ -48,7 +48,7 @@ class InternalOrganizationResourceTest { void testOrganization_getAllPublishedFlow_Ok() { String flowName = TestUtil.getDynamicFlowName(); TestUtil.pspSunnyDay(flowName); - String url = GET_ALL_PUBLISHED_FLOW_URL.formatted(PSP_CODE); + String url = GET_ALL_PUBLISHED_FLOW_URL.formatted(EC_CODE, PSP_CODE); GetAllResponse res = given() .header(HEADER) @@ -71,7 +71,7 @@ void testOrganization_getAllPublishedFlow_Ok() { void testOrganization_getAllPublishedFlow_OkNoResults() { String flowName = TestUtil.getDynamicFlowName(); TestUtil.pspSunnyDay(flowName); - String url = GET_ALL_PUBLISHED_FLOW_URL.formatted(PSP_CODE_2); + String url = GET_ALL_PUBLISHED_FLOW_URL.formatted(EC_CODE, PSP_CODE_2); GetAllResponse res = given() .header(HEADER) @@ -88,7 +88,7 @@ void testOrganization_getAllPublishedFlow_OkNoResults() { @DisplayName("ORGANIZATIONS - KO FDR-0708 - psp unknown") void testOrganization_getAllPublishedFlow_KO_FDR0708() { String pspUnknown = "PSP_UNKNOWN"; - String url = GET_ALL_PUBLISHED_FLOW_URL.formatted(pspUnknown); + String url = GET_ALL_PUBLISHED_FLOW_URL.formatted(EC_CODE, pspUnknown); ErrorResponse res = given() .header(HEADER) @@ -110,7 +110,7 @@ void testOrganization_getAllPublishedFlow_KO_FDR0708() { @Test @DisplayName("ORGANIZATIONS - KO FDR-0709 - psp not enabled") void testOrganization_getAllPublishedFlow_KO_FDR0709() { - String url = GET_ALL_PUBLISHED_FLOW_URL.formatted(PSP_CODE_NOT_ENABLED); + String url = GET_ALL_PUBLISHED_FLOW_URL.formatted(EC_CODE, PSP_CODE_NOT_ENABLED); ErrorResponse res = given() @@ -181,7 +181,7 @@ void testOrganization_getReportingFlow_KO_FDR0701() { TestUtil.pspSunnyDay(flowName); String flowNameWrong = TestUtil.getDynamicFlowName(); - String url = GET_REPORTING_FLOW_URL.formatted(EC_CODE_NDP, flowNameWrong, 1, PSP_CODE); + String url = GET_REPORTING_FLOW_URL.formatted(EC_CODE, flowNameWrong, 1, PSP_CODE); ErrorResponse res = given() diff --git a/src/test/java/it/gov/pagopa/fdr/test/util/AppConstantTestHelper.java b/src/test/java/it/gov/pagopa/fdr/test/util/AppConstantTestHelper.java index 71e6b79c..e9bfb1e8 100644 --- a/src/test/java/it/gov/pagopa/fdr/test/util/AppConstantTestHelper.java +++ b/src/test/java/it/gov/pagopa/fdr/test/util/AppConstantTestHelper.java @@ -23,7 +23,6 @@ public class AppConstantTestHelper { public static final String CHANNEL_CODE_NOT_ENABLED = "CANALE_NOT_ENABLED"; public static final String EC_CODE = "15376371009"; public static final String EC_CODE_NOT_ENABLED = "PAtestDOFF"; - public static final String EC_CODE_NDP = "ndp"; public static final Header HEADER = new Header("Content-Type", "application/json"); }