Skip to content

Commit

Permalink
feat(Transaction): extend approvedTempReading API to query since a ti…
Browse files Browse the repository at this point in the history
…mestamp
  • Loading branch information
TonyWu3027 committed Aug 23, 2023
1 parent b2c46e1 commit 1d35915
Show file tree
Hide file tree
Showing 6 changed files with 137 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,11 @@ public TransactionController(TransactionService transactionService) {
}

@GetMapping("/approvedTempReadings")
public List<ApprovedTempReading> getApprovedTransactions(@RequestParam int containerNum) {
public List<ApprovedTempReading> getApprovedTransactions(@RequestParam int containerNum,
@RequestParam(required = false) Long sinceTimestamp) {
if (sinceTimestamp != null) {
return transactionService.getApprovedTempReadingsSince(containerNum, sinceTimestamp);
}
return transactionService.getApprovedTempReadings(containerNum);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,7 @@ public List<ApprovedTempReading> getApprovedTempReadings(int containerNum) {
List<SensorChaincodeTransaction> allSensorChaincodeTransactions =
sensorChaincodeTransactionRepository.findAllByContainerNum(containerNum);

return allSensorChaincodeTransactions.stream().map(
tx -> new ApprovedTempReading(tx.getReading().getTimestamp(),
tx.getReading().getTemperature(),
tx.getApprovalCount(),
tx.getTxId())).toList();
return convertToApprovedTempReadings(allSensorChaincodeTransactions);

}

Expand Down Expand Up @@ -104,4 +100,22 @@ public List<Transaction> getTransactions(int containerNum) {
public List<Transaction> getTransactions() {
return transactionRepository.findAll();
}

public List<ApprovedTempReading> getApprovedTempReadingsSince(int containerNum,
Long sinceTimestamp) {
List<SensorChaincodeTransaction> allSensorChaincodeTransactions =
sensorChaincodeTransactionRepository.findAllSinceTimestampByContainerNum(containerNum,
sinceTimestamp);

return convertToApprovedTempReadings(allSensorChaincodeTransactions);
}

private static List<ApprovedTempReading> convertToApprovedTempReadings(
List<SensorChaincodeTransaction> sensorChaincodeTransactions) {
return sensorChaincodeTransactions.stream().map(
tx -> new ApprovedTempReading(tx.getReading().getTimestamp(),
tx.getReading().getTemperature(),
tx.getApprovalCount(),
tx.getTxId())).toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,8 @@ public interface SensorChaincodeTransactionRepository

@Query("SELECT tx FROM SensorChaincodeTransaction tx WHERE tx.key.containerNum = ?1 ORDER BY tx.reading.timestamp")
List<SensorChaincodeTransaction> findAllByContainerNum(int containerNum);

@Query("SELECT tx FROM SensorChaincodeTransaction tx WHERE tx.key.containerNum = ?1 AND tx.createdTimestamp >= ?2 ORDER BY tx.reading.timestamp")
List<SensorChaincodeTransaction> findAllSinceTimestampByContainerNum(int containerNum,
Long sinceTimestamp);
}
Original file line number Diff line number Diff line change
Expand Up @@ -139,4 +139,25 @@ public void getAllExistingTransactions() throws Exception {
.andExpect(status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.size()").value(5));
}

@Test
public void getApprovedTransactionsSinceSpecificTimestamp() throws Exception {
int containerNum = 1;
long sinceTimestamp = 101L; // Example timestamp
List<ApprovedTempReading> mockData = Arrays.asList(
new ApprovedTempReading(102L, 0.5F, 3, "tx123"),
new ApprovedTempReading(103L, 20F, 2, "tx456")
);

// Mocking the new method you might have added to your service
when(transactionService.getApprovedTempReadingsSince(containerNum, sinceTimestamp)).thenReturn(
mockData);

mockMvc.perform(MockMvcRequestBuilders.get("/api/v1/transaction/approvedTempReadings")
.header("Origin", "http://localhost:3000")
.param("containerNum", String.valueOf(containerNum))
.param("sinceTimestamp", String.valueOf(sinceTimestamp)))
.andExpect(status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.size()").value(2));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -275,4 +275,38 @@ public void getsTransactionsReturnsALlExistingTransactions() {
assertTrue(result.contains(approval2));
}

@Test
public void getsApprovedTempReadingsSinceTimestamp() {
int containerNum = 1;
long sinceTimestamp = 101L;

// Sample data from repository
List<SensorChaincodeTransaction> mockSensorTransactions = Arrays.asList(
new SensorChaincodeTransaction("tx124", 1, "creator", 102L,
new TemperatureHumidityReading(25, 0.3F, 102L)),
new SensorChaincodeTransaction("tx1300", 1, "creator", 103L,
new TemperatureHumidityReading(22, 0.3F, 103L))
);

// Mocking the repository call
when(sensorChaincodeTransactionRepository.findAllSinceTimestampByContainerNum(containerNum,
sinceTimestamp))
.thenReturn(mockSensorTransactions);

// Expected data after conversion
List<ApprovedTempReading> expectedReadings = Arrays.asList(
new ApprovedTempReading(102L, 25, 0, "tx124"),
new ApprovedTempReading(103L, 22, 0, "tx1300")
);

// Invoking the service method
List<ApprovedTempReading> result = transactionService.getApprovedTempReadingsSince(containerNum,
sinceTimestamp);

// Assertions
assertEquals(expectedReadings.size(), result.size());
assertTrue(result.containsAll(expectedReadings));
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -99,4 +99,58 @@ public void findAllByContainerNumReturnsInOrderOfReadingTimestamp() {
assertThat(found).doesNotContain(tx2);
}

@Test
public void findAllSinceTimestampByContainerNumReturnsInOrderOfReadingTimestamp() {
// Given
SensorChaincodeTransaction tx1 = new SensorChaincodeTransaction(
"tx123",
1,
"Container5MSP",
100L,
new TemperatureHumidityReading(25, 0.3F, 105L));

SensorChaincodeTransaction tx2 = new SensorChaincodeTransaction(
"tx456",
1,
"Container5MSP",
108L,
new TemperatureHumidityReading(30, 0.2F, 110L));

SensorChaincodeTransaction tx3 = new SensorChaincodeTransaction(
"tx1299",
1,
"Container5MSP",
99L,
new TemperatureHumidityReading(22, 0.3F, 100L));

SensorChaincodeTransaction tx4 = new SensorChaincodeTransaction(
"tx789",
1,
"Container5MSP",
104L,
new TemperatureHumidityReading(28, 0.25F, 107L));

SensorChaincodeTransaction tx5 = new SensorChaincodeTransaction(
"tx7890",
1,
"Container5MSP",
104L,
new TemperatureHumidityReading(28, 0.25F, 102L));

entityManager.persist(tx1);
entityManager.persist(tx2);
entityManager.persist(tx3);
entityManager.persist(tx4);
entityManager.persist(tx5);
entityManager.flush();

// When
List<SensorChaincodeTransaction> found = repository.findAllSinceTimestampByContainerNum(1,
102L);

// Then
assertThat(found).hasSize(3).containsExactly(tx5, tx4, tx2);
}


}

0 comments on commit 1d35915

Please sign in to comment.