From 21bc2ada4368ac92bc1bbb1e8114ee16fb8baca2 Mon Sep 17 00:00:00 2001 From: Filip Fabry <filip.fabry@wandera.com> Date: Wed, 8 May 2024 14:10:40 +0200 Subject: [PATCH] Fix the PR --- .../java/cz/muni/fi/obs/IntegrationTest.java | 13 +-- .../muni/fi/obs/TransactionServiceTest.java | 6 +- .../TransactionManagementFacadeITTest.java | 54 ++++++----- .../obs/rest/TransactionControllerITTest.java | 89 +++++++++---------- .../TransactionControllerIntegrationTest.java | 0 .../fi/obs/api/CurrencyExchangeRequest.java | 7 +- .../fi/obs/api/CurrencyExchangeResult.java | 3 +- .../fi/obs/api/ScheduledPaymentCreateDto.java | 6 +- .../muni/fi/obs/api/ScheduledPaymentDto.java | 6 +- .../muni/fi/obs/api/TransactionCreateDto.java | 8 +- .../cz/muni/fi/obs/api/TransactionDto.java | 4 +- .../obs/config/FeignClientConfiguration.java | 3 +- .../fi/obs/controller/AccountController.java | 24 ++--- .../fi/obs/controller/ControllerAdvice.java | 17 ++-- .../ScheduledPaymentController.java | 16 ++-- .../obs/controller/TransactionController.java | 33 +++---- .../controller/pagination/PagedResponse.java | 4 +- .../obs/controller/pagination/Pagination.java | 3 +- .../data/TransactionServiceDataSeeder.java | 20 ++--- .../cz/muni/fi/obs/data/dbo/AccountDbo.java | 2 + .../fi/obs/data/dbo/ScheduledPayment.java | 8 +- .../muni/fi/obs/data/dbo/TransactionDbo.java | 6 +- .../data/repository/AccountRepository.java | 7 +- .../ScheduledPaymentRepository.java | 7 +- .../repository/TransactionRepository.java | 7 +- .../fi/obs/exceptions/ValidationErrors.java | 5 +- .../ScheduledPaymentExecutorFacade.java | 17 ++-- .../fi/obs/facade/ScheduledPaymentFacade.java | 4 +- .../facade/TransactionManagementFacade.java | 51 ++++++----- .../fi/obs/http/CurrencyServiceClient.java | 9 +- .../java/cz/muni/fi/obs/jms/JmsConfig.java | 5 +- .../java/cz/muni/fi/obs/jms/JmsConsumer.java | 7 +- .../java/cz/muni/fi/obs/jms/JmsProducer.java | 3 +- .../fi/obs/mapper/ScheduledPaymentMapper.java | 3 +- .../muni/fi/obs/service/AccountService.java | 18 ++-- .../fi/obs/service/TransactionService.java | 61 ++++++------- .../ScheduledPaymentRetrievalService.java | 11 +-- .../payment/ScheduledPaymentService.java | 12 +-- .../V4__add_is_bank_account_column.sql | 1 + .../test/java/cz/muni/fi/obs/TestData.java | 8 +- .../obs/controller/AccountControllerTest.java | 34 +++---- .../controller/TransactionControllerTest.java | 32 +++---- .../repository/AccountRepositoryTest.java | 13 +-- .../ScheduledPaymentRepositoryTest.java | 15 ++-- .../repository/TransactionRepositoryTest.java | 36 +++----- .../ScheduledPaymentExecutorFacadeTest.java | 41 ++++----- .../TransactionManagementFacadeTest.java | 18 ++-- .../obs/http/CurrencyServiceClientTest.java | 36 ++++---- .../obs/service/TransactionServiceTest.java | 33 +++---- .../payment/ScheduledPaymentServiceTest.java | 29 +++--- 50 files changed, 429 insertions(+), 426 deletions(-) delete mode 100644 transaction-service/src/it/java/cz/muni/fi/obs/rest/TransactionControllerIntegrationTest.java create mode 100644 transaction-service/src/main/resources/db.migration/V4__add_is_bank_account_column.sql diff --git a/transaction-service/src/it/java/cz/muni/fi/obs/IntegrationTest.java b/transaction-service/src/it/java/cz/muni/fi/obs/IntegrationTest.java index fa7bc24..43d23d3 100644 --- a/transaction-service/src/it/java/cz/muni/fi/obs/IntegrationTest.java +++ b/transaction-service/src/it/java/cz/muni/fi/obs/IntegrationTest.java @@ -1,8 +1,9 @@ package cz.muni.fi.obs; -import cz.muni.fi.obs.jms.JmsProducer; -import io.restassured.RestAssured; -import io.restassured.specification.RequestSpecification; +import static io.restassured.RestAssured.given; + +import java.util.Collections; + import org.junit.jupiter.api.BeforeEach; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -20,9 +21,9 @@ import org.testcontainers.containers.PostgreSQLContainer; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; -import java.util.Collections; - -import static io.restassured.RestAssured.given; +import cz.muni.fi.obs.jms.JmsProducer; +import io.restassured.RestAssured; +import io.restassured.specification.RequestSpecification; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @Testcontainers diff --git a/transaction-service/src/it/java/cz/muni/fi/obs/TransactionServiceTest.java b/transaction-service/src/it/java/cz/muni/fi/obs/TransactionServiceTest.java index dc1d1fc..a9c449e 100644 --- a/transaction-service/src/it/java/cz/muni/fi/obs/TransactionServiceTest.java +++ b/transaction-service/src/it/java/cz/muni/fi/obs/TransactionServiceTest.java @@ -1,14 +1,14 @@ package cz.muni.fi.obs; +import static io.restassured.RestAssured.get; +import static org.assertj.core.api.Assertions.assertThat; + import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.actuate.observability.AutoConfigureObservability; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.server.LocalManagementPort; import org.springframework.test.context.ActiveProfiles; -import static io.restassured.RestAssured.get; -import static org.assertj.core.api.Assertions.assertThat; - @ActiveProfiles("postgres") @SpringBootTest( webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT diff --git a/transaction-service/src/it/java/cz/muni/fi/obs/facade/TransactionManagementFacadeITTest.java b/transaction-service/src/it/java/cz/muni/fi/obs/facade/TransactionManagementFacadeITTest.java index 90b750a..bf32c34 100644 --- a/transaction-service/src/it/java/cz/muni/fi/obs/facade/TransactionManagementFacadeITTest.java +++ b/transaction-service/src/it/java/cz/muni/fi/obs/facade/TransactionManagementFacadeITTest.java @@ -1,5 +1,19 @@ package cz.muni.fi.obs.facade; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.math.BigDecimal; +import java.util.Optional; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.data.domain.Page; + import cz.muni.fi.obs.IntegrationTest; import cz.muni.fi.obs.api.CurrencyExchangeResult; import cz.muni.fi.obs.api.TransactionCreateDto; @@ -9,19 +23,6 @@ import cz.muni.fi.obs.data.dbo.TransactionState; import cz.muni.fi.obs.data.repository.AccountRepository; import cz.muni.fi.obs.data.repository.TransactionRepository; import cz.muni.fi.obs.http.CurrencyServiceClient; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.data.domain.Page; - -import java.math.BigDecimal; -import java.util.Optional; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.when; public class TransactionManagementFacadeITTest extends IntegrationTest { @@ -55,20 +56,17 @@ public class TransactionManagementFacadeITTest extends IntegrationTest { .id("1") .customerId("customer-1") .currencyCode("CZK") - .accountNumber("account-1") .build(); AccountDbo account2 = AccountDbo.builder() .id("2") .customerId("customer-2") .currencyCode("EUR") - .accountNumber("account-2") .build(); - // this account lets us deposit money to real customer accounts AccountDbo bank = AccountDbo.builder() .id("3") .customerId("bank-1") .currencyCode("EUR") - .accountNumber("bank-1") + .isBankAccount(true) .build(); this.account1 = accountRepository.save(account1); @@ -86,7 +84,7 @@ public class TransactionManagementFacadeITTest extends IntegrationTest { @Test public void createThreeTransactions_validTransactions_transactionsAreProcessedToFailed() throws InterruptedException { - TransactionCreateDto transactionCreateDto = new TransactionCreateDto(account2.getAccountNumber(), account1.getAccountNumber(), + TransactionCreateDto transactionCreateDto = new TransactionCreateDto(account2.getId(), account1.getId(), BigDecimal.valueOf(1000), "", ""); for (int i = 0; i < 3; i++) { @@ -96,42 +94,42 @@ public class TransactionManagementFacadeITTest extends IntegrationTest { waitForQueue(); - Page<TransactionDbo> transactionDbos = facade.viewTransactionHistory(account1.getAccountNumber(), 0, 10); + Page<TransactionDbo> transactionDbos = facade.viewTransactionHistory(account1.getId(), 0, 10); assertThat(transactionDbos.getContent().stream() .allMatch(trans -> trans.getTransactionState().equals(TransactionState.INSUFFICIENT_BALANCE))).isTrue(); - assertThat(facade.calculateAccountBalance(account1.getAccountNumber())).isEqualTo(BigDecimal.valueOf(0)); - assertThat(facade.calculateAccountBalance(account2.getAccountNumber())).isEqualTo(BigDecimal.valueOf(0)); + assertThat(facade.calculateAccountBalance(account1.getId())).isEqualTo(BigDecimal.valueOf(0)); + assertThat(facade.calculateAccountBalance(account2.getId())).isEqualTo(BigDecimal.valueOf(0)); } @Test public void depositMoneyToBankThenTransferToAccount_validTransactions_transactionsAreProccessedToSuccess() throws InterruptedException { // deposit 1000 from bank to account2 - TransactionCreateDto transactionCreateDto = new TransactionCreateDto(bank.getAccountNumber(), account2.getAccountNumber(), + TransactionCreateDto transactionCreateDto = new TransactionCreateDto(bank.getId(), account2.getId(), BigDecimal.valueOf(1000), "", ""); facade.createTransaction(transactionCreateDto); waitForQueue(); - Page<TransactionDbo> transactionDbos = facade.viewTransactionHistory(account2.getAccountNumber(), 0, 10); + Page<TransactionDbo> transactionDbos = facade.viewTransactionHistory(account2.getId(), 0, 10); assertThat(transactionDbos.getContent().getFirst().getTransactionState()).isEqualTo(TransactionState.SUCCESSFUL); // now send 1000 to czech account - TransactionCreateDto transactionCreateDto1 = new TransactionCreateDto(account2.getAccountNumber(), account1.getAccountNumber(), + TransactionCreateDto transactionCreateDto1 = new TransactionCreateDto(account2.getId(), account1.getId(), BigDecimal.valueOf(1000), "", ""); prepareTheCurrencyClient(); facade.createTransaction(transactionCreateDto1); waitForQueue(); - Page<TransactionDbo> account1Transactions = facade.viewTransactionHistory(account1.getAccountNumber(), 0, 10); + Page<TransactionDbo> account1Transactions = facade.viewTransactionHistory(account1.getId(), 0, 10); assertThat(account1Transactions.getContent().getFirst().getTransactionState()).isEqualTo(TransactionState.SUCCESSFUL); // verify account balances - assertThat(facade.calculateAccountBalance(bank.getAccountNumber())).isEqualByComparingTo(BigDecimal.valueOf(-1000)); - assertThat(facade.calculateAccountBalance(account2.getAccountNumber())).isEqualByComparingTo(BigDecimal.valueOf(0)); - assertThat(facade.calculateAccountBalance(account1.getAccountNumber())).isEqualByComparingTo(BigDecimal.valueOf(25000)); + assertThat(facade.calculateAccountBalance(bank.getId())).isEqualByComparingTo(BigDecimal.valueOf(-1000)); + assertThat(facade.calculateAccountBalance(account2.getId())).isEqualByComparingTo(BigDecimal.valueOf(0)); + assertThat(facade.calculateAccountBalance(account1.getId())).isEqualByComparingTo(BigDecimal.valueOf(25000)); } private void prepareTheCurrencyClient() { diff --git a/transaction-service/src/it/java/cz/muni/fi/obs/rest/TransactionControllerITTest.java b/transaction-service/src/it/java/cz/muni/fi/obs/rest/TransactionControllerITTest.java index bfe47b5..075959f 100644 --- a/transaction-service/src/it/java/cz/muni/fi/obs/rest/TransactionControllerITTest.java +++ b/transaction-service/src/it/java/cz/muni/fi/obs/rest/TransactionControllerITTest.java @@ -1,18 +1,16 @@ package cz.muni.fi.obs.rest; -import cz.muni.fi.obs.IntegrationTest; -import cz.muni.fi.obs.api.CurrencyExchangeResult; -import cz.muni.fi.obs.api.TransactionCreateDto; -import cz.muni.fi.obs.controller.pagination.PagedResponse; -import cz.muni.fi.obs.data.dbo.AccountDbo; -import cz.muni.fi.obs.data.dbo.TransactionDbo; -import cz.muni.fi.obs.data.dbo.TransactionState; -import cz.muni.fi.obs.data.repository.AccountRepository; -import cz.muni.fi.obs.data.repository.TransactionRepository; -import cz.muni.fi.obs.http.CurrencyServiceClient; -import cz.muni.fi.obs.jms.JmsProducer; -import io.restassured.common.mapper.TypeRef; -import io.restassured.http.ContentType; +import static cz.muni.fi.obs.controller.TransactionController.TRANSACTION_PATH; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.math.BigDecimal; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.stream.Stream; + import org.apache.http.HttpStatus; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; @@ -29,16 +27,19 @@ import org.springframework.jms.core.JmsTemplate; import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; -import java.math.BigDecimal; -import java.util.Collections; -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; - -import static cz.muni.fi.obs.controller.TransactionController.TRANSACTION_PATH; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.when; +import cz.muni.fi.obs.IntegrationTest; +import cz.muni.fi.obs.api.CurrencyExchangeResult; +import cz.muni.fi.obs.api.TransactionCreateDto; +import cz.muni.fi.obs.controller.pagination.PagedResponse; +import cz.muni.fi.obs.data.dbo.AccountDbo; +import cz.muni.fi.obs.data.dbo.TransactionDbo; +import cz.muni.fi.obs.data.dbo.TransactionState; +import cz.muni.fi.obs.data.repository.AccountRepository; +import cz.muni.fi.obs.data.repository.TransactionRepository; +import cz.muni.fi.obs.http.CurrencyServiceClient; +import cz.muni.fi.obs.jms.JmsProducer; +import io.restassured.common.mapper.TypeRef; +import io.restassured.http.ContentType; @TestMethodOrder(OrderAnnotation.class) class TransactionControllerITTest extends IntegrationTest { @@ -67,37 +68,31 @@ class TransactionControllerITTest extends IntegrationTest { .id("1") .customerId("customer-1") .currencyCode("CZK") - .accountNumber("account-1") .build(); AccountDbo account2 = AccountDbo.builder() .id("2") .customerId("customer-2") .currencyCode("EUR") - .accountNumber("account-2") .build(); AccountDbo account3 = AccountDbo.builder() .id("3") .customerId("customer-3") .currencyCode("USD") - .accountNumber("account-3") .build(); AccountDbo account4 = AccountDbo.builder() .id("4") .customerId("customer-4") .currencyCode("CZK") - .accountNumber("account-4") .build(); AccountDbo account5 = AccountDbo.builder() .id("5") .customerId("customer-5") .currencyCode("EUR") - .accountNumber("account-5") .build(); AccountDbo account6 = AccountDbo.builder() .id("6") .customerId("customer-6") .currencyCode("EUR") - .accountNumber("account-6") .build(); TransactionDbo transaction1 = TransactionDbo.builder() @@ -241,7 +236,7 @@ class TransactionControllerITTest extends IntegrationTest { @Order(2) @Test public void calculateBalanceForAccountNumber_balanceNotFound_returnsZero() { - UriComponents components = UriComponentsBuilder.fromPath(buildBalancePath("account-6")).build(); + UriComponents components = UriComponentsBuilder.fromPath(buildBalancePath("6")).build(); BigDecimal balance = requestSpecification(components) .accept(MediaType.APPLICATION_JSON_VALUE) @@ -298,8 +293,8 @@ class TransactionControllerITTest extends IntegrationTest { .fromPath(TRANSACTION_CONTROLLER_PATH + "/transaction/create") .build(); TransactionCreateDto transactionCreateDto = TransactionCreateDto.builder() - .depositsToAccountNumber("account-1") - .withdrawsFromAccountNumber("account-5") + .depositsToAccount("1") + .withdrawsFromAccount("5") .withdrawAmount(BigDecimal.valueOf(10000, 2)) .note("note") .variableSymbol("123") @@ -342,8 +337,8 @@ class TransactionControllerITTest extends IntegrationTest { .fromPath(TRANSACTION_CONTROLLER_PATH + "/transaction/create") .build(); TransactionCreateDto transactionCreateDto = TransactionCreateDto.builder() - .depositsToAccountNumber("") - .withdrawsFromAccountNumber("account-2") + .depositsToAccount("") + .withdrawsFromAccount("2") .withdrawAmount(BigDecimal.valueOf(1000)) .note("note") .variableSymbol("123") @@ -365,8 +360,8 @@ class TransactionControllerITTest extends IntegrationTest { .fromPath(TRANSACTION_CONTROLLER_PATH + "/transaction/create") .build(); TransactionCreateDto transactionCreateDto = TransactionCreateDto.builder() - .depositsToAccountNumber("account-1") - .withdrawsFromAccountNumber("account-5") + .depositsToAccount("1") + .withdrawsFromAccount("5") .withdrawAmount(BigDecimal.valueOf(100000, 2)) .note("note") .variableSymbol("123") @@ -383,7 +378,7 @@ class TransactionControllerITTest extends IntegrationTest { List<TransactionDbo> accountFiveWithdrawals = transactionRepository.findAll() .stream() - .filter(transactionDbo -> transactionDbo.getWithdrawsFrom().getAccountNumber().equals("account-5")) + .filter(transactionDbo -> transactionDbo.getWithdrawsFrom().getId().equals("5")) .toList(); assertThat(accountFiveWithdrawals.stream() @@ -412,19 +407,19 @@ class TransactionControllerITTest extends IntegrationTest { private static Stream<Arguments> provideAccountNumbersAndTransactionCounts() { return Stream.of( - Arguments.of("account-1", 4), - Arguments.of("account-2", 4), - Arguments.of("account-3", 4), - Arguments.of("account-4", 3), - Arguments.of("account-5", 3)); + Arguments.of("1", 4), + Arguments.of("2", 4), + Arguments.of("3", 4), + Arguments.of("4", 3), + Arguments.of("5", 3)); } private static Stream<Arguments> provideAccountNumbersAndBalances() { return Stream.of( - Arguments.of("account-1", BigDecimal.valueOf(1080000, 2)), - Arguments.of("account-2", BigDecimal.valueOf(-15200, 2)), - Arguments.of("account-3", BigDecimal.valueOf(-105000, 2)), - Arguments.of("account-4", BigDecimal.valueOf(175000, 2)), - Arguments.of("account-5", BigDecimal.valueOf(70000, 2))); + Arguments.of("1", BigDecimal.valueOf(1080000, 2)), + Arguments.of("2", BigDecimal.valueOf(-15200, 2)), + Arguments.of("3", BigDecimal.valueOf(-105000, 2)), + Arguments.of("4", BigDecimal.valueOf(175000, 2)), + Arguments.of("5", BigDecimal.valueOf(70000, 2))); } } diff --git a/transaction-service/src/it/java/cz/muni/fi/obs/rest/TransactionControllerIntegrationTest.java b/transaction-service/src/it/java/cz/muni/fi/obs/rest/TransactionControllerIntegrationTest.java deleted file mode 100644 index e69de29..0000000 diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/api/CurrencyExchangeRequest.java b/transaction-service/src/main/java/cz/muni/fi/obs/api/CurrencyExchangeRequest.java index 4187d6b..9d887d7 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/api/CurrencyExchangeRequest.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/api/CurrencyExchangeRequest.java @@ -1,12 +1,13 @@ package cz.muni.fi.obs.api; +import java.math.BigDecimal; + +import org.springframework.validation.annotation.Validated; + import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Builder; -import org.springframework.validation.annotation.Validated; - -import java.math.BigDecimal; @Builder @Validated diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/api/CurrencyExchangeResult.java b/transaction-service/src/main/java/cz/muni/fi/obs/api/CurrencyExchangeResult.java index 49bfeeb..79c7406 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/api/CurrencyExchangeResult.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/api/CurrencyExchangeResult.java @@ -1,9 +1,8 @@ package cz.muni.fi.obs.api; +import java.math.BigDecimal; import lombok.Builder; -import java.math.BigDecimal; - @Builder public record CurrencyExchangeResult(String symbolFrom, String symbolTo, Double exchangeRate, BigDecimal sourceAmount, BigDecimal destAmount) {} diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/api/ScheduledPaymentCreateDto.java b/transaction-service/src/main/java/cz/muni/fi/obs/api/ScheduledPaymentCreateDto.java index d675270..e4b9917 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/api/ScheduledPaymentCreateDto.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/api/ScheduledPaymentCreateDto.java @@ -1,11 +1,11 @@ package cz.muni.fi.obs.api; -import cz.muni.fi.obs.data.dbo.PaymentFrequency; -import jakarta.validation.constraints.NotNull; - import java.time.Instant; import java.time.LocalDate; +import cz.muni.fi.obs.data.dbo.PaymentFrequency; +import jakarta.validation.constraints.NotNull; + public record ScheduledPaymentCreateDto(@NotNull LocalDate executeDate, Instant validUntil, @NotNull PaymentFrequency frequency, diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/api/ScheduledPaymentDto.java b/transaction-service/src/main/java/cz/muni/fi/obs/api/ScheduledPaymentDto.java index 47ae40c..1efbcd8 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/api/ScheduledPaymentDto.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/api/ScheduledPaymentDto.java @@ -1,12 +1,12 @@ package cz.muni.fi.obs.api; +import java.math.BigDecimal; +import java.time.Instant; + import cz.muni.fi.obs.data.dbo.PaymentFrequency; import lombok.Getter; import lombok.Setter; -import java.math.BigDecimal; -import java.time.Instant; - @Getter @Setter public class ScheduledPaymentDto { diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/api/TransactionCreateDto.java b/transaction-service/src/main/java/cz/muni/fi/obs/api/TransactionCreateDto.java index a3617db..f6255c4 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/api/TransactionCreateDto.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/api/TransactionCreateDto.java @@ -1,18 +1,18 @@ package cz.muni.fi.obs.api; +import java.math.BigDecimal; + import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Builder; -import java.math.BigDecimal; - @Builder public record TransactionCreateDto( @NotBlank - String withdrawsFromAccountNumber, + String withdrawsFromAccount, @NotBlank - String depositsToAccountNumber, + String depositsToAccount, @Min(0) @NotNull BigDecimal withdrawAmount, String note, 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 index 55c2327..b5316bb 100644 --- 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 @@ -1,13 +1,13 @@ package cz.muni.fi.obs.api; +import java.math.BigDecimal; + 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 { diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/config/FeignClientConfiguration.java b/transaction-service/src/main/java/cz/muni/fi/obs/config/FeignClientConfiguration.java index 6dedfce..1f8add0 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/config/FeignClientConfiguration.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/config/FeignClientConfiguration.java @@ -1,8 +1,9 @@ package cz.muni.fi.obs.config; -import cz.muni.fi.obs.http.CurrencyServiceClient; import org.springframework.context.annotation.Bean; +import cz.muni.fi.obs.http.CurrencyServiceClient; + public class FeignClientConfiguration { public static class CurrencyServiceClientConfiguration { diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/controller/AccountController.java b/transaction-service/src/main/java/cz/muni/fi/obs/controller/AccountController.java index 7db26ab..bd08533 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/controller/AccountController.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/controller/AccountController.java @@ -1,13 +1,8 @@ package cz.muni.fi.obs.controller; -import cz.muni.fi.obs.api.AccountCreateDto; -import cz.muni.fi.obs.data.dbo.AccountDbo; -import cz.muni.fi.obs.exceptions.ResourceNotFoundException; -import cz.muni.fi.obs.facade.TransactionManagementFacade; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import jakarta.validation.Valid; -import lombok.extern.slf4j.Slf4j; +import static cz.muni.fi.obs.controller.AccountController.ACCOUNT_PATH; + +import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; @@ -24,9 +19,14 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import java.util.List; - -import static cz.muni.fi.obs.controller.AccountController.ACCOUNT_PATH; +import cz.muni.fi.obs.api.AccountCreateDto; +import cz.muni.fi.obs.data.dbo.AccountDbo; +import cz.muni.fi.obs.exceptions.ResourceNotFoundException; +import cz.muni.fi.obs.facade.TransactionManagementFacade; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.validation.Valid; +import lombok.extern.slf4j.Slf4j; @Slf4j @Validated @@ -69,7 +69,7 @@ public class AccountController { ) @GetMapping(value = "/account/{accountNumber}", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<AccountDbo> findAccountById(@PathVariable("accountNumber") String accountNumber) { - return ResponseEntity.ok(facade.findAccountByAccountNumber(accountNumber)); + return ResponseEntity.ok(facade.findAccountByAccountId(accountNumber)); } @Operation( diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/controller/ControllerAdvice.java b/transaction-service/src/main/java/cz/muni/fi/obs/controller/ControllerAdvice.java index 0c62221..7435862 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/controller/ControllerAdvice.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/controller/ControllerAdvice.java @@ -1,9 +1,10 @@ package cz.muni.fi.obs.controller; -import cz.muni.fi.obs.exceptions.NotFoundResponse; -import cz.muni.fi.obs.exceptions.ResourceNotFoundException; -import cz.muni.fi.obs.exceptions.ValidationErrors; -import cz.muni.fi.obs.exceptions.ValidationFailedResponse; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.postgresql.util.PSQLException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -14,10 +15,10 @@ import org.springframework.validation.ObjectError; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import cz.muni.fi.obs.exceptions.NotFoundResponse; +import cz.muni.fi.obs.exceptions.ResourceNotFoundException; +import cz.muni.fi.obs.exceptions.ValidationErrors; +import cz.muni.fi.obs.exceptions.ValidationFailedResponse; @RestControllerAdvice public class ControllerAdvice { diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/controller/ScheduledPaymentController.java b/transaction-service/src/main/java/cz/muni/fi/obs/controller/ScheduledPaymentController.java index 2d7b153..dbfcca0 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/controller/ScheduledPaymentController.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/controller/ScheduledPaymentController.java @@ -1,11 +1,9 @@ package cz.muni.fi.obs.controller; +import static cz.muni.fi.obs.controller.ScheduledPaymentController.SCHEDULED_PAYMENT_PATH; + +import java.time.Instant; -import cz.muni.fi.obs.api.ScheduledPaymentCreateDto; -import cz.muni.fi.obs.api.ScheduledPaymentDto; -import cz.muni.fi.obs.facade.ScheduledPaymentFacade; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; @@ -15,9 +13,11 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import java.time.Instant; - -import static cz.muni.fi.obs.controller.ScheduledPaymentController.SCHEDULED_PAYMENT_PATH; +import cz.muni.fi.obs.api.ScheduledPaymentCreateDto; +import cz.muni.fi.obs.api.ScheduledPaymentDto; +import cz.muni.fi.obs.facade.ScheduledPaymentFacade; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; @Tag(name = "ScheduledPayment", description = "Scheduled payment creation and disabling") @RestController 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 b31bb6a..94fcc0a 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,15 +1,12 @@ 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; -import cz.muni.fi.obs.facade.TransactionManagementFacade; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import jakarta.validation.Valid; -import lombok.extern.slf4j.Slf4j; +import static cz.muni.fi.obs.controller.TransactionController.TRANSACTION_PATH; +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.Optional; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.http.HttpStatus; @@ -23,12 +20,16 @@ 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.time.LocalDate; -import java.util.Optional; - -import static cz.muni.fi.obs.controller.TransactionController.TRANSACTION_PATH; -import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; +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; +import cz.muni.fi.obs.facade.TransactionManagementFacade; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.validation.Valid; +import lombok.extern.slf4j.Slf4j; @Slf4j @Validated diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/controller/pagination/PagedResponse.java b/transaction-service/src/main/java/cz/muni/fi/obs/controller/pagination/PagedResponse.java index 1231126..7dac443 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/controller/pagination/PagedResponse.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/controller/pagination/PagedResponse.java @@ -1,9 +1,9 @@ package cz.muni.fi.obs.controller.pagination; -import org.springframework.data.domain.Page; - import java.util.List; +import org.springframework.data.domain.Page; + public record PagedResponse<T>(List<T> records, Pagination pagination) { public static <T> PagedResponse<T> fromPage(Page<T> page) { diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/controller/pagination/Pagination.java b/transaction-service/src/main/java/cz/muni/fi/obs/controller/pagination/Pagination.java index 664d498..1e15b7e 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/controller/pagination/Pagination.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/controller/pagination/Pagination.java @@ -1,8 +1,9 @@ package cz.muni.fi.obs.controller.pagination; -import lombok.Builder; import org.springframework.data.domain.Page; +import lombok.Builder; + @Builder public record Pagination( long totalRecords, diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/data/TransactionServiceDataSeeder.java b/transaction-service/src/main/java/cz/muni/fi/obs/data/TransactionServiceDataSeeder.java index 04767b2..de1e57c 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/data/TransactionServiceDataSeeder.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/data/TransactionServiceDataSeeder.java @@ -1,5 +1,15 @@ package cz.muni.fi.obs.data; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.stereotype.Component; + +import com.fasterxml.jackson.core.type.TypeReference; + import cz.muni.fi.obs.api.ScheduledPaymentCreateDto; import cz.muni.fi.obs.api.TransactionCreateDto; import cz.muni.fi.obs.data.dbo.AccountDbo; @@ -14,16 +24,6 @@ import cz.muni.fi.obs.util.Resources; import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.stereotype.Component; - -import java.math.BigDecimal; -import java.time.LocalDate; -import java.util.List; - -import com.fasterxml.jackson.core.type.TypeReference; - @Component @ConditionalOnExpression("${data.initialize:false}") @Slf4j diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/data/dbo/AccountDbo.java b/transaction-service/src/main/java/cz/muni/fi/obs/data/dbo/AccountDbo.java index b6947b8..c5cf558 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/data/dbo/AccountDbo.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/data/dbo/AccountDbo.java @@ -27,4 +27,6 @@ public class AccountDbo { private String customerId; @Column(name = "currency_code", nullable = false) private String currencyCode; + @Column(name = "bank_account", nullable = false) + private boolean isBankAccount = false; } diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/data/dbo/ScheduledPayment.java b/transaction-service/src/main/java/cz/muni/fi/obs/data/dbo/ScheduledPayment.java index 80e657c..37c9be3 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/data/dbo/ScheduledPayment.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/data/dbo/ScheduledPayment.java @@ -1,5 +1,9 @@ package cz.muni.fi.obs.data.dbo; +import java.math.BigDecimal; +import java.time.Instant; +import java.util.UUID; + import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.ManyToOne; @@ -7,10 +11,6 @@ import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; -import java.math.BigDecimal; -import java.time.Instant; -import java.util.UUID; - @Getter @Setter @Entity diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/data/dbo/TransactionDbo.java b/transaction-service/src/main/java/cz/muni/fi/obs/data/dbo/TransactionDbo.java index 8095094..14157eb 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/data/dbo/TransactionDbo.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/data/dbo/TransactionDbo.java @@ -1,6 +1,8 @@ package cz.muni.fi.obs.data.dbo; import java.math.BigDecimal; +import java.time.Instant; +import java.util.UUID; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -17,10 +19,6 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import java.math.BigDecimal; -import java.util.UUID; -import java.time.Instant; - @Entity @Builder @Setter diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/data/repository/AccountRepository.java b/transaction-service/src/main/java/cz/muni/fi/obs/data/repository/AccountRepository.java index 8050574..47b98ec 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/data/repository/AccountRepository.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/data/repository/AccountRepository.java @@ -1,11 +1,12 @@ package cz.muni.fi.obs.data.repository; -import cz.muni.fi.obs.data.dbo.AccountDbo; +import java.util.List; +import java.util.Optional; + import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; -import java.util.List; -import java.util.Optional; +import cz.muni.fi.obs.data.dbo.AccountDbo; @Repository public interface AccountRepository extends JpaRepository<AccountDbo, String> { diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/data/repository/ScheduledPaymentRepository.java b/transaction-service/src/main/java/cz/muni/fi/obs/data/repository/ScheduledPaymentRepository.java index 22e818d..233ced9 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/data/repository/ScheduledPaymentRepository.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/data/repository/ScheduledPaymentRepository.java @@ -1,12 +1,13 @@ package cz.muni.fi.obs.data.repository; -import cz.muni.fi.obs.data.dbo.ScheduledPayment; +import java.time.Instant; +import java.util.List; + import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; -import java.time.Instant; -import java.util.List; +import cz.muni.fi.obs.data.dbo.ScheduledPayment; @Repository public interface ScheduledPaymentRepository extends JpaRepository<ScheduledPayment, String> { diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/data/repository/TransactionRepository.java b/transaction-service/src/main/java/cz/muni/fi/obs/data/repository/TransactionRepository.java index 3ba395f..a3e9948 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/data/repository/TransactionRepository.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/data/repository/TransactionRepository.java @@ -1,14 +1,15 @@ package cz.muni.fi.obs.data.repository; -import cz.muni.fi.obs.data.dbo.TransactionDbo; +import java.time.Instant; +import java.util.List; + import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; -import java.time.Instant; -import java.util.List; +import cz.muni.fi.obs.data.dbo.TransactionDbo; @Repository public interface TransactionRepository extends JpaRepository<TransactionDbo, String> { diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/exceptions/ValidationErrors.java b/transaction-service/src/main/java/cz/muni/fi/obs/exceptions/ValidationErrors.java index 39280e1..d7f0713 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/exceptions/ValidationErrors.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/exceptions/ValidationErrors.java @@ -1,12 +1,11 @@ package cz.muni.fi.obs.exceptions; +import java.util.List; +import java.util.Map; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; -import java.util.List; -import java.util.Map; - @Builder public record ValidationErrors( @Schema(description = "List of global errors", example = "[\"Invalid birth number for given nationality\"]") diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/facade/ScheduledPaymentExecutorFacade.java b/transaction-service/src/main/java/cz/muni/fi/obs/facade/ScheduledPaymentExecutorFacade.java index ef37001..4226df4 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/facade/ScheduledPaymentExecutorFacade.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/facade/ScheduledPaymentExecutorFacade.java @@ -1,18 +1,19 @@ package cz.muni.fi.obs.facade; -import cz.muni.fi.obs.api.TransactionCreateDto; -import cz.muni.fi.obs.data.dbo.ScheduledPayment; -import cz.muni.fi.obs.service.TransactionService; -import cz.muni.fi.obs.service.payment.ScheduledPaymentRetrievalService; -import lombok.extern.slf4j.Slf4j; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; +import cz.muni.fi.obs.api.TransactionCreateDto; +import cz.muni.fi.obs.data.dbo.ScheduledPayment; +import cz.muni.fi.obs.service.TransactionService; +import cz.muni.fi.obs.service.payment.ScheduledPaymentRetrievalService; +import lombok.extern.slf4j.Slf4j; @Slf4j @Transactional diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/facade/ScheduledPaymentFacade.java b/transaction-service/src/main/java/cz/muni/fi/obs/facade/ScheduledPaymentFacade.java index 98098f9..520b9f0 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/facade/ScheduledPaymentFacade.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/facade/ScheduledPaymentFacade.java @@ -1,10 +1,10 @@ package cz.muni.fi.obs.facade; +import java.time.Instant; + import cz.muni.fi.obs.api.ScheduledPaymentCreateDto; import cz.muni.fi.obs.api.ScheduledPaymentDto; -import java.time.Instant; - public interface ScheduledPaymentFacade { ScheduledPaymentDto createPayment(ScheduledPaymentCreateDto createDto); 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 a51c858..431c2a2 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 @@ -1,26 +1,26 @@ package cz.muni.fi.obs.facade; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +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; + 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; import cz.muni.fi.obs.jms.JmsProducer; import cz.muni.fi.obs.service.AccountService; 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; - -import java.math.BigDecimal; -import java.time.LocalDate; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; @Slf4j @Component @@ -31,7 +31,8 @@ public class TransactionManagementFacade { private final JmsProducer jmsProducer; @Autowired - public TransactionManagementFacade(TransactionService transactionService, AccountService accountService, JmsProducer jmsProducer) { + public TransactionManagementFacade(TransactionService transactionService, AccountService accountService, + JmsProducer jmsProducer) { this.transactionService = transactionService; this.accountService = accountService; this.jmsProducer = jmsProducer; @@ -47,13 +48,13 @@ public class TransactionManagementFacade { return createdTransaction; } - public Page<TransactionDbo> viewTransactionHistory(String accountNumber, int pageNumber, int pageSize) { - AccountDbo account = findAccountByAccountNumber(accountNumber); + public Page<TransactionDbo> viewTransactionHistory(String accountId, int pageNumber, int pageSize) { + AccountDbo account = findAccountByAccountId(accountId); return transactionService.viewTransactionHistory(account.getId(), pageNumber, pageSize); } - public BigDecimal calculateAccountBalance(String accountNumber) { - AccountDbo account = findAccountByAccountNumber(accountNumber); + public BigDecimal calculateAccountBalance(String accountId) { + AccountDbo account = findAccountByAccountId(accountId); return transactionService.calculateAccountBalance(account.getId()); } @@ -61,21 +62,23 @@ public class TransactionManagementFacade { return accountService.createAccount(accountCreateDto); } - public AccountDbo findAccountByAccountNumber(String accountNumber) { - return accountService.findAccountByAccountNumber(accountNumber); + public AccountDbo findAccountByAccountId(String accountId) { + return accountService.findAccountByAccountId(accountId); } public List<AccountDbo> findAccountsByCustomerId(String customerId) { return accountService.findAccountsByCustomerId(customerId); } - public Page<AccountDbo> listAccounts(Pageable pageable) { - return accountService.listAccounts(pageable); - } + public Page<AccountDbo> listAccounts(Pageable pageable) { + return accountService.listAccounts(pageable); + } 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()), + 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()); } diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/http/CurrencyServiceClient.java b/transaction-service/src/main/java/cz/muni/fi/obs/http/CurrencyServiceClient.java index 6913989..83766fa 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/http/CurrencyServiceClient.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/http/CurrencyServiceClient.java @@ -1,13 +1,14 @@ package cz.muni.fi.obs.http; +import java.util.Optional; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + import cz.muni.fi.obs.api.CurrencyExchangeRequest; import cz.muni.fi.obs.api.CurrencyExchangeResult; import cz.muni.fi.obs.config.FeignClientConfiguration; import lombok.extern.slf4j.Slf4j; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.PostMapping; - -import java.util.Optional; @FeignClient( name = "currency-service", diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/jms/JmsConfig.java b/transaction-service/src/main/java/cz/muni/fi/obs/jms/JmsConfig.java index 27b393a..36138fa 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/jms/JmsConfig.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/jms/JmsConfig.java @@ -1,13 +1,14 @@ package cz.muni.fi.obs.jms; -import cz.muni.fi.obs.service.TransactionService; -import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jms.annotation.EnableJms; import org.springframework.jms.core.JmsTemplate; +import cz.muni.fi.obs.service.TransactionService; +import lombok.extern.slf4j.Slf4j; + @Configuration @EnableJms @ConditionalOnProperty(prefix = "jms", name = "enabled", havingValue = "true") diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/jms/JmsConsumer.java b/transaction-service/src/main/java/cz/muni/fi/obs/jms/JmsConsumer.java index b678300..875eff8 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/jms/JmsConsumer.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/jms/JmsConsumer.java @@ -1,10 +1,11 @@ package cz.muni.fi.obs.jms; -import cz.muni.fi.obs.service.TransactionService; -import lombok.extern.slf4j.Slf4j; +import static cz.muni.fi.obs.jms.JmsProducer.TRANSACTION_QUEUE_NAME; + import org.springframework.jms.annotation.JmsListener; -import static cz.muni.fi.obs.jms.JmsProducer.TRANSACTION_QUEUE_NAME; +import cz.muni.fi.obs.service.TransactionService; +import lombok.extern.slf4j.Slf4j; @Slf4j public class JmsConsumer { diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/jms/JmsProducer.java b/transaction-service/src/main/java/cz/muni/fi/obs/jms/JmsProducer.java index 4321406..413150a 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/jms/JmsProducer.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/jms/JmsProducer.java @@ -1,8 +1,9 @@ package cz.muni.fi.obs.jms; -import lombok.extern.slf4j.Slf4j; import org.springframework.jms.core.JmsTemplate; +import lombok.extern.slf4j.Slf4j; + @Slf4j public class JmsProducer { diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/mapper/ScheduledPaymentMapper.java b/transaction-service/src/main/java/cz/muni/fi/obs/mapper/ScheduledPaymentMapper.java index b0e40bb..08fa224 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/mapper/ScheduledPaymentMapper.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/mapper/ScheduledPaymentMapper.java @@ -1,8 +1,9 @@ package cz.muni.fi.obs.mapper; +import org.mapstruct.Mapper; + import cz.muni.fi.obs.api.ScheduledPaymentDto; import cz.muni.fi.obs.data.dbo.ScheduledPayment; -import org.mapstruct.Mapper; @Mapper public interface ScheduledPaymentMapper { diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/service/AccountService.java b/transaction-service/src/main/java/cz/muni/fi/obs/service/AccountService.java index 2aa8500..b4c1801 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/service/AccountService.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/service/AccountService.java @@ -1,17 +1,17 @@ package cz.muni.fi.obs.service; -import cz.muni.fi.obs.api.AccountCreateDto; -import cz.muni.fi.obs.data.dbo.AccountDbo; -import cz.muni.fi.obs.data.repository.AccountRepository; -import cz.muni.fi.obs.exceptions.ResourceNotFoundException; +import java.util.List; +import java.util.UUID; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -import java.util.List; -import java.util.UUID; +import cz.muni.fi.obs.api.AccountCreateDto; +import cz.muni.fi.obs.data.dbo.AccountDbo; +import cz.muni.fi.obs.data.repository.AccountRepository; +import cz.muni.fi.obs.exceptions.ResourceNotFoundException; @Service public class AccountService { @@ -32,9 +32,9 @@ public class AccountService { return repository.save(accountDbo); } - public AccountDbo findAccountByAccountId(String accountNumber) { - return repository.findById(accountNumber) - .orElseThrow(() -> new ResourceNotFoundException(AccountDbo.class, accountNumber)); + public AccountDbo findAccountByAccountId(String accountId) { + return repository.findById(accountId) + .orElseThrow(() -> new ResourceNotFoundException(AccountDbo.class, accountId)); } public List<AccountDbo> findAccountsByCustomerId(String customerId) { diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/service/TransactionService.java b/transaction-service/src/main/java/cz/muni/fi/obs/service/TransactionService.java index 9347013..d167120 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/service/TransactionService.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/service/TransactionService.java @@ -1,5 +1,23 @@ package cz.muni.fi.obs.service; +import static cz.muni.fi.obs.data.dbo.TransactionState.CANNOT_EXCHANGE; +import static cz.muni.fi.obs.data.dbo.TransactionState.INSUFFICIENT_BALANCE; +import static cz.muni.fi.obs.data.dbo.TransactionState.PENDING; +import static cz.muni.fi.obs.data.dbo.TransactionState.SUCCESSFUL; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneOffset; +import java.util.Optional; +import java.util.UUID; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + import cz.muni.fi.obs.api.CurrencyExchangeRequest; import cz.muni.fi.obs.api.CurrencyExchangeResult; import cz.muni.fi.obs.api.TransactionCreateDto; @@ -12,26 +30,6 @@ import cz.muni.fi.obs.exceptions.ResourceNotFoundException; import cz.muni.fi.obs.http.CurrencyServiceClient; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.math.BigDecimal; -import java.time.LocalDate; -import java.time.ZoneOffset; -import java.util.List; -import java.util.Optional; -import java.util.UUID; - -import static cz.muni.fi.obs.data.dbo.TransactionState.CANNOT_EXCHANGE; -import static cz.muni.fi.obs.data.dbo.TransactionState.INSUFFICIENT_BALANCE; -import static cz.muni.fi.obs.data.dbo.TransactionState.PENDING; -import static cz.muni.fi.obs.data.dbo.TransactionState.SUCCESSFUL; - @Slf4j @Service @Transactional @@ -40,17 +38,14 @@ public class TransactionService { private final TransactionRepository repository; private final CurrencyServiceClient client; private final AccountRepository accountRepository; - private final List<String> bankAccounts; @Autowired public TransactionService(TransactionRepository repository, - CurrencyServiceClient client, - AccountRepository accountRepository, - @Value("${bank.bank-accounts}") List<String> bankAccounts) { + CurrencyServiceClient client, + AccountRepository accountRepository) { this.repository = repository; this.client = client; this.accountRepository = accountRepository; - this.bankAccounts = bankAccounts; } public BigDecimal calculateAccountBalance(String accountId) { @@ -79,10 +74,10 @@ public class TransactionService { } public TransactionDbo createTransaction(TransactionCreateDto transaction) { - AccountDbo withdrawsFromAccount = accountRepository.findAccountDboByAccountNumber(transaction.withdrawsFromAccountNumber()) - .orElseThrow(() -> new ResourceNotFoundException(AccountDbo.class, transaction.withdrawsFromAccountNumber())); - AccountDbo depositsToAccount = accountRepository.findAccountDboByAccountNumber(transaction.depositsToAccountNumber()) - .orElseThrow(() -> new ResourceNotFoundException(AccountDbo.class, transaction.depositsToAccountNumber())); + AccountDbo withdrawsFromAccount = accountRepository.findById(transaction.withdrawsFromAccount()) + .orElseThrow(() -> new ResourceNotFoundException(AccountDbo.class, transaction.withdrawsFromAccount())); + AccountDbo depositsToAccount = accountRepository.findById(transaction.depositsToAccount()) + .orElseThrow(() -> new ResourceNotFoundException(AccountDbo.class, transaction.depositsToAccount())); TransactionDbo transactionDbo = TransactionDbo.builder() .id(UUID.randomUUID().toString()) @@ -124,11 +119,11 @@ public class TransactionService { transaction.setDepositAmount(transaction.getWithdrawAmount()); } - // allow sub-zero withdrawals if this is our bank accounts to simulate loaning money as it works in real banks - if (!bankAccounts.contains(transaction.getWithdrawsFrom().getAccountNumber())) { - transaction.setTransactionState(computeTransactionState(transaction.getWithdrawsFrom().getId(), transaction.getWithdrawAmount())); - } else { + if (transaction.getWithdrawsFrom().isBankAccount()) { transaction.setTransactionState(SUCCESSFUL); + } else { + transaction.setTransactionState( + computeTransactionState(transaction.getWithdrawsFrom().getId(), transaction.getWithdrawAmount())); } repository.save(transaction); diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/service/payment/ScheduledPaymentRetrievalService.java b/transaction-service/src/main/java/cz/muni/fi/obs/service/payment/ScheduledPaymentRetrievalService.java index 6c8dbc7..cdff494 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/service/payment/ScheduledPaymentRetrievalService.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/service/payment/ScheduledPaymentRetrievalService.java @@ -1,14 +1,15 @@ package cz.muni.fi.obs.service.payment; -import cz.muni.fi.obs.data.dbo.ScheduledPayment; -import cz.muni.fi.obs.data.repository.ScheduledPaymentRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - import java.time.Instant; import java.time.LocalDate; import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import cz.muni.fi.obs.data.dbo.ScheduledPayment; +import cz.muni.fi.obs.data.repository.ScheduledPaymentRepository; + @Service public class ScheduledPaymentRetrievalService { diff --git a/transaction-service/src/main/java/cz/muni/fi/obs/service/payment/ScheduledPaymentService.java b/transaction-service/src/main/java/cz/muni/fi/obs/service/payment/ScheduledPaymentService.java index 1ea9ebc..e5e75e4 100644 --- a/transaction-service/src/main/java/cz/muni/fi/obs/service/payment/ScheduledPaymentService.java +++ b/transaction-service/src/main/java/cz/muni/fi/obs/service/payment/ScheduledPaymentService.java @@ -1,5 +1,11 @@ package cz.muni.fi.obs.service.payment; +import java.time.Instant; +import java.time.LocalDate; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import cz.muni.fi.obs.api.ScheduledPaymentCreateDto; import cz.muni.fi.obs.api.ScheduledPaymentDto; @@ -11,12 +17,6 @@ import cz.muni.fi.obs.data.repository.ScheduledPaymentRepository; import cz.muni.fi.obs.exceptions.ResourceNotFoundException; import cz.muni.fi.obs.facade.ScheduledPaymentFacade; import cz.muni.fi.obs.mapper.ScheduledPaymentMapper; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.time.Instant; -import java.time.LocalDate; @Service @Transactional diff --git a/transaction-service/src/main/resources/db.migration/V4__add_is_bank_account_column.sql b/transaction-service/src/main/resources/db.migration/V4__add_is_bank_account_column.sql new file mode 100644 index 0000000..8c92d19 --- /dev/null +++ b/transaction-service/src/main/resources/db.migration/V4__add_is_bank_account_column.sql @@ -0,0 +1 @@ +ALTER TABLE accounts ADD COLUMN is_bank_account BOOLEAN NOT NULL DEFAULT FALSE; diff --git a/transaction-service/src/test/java/cz/muni/fi/obs/TestData.java b/transaction-service/src/test/java/cz/muni/fi/obs/TestData.java index b28f82c..ddf2bd1 100644 --- a/transaction-service/src/test/java/cz/muni/fi/obs/TestData.java +++ b/transaction-service/src/test/java/cz/muni/fi/obs/TestData.java @@ -1,14 +1,14 @@ package cz.muni.fi.obs; +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.List; + import cz.muni.fi.obs.api.TransactionCreateDto; import cz.muni.fi.obs.data.dbo.AccountDbo; import cz.muni.fi.obs.data.dbo.TransactionDbo; import cz.muni.fi.obs.data.dbo.TransactionState; -import java.math.BigDecimal; -import java.util.Arrays; -import java.util.List; - public class TestData { public static final String accountId = "account-id"; diff --git a/transaction-service/src/test/java/cz/muni/fi/obs/controller/AccountControllerTest.java b/transaction-service/src/test/java/cz/muni/fi/obs/controller/AccountControllerTest.java index 9b18566..337a9de 100644 --- a/transaction-service/src/test/java/cz/muni/fi/obs/controller/AccountControllerTest.java +++ b/transaction-service/src/test/java/cz/muni/fi/obs/controller/AccountControllerTest.java @@ -1,17 +1,5 @@ package cz.muni.fi.obs.controller; -import cz.muni.fi.obs.api.AccountCreateDto; -import cz.muni.fi.obs.data.dbo.AccountDbo; -import cz.muni.fi.obs.facade.TransactionManagementFacade; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.MediaType; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.web.servlet.MockMvc; -import util.JsonConvertor; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; @@ -21,6 +9,20 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.web.servlet.MockMvc; + +import cz.muni.fi.obs.api.AccountCreateDto; +import cz.muni.fi.obs.data.dbo.AccountDbo; +import cz.muni.fi.obs.exceptions.ResourceNotFoundException; +import cz.muni.fi.obs.facade.TransactionManagementFacade; +import cz.muni.fi.obs.util.JsonConvertor; + @WebMvcTest @ContextConfiguration(classes = {AccountController.class, ControllerAdvice.class}) class AccountControllerTest { @@ -63,7 +65,7 @@ class AccountControllerTest { .currencyCode("CZK") .build(); - when(facade.findAccountByAccountNumber("1")).thenReturn(expectedAccount); + when(facade.findAccountByAccountId("1")).thenReturn(expectedAccount); var response = mockMvc.perform(get("/v1/accounts/account/{accountNumber}", "1") .accept(MediaType.APPLICATION_JSON)) @@ -71,19 +73,19 @@ class AccountControllerTest { .andReturn().getResponse().getContentAsString(); var actualAccount = JsonConvertor.convertJsonToObject(response, AccountDbo.class); - verify(facade).findAccountByAccountNumber("1"); + verify(facade).findAccountByAccountId("1"); assertThat(actualAccount).isEqualTo(expectedAccount); } @Test void testFindAccountById_nonExistingId_returnsNotFound() throws Exception { - when(facade.findAccountByAccountNumber(any())) + when(facade.findAccountByAccountId(any())) .thenThrow(new ResourceNotFoundException(AccountDbo.class, "0")); mockMvc.perform(get("/v1/accounts/account/{accountNumber}", "0") .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isNotFound()); - verify(facade).findAccountByAccountNumber("0"); + verify(facade).findAccountByAccountId("0"); } } diff --git a/transaction-service/src/test/java/cz/muni/fi/obs/controller/TransactionControllerTest.java b/transaction-service/src/test/java/cz/muni/fi/obs/controller/TransactionControllerTest.java index 25589ee..5fe1c52 100644 --- a/transaction-service/src/test/java/cz/muni/fi/obs/controller/TransactionControllerTest.java +++ b/transaction-service/src/test/java/cz/muni/fi/obs/controller/TransactionControllerTest.java @@ -1,11 +1,15 @@ package cz.muni.fi.obs.controller; -import com.fasterxml.jackson.core.type.TypeReference; -import cz.muni.fi.obs.TestData; -import cz.muni.fi.obs.api.TransactionCreateDto; -import cz.muni.fi.obs.controller.pagination.PagedResponse; -import cz.muni.fi.obs.data.dbo.TransactionDbo; -import cz.muni.fi.obs.facade.TransactionManagementFacade; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Optional; + import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; @@ -16,17 +20,15 @@ import org.springframework.data.domain.PageRequest; import org.springframework.http.MediaType; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.web.servlet.MockMvc; -import cz.muni.fi.obs.util.JsonConvertor; -import java.math.BigDecimal; -import java.util.List; -import java.util.Optional; +import com.fasterxml.jackson.core.type.TypeReference; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.when; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import cz.muni.fi.obs.TestData; +import cz.muni.fi.obs.api.TransactionCreateDto; +import cz.muni.fi.obs.controller.pagination.PagedResponse; +import cz.muni.fi.obs.data.dbo.TransactionDbo; +import cz.muni.fi.obs.facade.TransactionManagementFacade; +import cz.muni.fi.obs.util.JsonConvertor; @WebMvcTest @ContextConfiguration(classes = {TransactionController.class, ControllerAdvice.class}) diff --git a/transaction-service/src/test/java/cz/muni/fi/obs/data/repository/AccountRepositoryTest.java b/transaction-service/src/test/java/cz/muni/fi/obs/data/repository/AccountRepositoryTest.java index 3e44616..ed7da40 100644 --- a/transaction-service/src/test/java/cz/muni/fi/obs/data/repository/AccountRepositoryTest.java +++ b/transaction-service/src/test/java/cz/muni/fi/obs/data/repository/AccountRepositoryTest.java @@ -1,17 +1,18 @@ package cz.muni.fi.obs.data.repository; -import cz.muni.fi.obs.data.dbo.AccountDbo; +import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.test.context.jdbc.Sql.ExecutionPhase.AFTER_TEST_CLASS; +import static org.springframework.test.context.jdbc.Sql.ExecutionPhase.BEFORE_TEST_CLASS; + +import java.util.Optional; + import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.jdbc.Sql; -import java.util.Optional; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.springframework.test.context.jdbc.Sql.ExecutionPhase.AFTER_TEST_CLASS; -import static org.springframework.test.context.jdbc.Sql.ExecutionPhase.BEFORE_TEST_CLASS; +import cz.muni.fi.obs.data.dbo.AccountDbo; @Sql(value = { "/initialize_db.sql" }, executionPhase = BEFORE_TEST_CLASS) @Sql(value = { "/drop_all.sql" }, executionPhase = AFTER_TEST_CLASS) diff --git a/transaction-service/src/test/java/cz/muni/fi/obs/data/repository/ScheduledPaymentRepositoryTest.java b/transaction-service/src/test/java/cz/muni/fi/obs/data/repository/ScheduledPaymentRepositoryTest.java index 43d1bfe..3cc6d42 100644 --- a/transaction-service/src/test/java/cz/muni/fi/obs/data/repository/ScheduledPaymentRepositoryTest.java +++ b/transaction-service/src/test/java/cz/muni/fi/obs/data/repository/ScheduledPaymentRepositoryTest.java @@ -1,18 +1,19 @@ package cz.muni.fi.obs.data.repository; -import cz.muni.fi.obs.data.dbo.AccountDbo; -import cz.muni.fi.obs.data.dbo.ScheduledPayment; +import static org.assertj.core.api.Assertions.assertThat; + +import java.math.BigDecimal; +import java.time.Instant; +import java.util.List; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.test.context.ActiveProfiles; -import java.math.BigDecimal; -import java.time.Instant; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; +import cz.muni.fi.obs.data.dbo.AccountDbo; +import cz.muni.fi.obs.data.dbo.ScheduledPayment; @DataJpaTest @ActiveProfiles("test") diff --git a/transaction-service/src/test/java/cz/muni/fi/obs/data/repository/TransactionRepositoryTest.java b/transaction-service/src/test/java/cz/muni/fi/obs/data/repository/TransactionRepositoryTest.java index 84ec4fb..5639cb0 100644 --- a/transaction-service/src/test/java/cz/muni/fi/obs/data/repository/TransactionRepositoryTest.java +++ b/transaction-service/src/test/java/cz/muni/fi/obs/data/repository/TransactionRepositoryTest.java @@ -1,38 +1,28 @@ package cz.muni.fi.obs.data.repository; -import cz.muni.fi.obs.data.dbo.AccountDbo; -import cz.muni.fi.obs.data.dbo.TransactionDbo; -import cz.muni.fi.obs.data.dbo.TransactionState; - -import cz.muni.fi.obs.data.dbo.AccountDbo; -import cz.muni.fi.obs.data.dbo.TransactionDbo; -import cz.muni.fi.obs.data.repository.TransactionRepository; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.jdbc.Sql; - -import java.math.BigDecimal; -import java.util.List; - import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; import static org.springframework.test.context.jdbc.Sql.ExecutionPhase.AFTER_TEST_CLASS; import static org.springframework.test.context.jdbc.Sql.ExecutionPhase.BEFORE_TEST_CLASS; + import java.math.BigDecimal; import java.time.Instant; import java.time.LocalDate; import java.time.ZoneOffset; import java.util.List; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.tuple; -import static org.springframework.test.context.jdbc.Sql.ExecutionPhase.AFTER_TEST_CLASS; -import static org.springframework.test.context.jdbc.Sql.ExecutionPhase.BEFORE_TEST_CLASS; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.jdbc.Sql; + +import cz.muni.fi.obs.data.dbo.AccountDbo; +import cz.muni.fi.obs.data.dbo.TransactionDbo; +import cz.muni.fi.obs.data.dbo.TransactionState; @Sql(value = { "/initialize_db.sql" }, executionPhase = BEFORE_TEST_CLASS) @Sql(value = { "/drop_all.sql" }, executionPhase = AFTER_TEST_CLASS) diff --git a/transaction-service/src/test/java/cz/muni/fi/obs/facade/ScheduledPaymentExecutorFacadeTest.java b/transaction-service/src/test/java/cz/muni/fi/obs/facade/ScheduledPaymentExecutorFacadeTest.java index df13369..0bceb3e 100644 --- a/transaction-service/src/test/java/cz/muni/fi/obs/facade/ScheduledPaymentExecutorFacadeTest.java +++ b/transaction-service/src/test/java/cz/muni/fi/obs/facade/ScheduledPaymentExecutorFacadeTest.java @@ -1,5 +1,23 @@ package cz.muni.fi.obs.facade; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; +import java.util.List; +import java.util.Optional; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.ActiveProfiles; + import cz.muni.fi.obs.api.CurrencyExchangeRequest; import cz.muni.fi.obs.api.CurrencyExchangeResult; import cz.muni.fi.obs.data.dbo.AccountDbo; @@ -12,23 +30,6 @@ import cz.muni.fi.obs.data.repository.TransactionRepository; import cz.muni.fi.obs.http.CurrencyServiceClient; import cz.muni.fi.obs.jms.JmsConsumer; import cz.muni.fi.obs.jms.JmsProducer; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.ActiveProfiles; - -import java.math.BigDecimal; -import java.time.Instant; -import java.time.LocalDate; -import java.util.List; -import java.util.Optional; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.when; @SpringBootTest @ActiveProfiles("test") @@ -59,6 +60,7 @@ public class ScheduledPaymentExecutorFacadeTest { @BeforeEach public void setUp() { + transactionRepository.deleteAll(); when(client.getCurrencyExchange(any(CurrencyExchangeRequest.class))) .thenReturn(Optional.of(new CurrencyExchangeResult("CZK", "CZK", @@ -136,11 +138,6 @@ public class ScheduledPaymentExecutorFacadeTest { scheduledPaymentRepository.save(scheduledPayment5); } - @AfterEach - public void cleanTransactions() { - transactionRepository.deleteAll(); - } - @Test public void executeWeekly_weeklyPaymentsExistForToday_paymentsAreExecuted() { executorFacade.executeWeekly(); diff --git a/transaction-service/src/test/java/cz/muni/fi/obs/facade/TransactionManagementFacadeTest.java b/transaction-service/src/test/java/cz/muni/fi/obs/facade/TransactionManagementFacadeTest.java index ffe0595..e36d459 100644 --- a/transaction-service/src/test/java/cz/muni/fi/obs/facade/TransactionManagementFacadeTest.java +++ b/transaction-service/src/test/java/cz/muni/fi/obs/facade/TransactionManagementFacadeTest.java @@ -78,7 +78,7 @@ class TransactionManagementFacadeTest { void viewTransactionHistory_returnsHistory() { when(transactionService.viewTransactionHistory(TestData.accountId, 0, 10)) .thenReturn(new PageImpl<>(TestData.withdrawTransactions)); - when(accountService.findAccountByAccountNumber("1")) + when(accountService.findAccountByAccountId("1")) .thenReturn(AccountDbo.builder() .id(TestData.accountId) .currencyCode("CZK") @@ -92,13 +92,13 @@ class TransactionManagementFacadeTest { @Test public void checkAccountBalance_returnsBalance() { when(transactionService.calculateAccountBalance(TestData.accountId)).thenReturn(BigDecimal.valueOf(42)); - when(accountService.findAccountByAccountNumber("1")) + when(accountService.findAccountByAccountId("1")) .thenReturn(AccountDbo.builder() .id(TestData.accountId) .currencyCode("CZK") .build()); - BigDecimal balance = transactionManagementFacade.calculateAccountBalance("00000001"); + BigDecimal balance = transactionManagementFacade.calculateAccountBalance("1"); assertEquals(BigDecimal.valueOf(42), balance); } @@ -129,19 +129,19 @@ class TransactionManagementFacadeTest { .currencyCode("CZK") .build(); - when(accountService.findAccountByAccountNumber("1")).thenReturn(expectedAccount); + when(accountService.findAccountByAccountId("1")).thenReturn(expectedAccount); - AccountDbo foundAccount = transactionManagementFacade.findAccountByAccountNumber("1"); - verify(accountService).findAccountByAccountNumber("1"); + AccountDbo foundAccount = transactionManagementFacade.findAccountByAccountId("1"); + verify(accountService).findAccountByAccountId("1"); assertThat(foundAccount).isNotNull(); } @Test void testFindAccountById_nonExistingId_returnsNull() { - when(accountService.findAccountByAccountNumber("0")).thenReturn(null); + when(accountService.findAccountByAccountId("0")).thenReturn(null); - AccountDbo foundAccount = transactionManagementFacade.findAccountByAccountNumber("0"); - verify(accountService).findAccountByAccountNumber("0"); + AccountDbo foundAccount = transactionManagementFacade.findAccountByAccountId("0"); + verify(accountService).findAccountByAccountId("0"); assertThat(foundAccount).isNull(); } } diff --git a/transaction-service/src/test/java/cz/muni/fi/obs/http/CurrencyServiceClientTest.java b/transaction-service/src/test/java/cz/muni/fi/obs/http/CurrencyServiceClientTest.java index fbf5eda..0b55c2e 100644 --- a/transaction-service/src/test/java/cz/muni/fi/obs/http/CurrencyServiceClientTest.java +++ b/transaction-service/src/test/java/cz/muni/fi/obs/http/CurrencyServiceClientTest.java @@ -1,13 +1,15 @@ package cz.muni.fi.obs.http; -import com.github.tomakehurst.wiremock.client.WireMock; -import com.github.tomakehurst.wiremock.core.Options; -import cz.muni.fi.obs.api.CurrencyExchangeRequest; -import cz.muni.fi.obs.api.CurrencyExchangeResult; -import cz.muni.fi.obs.jms.JmsConsumer; -import cz.muni.fi.obs.jms.JmsProducer; -import io.github.resilience4j.springboot3.circuitbreaker.autoconfigure.CircuitBreakerAutoConfiguration; -import io.github.resilience4j.springboot3.timelimiter.autoconfigure.TimeLimiterAutoConfiguration; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.serverError; +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; +import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE; + +import java.math.BigDecimal; + import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; @@ -19,17 +21,17 @@ import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock; import org.springframework.cloud.openfeign.FeignAutoConfiguration; import org.springframework.http.MediaType; import org.springframework.test.context.ActiveProfiles; -import util.JsonConvertor; -import java.math.BigDecimal; +import com.github.tomakehurst.wiremock.client.WireMock; +import com.github.tomakehurst.wiremock.core.Options; -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.post; -import static com.github.tomakehurst.wiremock.client.WireMock.serverError; -import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; -import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; -import static org.assertj.core.api.Assertions.assertThat; -import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE; +import cz.muni.fi.obs.api.CurrencyExchangeRequest; +import cz.muni.fi.obs.api.CurrencyExchangeResult; +import cz.muni.fi.obs.jms.JmsConsumer; +import cz.muni.fi.obs.jms.JmsProducer; +import cz.muni.fi.obs.util.JsonConvertor; +import io.github.resilience4j.springboot3.circuitbreaker.autoconfigure.CircuitBreakerAutoConfiguration; +import io.github.resilience4j.springboot3.timelimiter.autoconfigure.TimeLimiterAutoConfiguration; @SpringBootTest( webEnvironment = NONE, diff --git a/transaction-service/src/test/java/cz/muni/fi/obs/service/TransactionServiceTest.java b/transaction-service/src/test/java/cz/muni/fi/obs/service/TransactionServiceTest.java index 3940885..bac9f9c 100644 --- a/transaction-service/src/test/java/cz/muni/fi/obs/service/TransactionServiceTest.java +++ b/transaction-service/src/test/java/cz/muni/fi/obs/service/TransactionServiceTest.java @@ -1,12 +1,15 @@ package cz.muni.fi.obs.service; -import cz.muni.fi.obs.TestData; -import cz.muni.fi.obs.data.dbo.AccountDbo; -import cz.muni.fi.obs.data.dbo.TransactionDbo; -import cz.muni.fi.obs.data.repository.AccountRepository; -import cz.muni.fi.obs.data.repository.TransactionRepository; -import cz.muni.fi.obs.jms.JmsConsumer; -import cz.muni.fi.obs.jms.JmsProducer; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.math.BigDecimal; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -16,15 +19,13 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; -import java.math.BigDecimal; -import java.util.Collections; -import java.util.List; -import java.util.Optional; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import cz.muni.fi.obs.TestData; +import cz.muni.fi.obs.data.dbo.AccountDbo; +import cz.muni.fi.obs.data.dbo.TransactionDbo; +import cz.muni.fi.obs.data.repository.AccountRepository; +import cz.muni.fi.obs.data.repository.TransactionRepository; +import cz.muni.fi.obs.jms.JmsConsumer; +import cz.muni.fi.obs.jms.JmsProducer; @ExtendWith(MockitoExtension.class) class TransactionServiceTest { diff --git a/transaction-service/src/test/java/cz/muni/fi/obs/service/payment/ScheduledPaymentServiceTest.java b/transaction-service/src/test/java/cz/muni/fi/obs/service/payment/ScheduledPaymentServiceTest.java index db2dae8..cf50ee4 100644 --- a/transaction-service/src/test/java/cz/muni/fi/obs/service/payment/ScheduledPaymentServiceTest.java +++ b/transaction-service/src/test/java/cz/muni/fi/obs/service/payment/ScheduledPaymentServiceTest.java @@ -1,5 +1,20 @@ package cz.muni.fi.obs.service.payment; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import java.time.Instant; +import java.time.LocalDate; +import java.util.List; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.ActiveProfiles; + import cz.muni.fi.obs.api.ScheduledPaymentCreateDto; import cz.muni.fi.obs.data.dbo.AccountDbo; import cz.muni.fi.obs.data.dbo.PaymentFrequency; @@ -9,20 +24,6 @@ import cz.muni.fi.obs.data.repository.ScheduledPaymentRepository; import cz.muni.fi.obs.exceptions.ResourceNotFoundException; import cz.muni.fi.obs.jms.JmsConsumer; import cz.muni.fi.obs.jms.JmsProducer; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.ActiveProfiles; - -import java.time.Instant; -import java.time.LocalDate; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; @SpringBootTest @ActiveProfiles("test") -- GitLab