Skip to content

Commit

Permalink
fix issue with datetime and data parser (#36)
Browse files Browse the repository at this point in the history
* fix issue with datetime

* fix test

* clean up

* remove code smell
  • Loading branch information
ndduc01 authored Sep 19, 2024
1 parent 8bb77b3 commit b3875b4
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,12 @@ public interface CNTransportQOutRepository extends JpaRepository<CNTransportQOut
@Query("SELECT a FROM CNTransportQOut a WHERE a.recordStatusCd = :statusCd ORDER BY a.recordStatusTime ASC")
Optional<Collection<CNTransportQOut>> 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<Collection<CNTransportQOut>> 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<Collection<CNTransportQOut>> 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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public List<CNTransportQOutDto> 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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<CNTransportQOut> cnTransportQOutList = Arrays.asList(cnTransportQOut);

when(cnTransportQOutRepository.findTransportByCreationTimeAndStatus(recordStatusTime, statusCd)).thenReturn(Optional.of(cnTransportQOutList));
when(cnTransportQOutRepository.findTransportByCreationTimeAndStatus(statusTime, statusCd)).thenReturn(Optional.of(cnTransportQOutList));

List<CNTransportQOutDto> 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ public class Base64Adapter extends TypeAdapter<byte[]> {
@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
Expand All @@ -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<Byte> 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;
}
}
}

0 comments on commit b3875b4

Please sign in to comment.