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 7ceb9d340a382425e46813c0c5b80b5063a36dcb..713ca623864878f219e77c341afdce7dfac390a7 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 b7d78e4a32641fb806b34d814a5a2a994cdd0d81..f1a15fdec7277f78770c3e732ff844f483286dc4 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 1b71336a0d2e7a742e66aada95bee0d4ac098420..c1061ca9d7d40b5887b3058b66269fd27aba1f4f 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 0000000000000000000000000000000000000000..046feaa072f7a0b10b2537bdd033421f06578d33 --- /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 395f6f507f7e032047847ed756f465162401e5d9..14c8b3821d5ccaddb38324e90c5f3c9ea78e7a5e 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 0e05784bfcb667bca87c5c7cb48f69eeb4d53354..941cad97fc80ebd61f1ab8431b3f0caf3a6b88a5 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()); } }