Skip to content
Snippets Groups Projects
Commit 21bc2ada authored by Filip Fabry's avatar Filip Fabry
Browse files

Fix the PR

parent 31811b20
No related branches found
No related tags found
1 merge request!40added sequence generation of account numbers
Showing
with 159 additions and 159 deletions
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
......
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
......
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() {
......
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)));
}
}
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
......
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) {}
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,
......
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 {
......
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,
......
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 {
......
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 {
......
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(
......
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 {
......
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
......
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
......
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) {
......
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,
......
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
......
......@@ -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;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment