From b3875b48baa58a1a935f360ed982b9f433b598dd Mon Sep 17 00:00:00 2001 From: Duc Nguyen <117302958+ndduc01@users.noreply.github.com> Date: Thu, 19 Sep 2024 16:21:34 +0000 Subject: [PATCH] fix issue with datetime and data parser (#36) * fix issue with datetime * fix test * clean up * remove code smell --- .../odse/CNTransportQOutRepository.java | 8 +++-- .../service/CNTransportQOutService.java | 2 +- .../service/CNTransportQOutServiceTest.java | 8 ++--- .../json_config/Base64Adapter.java | 29 +++++++++++++++---- 4 files changed, 32 insertions(+), 15 deletions(-) diff --git a/nnd-data-exchange-service/src/main/java/gov/cdc/nnddataexchangeservice/repository/odse/CNTransportQOutRepository.java b/nnd-data-exchange-service/src/main/java/gov/cdc/nnddataexchangeservice/repository/odse/CNTransportQOutRepository.java index f3cbf47..fb8ef65 100644 --- a/nnd-data-exchange-service/src/main/java/gov/cdc/nnddataexchangeservice/repository/odse/CNTransportQOutRepository.java +++ b/nnd-data-exchange-service/src/main/java/gov/cdc/nnddataexchangeservice/repository/odse/CNTransportQOutRepository.java @@ -15,8 +15,12 @@ public interface CNTransportQOutRepository extends JpaRepository> findTransportByStatusCd (@Param("statusCd") String statusCd); - @Query("SELECT a FROM CNTransportQOut a WHERE a.recordStatusTime > :recordStatusTime AND a.recordStatusCd = :recordStatusCd ORDER BY a.recordStatusTime ASC") - Optional> findTransportByCreationTimeAndStatus (@Param("recordStatusTime") Timestamp recordStatusTime, + @Query(value = "SELECT * FROM CN_transportq_out a " + + "WHERE a.record_status_time > :recordStatusTime " + + "AND a.record_status_cd = :recordStatusCd " + + "ORDER BY a.record_status_time ASC", + nativeQuery = true) + Optional> findTransportByCreationTimeAndStatus (@Param("recordStatusTime") String recordStatusTime, @Param("recordStatusCd") String recordStatusCd); @Query(value = "SELECT TOP (:limit) a.* FROM CN_transportq_out a WHERE a.record_status_cd = :statusCd ORDER BY a.record_status_time ASC", nativeQuery = true) diff --git a/nnd-data-exchange-service/src/main/java/gov/cdc/nnddataexchangeservice/service/CNTransportQOutService.java b/nnd-data-exchange-service/src/main/java/gov/cdc/nnddataexchangeservice/service/CNTransportQOutService.java index b925750..4ac1cbd 100644 --- a/nnd-data-exchange-service/src/main/java/gov/cdc/nnddataexchangeservice/service/CNTransportQOutService.java +++ b/nnd-data-exchange-service/src/main/java/gov/cdc/nnddataexchangeservice/service/CNTransportQOutService.java @@ -41,7 +41,7 @@ public List getTransportData(String statusCd, String statusT java.util.Date parsedDate = formatter.parse(statusTime); Timestamp recordStatusTime = new Timestamp(parsedDate.getTime()); if (limit == 0) { - transportQOutResults = cnTransportQOutRepository.findTransportByCreationTimeAndStatus(recordStatusTime, statusCd); + transportQOutResults = cnTransportQOutRepository.findTransportByCreationTimeAndStatus(statusTime, statusCd); } else { transportQOutResults = cnTransportQOutRepository.findTransportByCreationTimeAndStatusWLimit(recordStatusTime, statusCd, limit); } diff --git a/nnd-data-exchange-service/src/test/java/gov/cdc/nnddataexchangeservice/service/CNTransportQOutServiceTest.java b/nnd-data-exchange-service/src/test/java/gov/cdc/nnddataexchangeservice/service/CNTransportQOutServiceTest.java index 3dc973d..7115dc4 100644 --- a/nnd-data-exchange-service/src/test/java/gov/cdc/nnddataexchangeservice/service/CNTransportQOutServiceTest.java +++ b/nnd-data-exchange-service/src/test/java/gov/cdc/nnddataexchangeservice/service/CNTransportQOutServiceTest.java @@ -71,19 +71,15 @@ void testGetTransportData_WithStatusTime() throws Exception { String statusCd = "status"; String statusTime = "2023-07-30 10:00:00.000"; - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); - java.util.Date parsedDate = formatter.parse(statusTime); - Timestamp recordStatusTime = new Timestamp(parsedDate.getTime()); - CNTransportQOut cnTransportQOut = new CNTransportQOut(); List cnTransportQOutList = Arrays.asList(cnTransportQOut); - when(cnTransportQOutRepository.findTransportByCreationTimeAndStatus(recordStatusTime, statusCd)).thenReturn(Optional.of(cnTransportQOutList)); + when(cnTransportQOutRepository.findTransportByCreationTimeAndStatus(statusTime, statusCd)).thenReturn(Optional.of(cnTransportQOutList)); List result = cnTransportQOutService.getTransportData(statusCd, statusTime, 0); assertEquals(1, result.size()); - verify(cnTransportQOutRepository, times(1)).findTransportByCreationTimeAndStatus(recordStatusTime, statusCd); + verify(cnTransportQOutRepository, times(1)).findTransportByCreationTimeAndStatus(statusTime, statusCd); } @Test diff --git a/nnd-data-poll-service/src/main/java/gov/cdc/nnddatapollservice/json_config/Base64Adapter.java b/nnd-data-poll-service/src/main/java/gov/cdc/nnddatapollservice/json_config/Base64Adapter.java index 3cc8914..fe1c0b6 100644 --- a/nnd-data-poll-service/src/main/java/gov/cdc/nnddatapollservice/json_config/Base64Adapter.java +++ b/nnd-data-poll-service/src/main/java/gov/cdc/nnddatapollservice/json_config/Base64Adapter.java @@ -11,6 +11,7 @@ public class Base64Adapter extends TypeAdapter { @Override public void write(JsonWriter out, byte[] value) throws IOException { if (value != null) { + // Convert byte[] to Base64 and write it as a string out.value(Base64.getEncoder().encodeToString(value)); } else { out.nullValue(); // Handle null case @@ -19,12 +20,28 @@ public void write(JsonWriter out, byte[] value) throws IOException { @Override public byte[] read(JsonReader in) throws IOException { - String base64 = in.nextString(); - try { - return Base64.getDecoder().decode(base64); - } catch (IllegalArgumentException e) { - // If the value is not properly Base64 encoded, return the byte[] directly - return base64.getBytes(); + if (in.peek() == com.google.gson.stream.JsonToken.STRING) { + String base64 = in.nextString(); + try { + return Base64.getDecoder().decode(base64); + } catch (IllegalArgumentException e) { + return base64.getBytes(); + } + } else if (in.peek() == com.google.gson.stream.JsonToken.BEGIN_ARRAY) { + in.beginArray(); + java.util.List byteList = new java.util.ArrayList<>(); + while (in.hasNext()) { + byteList.add((byte) in.nextInt()); // Read each number as a byte + } + in.endArray(); + + byte[] byteArray = new byte[byteList.size()]; + for (int i = 0; i < byteArray.length; i++) { + byteArray[i] = byteList.get(i); + } + return byteArray; + } else { + return null; } } }