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 fa7bc24f8a4db809d47d8accad473980c53fc89e..43d23d39d3088dbd539e93f981c4fe37b1cb8c57 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 dc1d1fc34a7a1bac13bc972ff61ef28c9362604b..a9c449ec464a7f833e79c768316d7924a68ad011 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 90b750aa4f8110b7cddb5f6abc248385bf2eefc4..bf32c34aa5033a6eb8ebeef5be546767f3f04450 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 bfe47b59c8df6a4b9aed831f2c1db7ddf90c8599..075959f92ab18f2682ffdc4bc35bd5f57cb4a1ff 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 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 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 4187d6b804a899061f4a0e43470904bcd37a135a..9d887d76f51c41dc3e1ba6b1f0d2aa4fb52ba28e 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 49bfeebe7ad30728354b54e5a05011c2cb270da5..79c740608413e721d273ec3597a24fc87c5862e0 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 d675270d3a4e0fd3458958ea924afb761fba0495..e4b991788beeb8b95fda65b8dbec28287446009d 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 47ae40cf94223ad2b1387929fb07f52046efc220..1efbcd88901ebe0f109dbc8c343468245e91632d 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 a3617db447ceffce52f7037ac48c98a224bfa8ea..f6255c44ced345dddebf4243f282ef684fa3ee89 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 55c2327fa0511b9cba1d8352412e2e5513d9489a..b5316bbc6d69732e86663b76f2c4ddd690910915 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 6dedfcee9cb3944381f3043d62ddd6b7d662caa8..1f8add0522c09726dd51201eae3881cb8fa2840e 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 7db26ab999f3c9a4b80a086131ec100c5cf68224..bd085336359d5aebe7cf2933f2f0cd16b4ffac96 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 0c62221416f79432961b8e9221dac61085c5db6f..74358627beeb18c7540e2b7056bc64f70b099c62 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 2d7b153ac62834881be70336b34bcb37854a527a..dbfcca022ba4fb032c5dbb9b93cf9b0928919470 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 b31bb6a6a44d41575822f3877ac1b247d28cbc95..94fcc0a68a7be63e0cf2df4299b888a9c6dc4a4c 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 123112645f0a9f79279760acb334ce46f170951b..7dac443c8be89202b97e47eaeb15ab99bee99a40 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 664d49857f0d29a023580d2e1266218d98277148..1e15b7e52812c088421051d301b8e73c66da99f2 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 04767b23e5e82381bc987d3d3e0d5ff7cd43794f..de1e57c22baf0b67806a7112527ae23feb101210 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 b6947b82cb4fe9380db8715d5a62aa611d24a715..c5cf5585120b047c26295480073eb7077ed94225 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 80e657ca6b118e4b41f2815f5e3101b4b6d69e2a..37c9be314045c8750be50118caef263d656f5b3a 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 8095094252d24062e793dfe66bcad376a1d9c9f4..14157eb420e4a42066fdea5c33596d7df3727e2e 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 80505744b13fb2168374490f511b4b1fcc861405..47b98ec79b4194ac67e102bf2ad7de5d27dfe9a8 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 22e818d1656b8e7f91d463e087e025a3744823ef..233ced958f2d5b490af7b1473312338fcbeeb31e 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 3ba395ff599b570e89f44c8b12551b42fb190d1d..a3e9948b71cd6c02512013cb1cece7aef3ad9de4 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 39280e13cc6c1a6e77a2c1502cb98b1abda7019c..d7f0713ae29e01cb6bbf8f765eb006800e35a502 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 ef370017f5467901480336b90d5ec797b6b5bdbb..4226df4532c4f09ad530e030248ac929daf3564a 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 98098f981126e98a573959dfc57be11d148a1bf9..520b9f01a6b4ac327be049ae561768584be521ba 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 a51c858c4f4ef94a8b19e3454be7736340ee17e5..431c2a2bea867ac2a71e09b75a99e9ffadc7bed7 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 691398959b1482dc7c04062f5a4176a1fd5dc3ff..83766fac4a0923162f607562fe7d6866d2fc39c5 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 27b393ad3023e892381d4755a311c0d5a6264ee9..36138fa489df8ffaa2eddc46bafa9bd58a397a3e 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 b678300a884c52bdcbf5be9ff13bb5b7befd034b..875eff8d3b4c6d808c479c4ca91c6b63788c0af5 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 4321406177d0eef1168a791929bbf6a917b0fb45..413150a357c7c9211f8add40da7cb313b7bf7d95 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 b0e40bbe0b3cac14aa608d014a9b29a4417ff223..08fa2246a653e5445651a2b3f54668bb07add2c7 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 2aa85003d719c41c834adc178e6cbf60934fac88..b4c18013e2821a0698eb44404a0c129e52a41308 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 9347013710dc9f86502e083fa371d831f5776569..d16712035756108ad69e4fed2dc4ad6cfcce3611 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 6c8dbc71dbdfabee267173692d8bfb699c083bd3..cdff49477b2dd0c3f117cf70634b07a91b95329b 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 1ea9ebca1c2243140a0f39d66a1ffa400f0d0b81..e5e75e46d133d793d540b1665ac54c2606f28076 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 0000000000000000000000000000000000000000..8c92d192ae864426d0c7d8ab7198ef9743f46a1d --- /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 b28f82cf7d131281e3921052b426e95ce06be857..ddf2bd1df31ae6eb847c901c58fa057b2878f252 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 9b18566b2cf522806d1e445466ef06c9f1abdbc5..337a9de71d4c44f2710bd042d66509dbee6f3ab7 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 25589eebc91cabcda61ecb69088a1917e8206311..5fe1c52eb1fcd8d318b008d0f5aee7dfb5099746 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 3e446164d937340187148227e60394d0430289a4..ed7da40faaf434edfd4e7ae64c98a4b07ab9f600 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 43d1bfe517cf5a0e74ca43fd2b9c767da2ac6cad..3cc6d42c90500366d0f0a22e96423c3010073f21 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 84ec4fb9ffd61473b0e113cfb0a03f089a8c88dc..5639cb090c8c100401d5273cafd3e52c6797914b 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 df133699a9f6f058898c8f668105b2c96644497a..0bceb3ee451d4e6eb338025c31a2753d259a5e5d 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 ffe05959e6a996377587b45c67ade016e2b6c57b..e36d459a46c1c156e36b85ce2e43b928e98a55c9 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 fbf5eda3ce59db4317a4b5e01749be5a4b2eafa5..0b55c2ea504957bfdc5e9c30c5419d981c540dd2 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 39408856110b4a01457562ca94f5b8f430bb6024..bac9f9cd0ba7488a0df4a14231aff0cdc57eff82 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 db2dae81f465a34a7d58080ff024059a289f0bc5..cf50ee4e741be5c2e6c6b5d4dfd0f3cde864dad2 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")