From 2078ad54d1a1a21479339ff0eb8176c4356cef42 Mon Sep 17 00:00:00 2001
From: xkollar3 <xkollar3@fi.muni.cz>
Date: Sun, 5 May 2024 17:08:41 +0200
Subject: [PATCH] fixed endpoint return value for listing transactions

---
 .../fi/obs/etl/clients/TransactionClient.java |  4 +-
 .../muni/fi/obs/etl/dto/TransactionDto.java   |  5 ++-
 .../create/facts/FactCreatorProcessor.java    |  4 +-
 .../cz/muni/fi/obs/api/TransactionDto.java    | 40 +++++++++++++++++++
 .../obs/controller/TransactionController.java | 13 +++---
 .../facade/TransactionManagementFacade.java   | 10 ++++-
 6 files changed, 60 insertions(+), 16 deletions(-)
 create mode 100644 transaction-service/src/main/java/cz/muni/fi/obs/api/TransactionDto.java

diff --git a/analytics-service/src/main/java/cz/muni/fi/obs/etl/clients/TransactionClient.java b/analytics-service/src/main/java/cz/muni/fi/obs/etl/clients/TransactionClient.java
index 7ceb9d3..713ca62 100644
--- a/analytics-service/src/main/java/cz/muni/fi/obs/etl/clients/TransactionClient.java
+++ b/analytics-service/src/main/java/cz/muni/fi/obs/etl/clients/TransactionClient.java
@@ -17,8 +17,8 @@ import java.time.LocalDate;
 )
 public interface TransactionClient {
     @GetMapping(value = "/account/{accountId}/list")
-    public ResponseEntity<Page<TransactionDto>> listTransactions(
-            @PathVariable("accountNumber") String accountId,
+    ResponseEntity<Page<TransactionDto>> listTransactions(
+            @PathVariable("accountId") String accountId,
             @RequestParam("pageNumber") int pageNumber,
             @RequestParam("pageSize") int pageSize,
             @RequestParam("date") LocalDate date);
diff --git a/analytics-service/src/main/java/cz/muni/fi/obs/etl/dto/TransactionDto.java b/analytics-service/src/main/java/cz/muni/fi/obs/etl/dto/TransactionDto.java
index b7d78e4..f1a15fd 100644
--- a/analytics-service/src/main/java/cz/muni/fi/obs/etl/dto/TransactionDto.java
+++ b/analytics-service/src/main/java/cz/muni/fi/obs/etl/dto/TransactionDto.java
@@ -10,10 +10,11 @@ import java.math.BigDecimal;
 @Getter
 @Setter
 public class TransactionDto {
-    String withdrawsFromAccountNumber;
+    @NotBlank
+    String withdrawsFromAccountId;
 
     @NotBlank
-    String depositsToAccountNumber;
+    String depositsToAccountId;
 
     @Min(0)
     BigDecimal withdrawAmount;
diff --git a/analytics-service/src/main/java/cz/muni/fi/obs/etl/step/create/facts/FactCreatorProcessor.java b/analytics-service/src/main/java/cz/muni/fi/obs/etl/step/create/facts/FactCreatorProcessor.java
index 1b71336..c1061ca 100644
--- a/analytics-service/src/main/java/cz/muni/fi/obs/etl/step/create/facts/FactCreatorProcessor.java
+++ b/analytics-service/src/main/java/cz/muni/fi/obs/etl/step/create/facts/FactCreatorProcessor.java
@@ -51,11 +51,11 @@ public class FactCreatorProcessor implements ItemProcessor<TempAccount, DailyTra
         List<TransactionDto> transactions = fetchTransactions(tempAccount);
 
         List<TransactionDto> withdrawalTransactions = transactions.stream()
-                .filter(transaction -> transaction.getWithdrawsFromAccountNumber().equals(tempAccount.getAccountNumber()))
+                .filter(transaction -> transaction.getWithdrawsFromAccountId().equals(tempAccount.getAccountNumber()))
                 .toList();
 
         List<TransactionDto> depositTransactions = transactions.stream()
-                .filter(transaction -> transaction.getDepositsToAccountNumber().equals(tempAccount.getAccountNumber()))
+                .filter(transaction -> transaction.getDepositsToAccountId().equals(tempAccount.getAccountNumber()))
                 .toList();
 
         int totalWithdrawalTransactions = withdrawalTransactions.size();
diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/api/TransactionDto.java b/transaction-service/src/main/java/cz/muni/fi/obs/api/TransactionDto.java
new file mode 100644
index 0000000..046feaa
--- /dev/null
+++ b/transaction-service/src/main/java/cz/muni/fi/obs/api/TransactionDto.java
@@ -0,0 +1,40 @@
+package cz.muni.fi.obs.api;
+
+import cz.muni.fi.obs.data.dbo.TransactionDbo;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+@Getter
+@Setter
+public class TransactionDto {
+    @NotBlank
+    String withdrawsFromAccountId;
+
+    @NotBlank
+    String depositsToAccountId;
+
+    @Min(0)
+    BigDecimal withdrawAmount;
+
+    @Min(0)
+    BigDecimal depositAmount;
+
+    String note;
+
+    String variableSymbol;
+
+    public static TransactionDto fromDbo(TransactionDbo transactionDbo) {
+        TransactionDto transactionDto = new TransactionDto();
+        transactionDto.setNote(transactionDbo.getNote());
+        transactionDto.setDepositAmount(transactionDto.getDepositAmount());
+        transactionDto.setVariableSymbol(transactionDbo.getVariableSymbol());
+        transactionDto.setWithdrawAmount(transactionDbo.getWithdrawAmount());
+        transactionDto.setWithdrawsFromAccountId(transactionDbo.getWithdrawsFrom().getId());
+        transactionDto.setDepositsToAccountId(transactionDbo.getDepositsTo().getId());
+        return transactionDto;
+    }
+}
diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/controller/TransactionController.java b/transaction-service/src/main/java/cz/muni/fi/obs/controller/TransactionController.java
index 395f6f5..14c8b38 100644
--- a/transaction-service/src/main/java/cz/muni/fi/obs/controller/TransactionController.java
+++ b/transaction-service/src/main/java/cz/muni/fi/obs/controller/TransactionController.java
@@ -1,6 +1,7 @@
 package cz.muni.fi.obs.controller;
 
 import cz.muni.fi.obs.api.TransactionCreateDto;
+import cz.muni.fi.obs.api.TransactionDto;
 import cz.muni.fi.obs.controller.pagination.PagedResponse;
 import cz.muni.fi.obs.data.dbo.TransactionDbo;
 import cz.muni.fi.obs.exceptions.ResourceNotFoundException;
@@ -23,10 +24,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.math.BigDecimal;
-import java.util.Optional;
-
-import static cz.muni.fi.obs.controller.TransactionController.TRANSACTION_PATH;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.Optional;
@@ -93,14 +90,14 @@ public class TransactionController {
 					@ApiResponse(responseCode = "404", description = "Transaction history not found")
 			}
 	)
-	@GetMapping(value = "/account/{accountNumber}/list", produces = MediaType.APPLICATION_JSON_VALUE)
-	public ResponseEntity<Page<TransactionDbo>> listTransactions(
-			@PathVariable("accountNumber") String accountId,
+	@GetMapping(value = "/account/{accountId}/list", produces = MediaType.APPLICATION_JSON_VALUE)
+	public ResponseEntity<Page<TransactionDto>> listTransactions(
+			@PathVariable("accountId") String accountId,
 			@RequestParam("pageNumber") int pageNumber,
 			@RequestParam("pageSize") int pageSize,
 			@RequestParam("date") LocalDate date) {
 		log.info("Listing transactions for: {} on date: ", accountId);
-		Page<TransactionDbo> page = facade.listTransactions(accountId, pageNumber, pageSize, date);
+		Page<TransactionDto> page = facade.listTransactions(accountId, pageNumber, pageSize, date);
 		return ResponseEntity.ok(page);
 	}
 
diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/facade/TransactionManagementFacade.java b/transaction-service/src/main/java/cz/muni/fi/obs/facade/TransactionManagementFacade.java
index 0e05784..941cad9 100644
--- a/transaction-service/src/main/java/cz/muni/fi/obs/facade/TransactionManagementFacade.java
+++ b/transaction-service/src/main/java/cz/muni/fi/obs/facade/TransactionManagementFacade.java
@@ -2,6 +2,7 @@ package cz.muni.fi.obs.facade;
 
 import cz.muni.fi.obs.api.AccountCreateDto;
 import cz.muni.fi.obs.api.TransactionCreateDto;
+import cz.muni.fi.obs.api.TransactionDto;
 import cz.muni.fi.obs.data.dbo.AccountDbo;
 import cz.muni.fi.obs.data.dbo.TransactionDbo;
 import cz.muni.fi.obs.exceptions.ResourceNotFoundException;
@@ -11,6 +12,7 @@ import cz.muni.fi.obs.service.TransactionService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Component;
 
@@ -18,6 +20,7 @@ import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.List;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Component
@@ -78,8 +81,11 @@ public class TransactionManagementFacade {
         return accountService.listAccounts(pageable);
     }
 
-	public Page<TransactionDbo> listTransactions(String accountId, int pageNumber, int pageSize, LocalDate date) {
-		return transactionService.listByAccount(accountId, Pageable.ofSize(pageSize).withPage(pageNumber), date);
+	public Page<TransactionDto> listTransactions(String accountId, int pageNumber, int pageSize, LocalDate date) {
+		Page<TransactionDbo> transactionDbos = transactionService.listByAccount(accountId, Pageable.ofSize(pageSize).withPage(pageNumber), date);
+		return new PageImpl<>(transactionDbos.getContent().stream().map(TransactionDto::fromDbo).collect(Collectors.toList()),
+				Pageable.ofSize(pageSize).withPage(pageNumber),
+				transactionDbos.getTotalElements());
 	}
 }
 
-- 
GitLab