From acf4e7de754d49e7cc70760466931a2376710f05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Pit=C3=A1k?= <xpitak@fi.muni.cz> Date: Tue, 23 Apr 2024 20:43:35 +0200 Subject: [PATCH] Add currency code data into Scheduled Payment entity --- .../1_create_account_management_db.sql | 1 + .../2_generate_account_management_db.sql | 8 +++--- .../controller/AccountController.java | 21 ++++++++-------- .../controller/UserController.java | 8 +----- .../application/facade/AccountFacade.java | 16 +++++++++--- .../banking/application/mapper/DtoMapper.java | 2 ++ .../application/service/AccountService.java | 6 +++++ .../domain/scheduled/ScheduledPayment.java | 11 ++++++++ .../account-management-api/openapi.yaml | 25 +++++++++++++++++++ 9 files changed, 72 insertions(+), 26 deletions(-) diff --git a/.docker/db/scripts/1_create_account_management_db.sql b/.docker/db/scripts/1_create_account_management_db.sql index b90aa18..61285b8 100644 --- a/.docker/db/scripts/1_create_account_management_db.sql +++ b/.docker/db/scripts/1_create_account_management_db.sql @@ -31,6 +31,7 @@ CREATE TABLE IF NOT EXISTS scheduled_payment source_account_id BIGINT, target_account_id BIGINT, amount DECIMAL, + currency_code VARCHAR(3), recurrence_type VARCHAR(50), recurrence_payment_day INTEGER ); diff --git a/.docker/db/scripts/2_generate_account_management_db.sql b/.docker/db/scripts/2_generate_account_management_db.sql index b061fe0..2f473f8 100644 --- a/.docker/db/scripts/2_generate_account_management_db.sql +++ b/.docker/db/scripts/2_generate_account_management_db.sql @@ -20,10 +20,10 @@ VALUES (3656018305580485508, 'a5dc3241-71c9-4594-8a07-083c9c2b7b1c', 1, 1000, 0, (994, 'ACC4', 1, 1000, 1, 'CZK'); -INSERT INTO scheduled_payment (id, source_account_id, target_account_id, amount, recurrence_type, recurrence_payment_day) +INSERT INTO scheduled_payment (id, source_account_id, target_account_id, amount, currency_code, recurrence_type, recurrence_payment_day) VALUES - (991, 2, 3, 100, 0, 2), - (992, 2, 3, 200, 0, 3), - (993, 3, 2, 1200, 1, 15); + (991, 2, 3, 100, 'EUR', 0, 2), + (992, 2, 3, 200, 'EUR', 0, 3), + (993, 3, 2, 1200, 'EUR', 1, 15); diff --git a/account-management/src/main/java/cz/muni/pa165/banking/application/controller/AccountController.java b/account-management/src/main/java/cz/muni/pa165/banking/application/controller/AccountController.java index 6df625a..d2a767c 100644 --- a/account-management/src/main/java/cz/muni/pa165/banking/application/controller/AccountController.java +++ b/account-management/src/main/java/cz/muni/pa165/banking/application/controller/AccountController.java @@ -1,16 +1,15 @@ package cz.muni.pa165.banking.application.controller; import cz.muni.pa165.banking.account.management.AccountApi; -import cz.muni.pa165.banking.account.management.dto.AccountDto; -import cz.muni.pa165.banking.account.management.dto.NewAccountDto; -import cz.muni.pa165.banking.account.management.dto.ScheduledPaymentDto; -import cz.muni.pa165.banking.account.management.dto.ScheduledPaymentsDto; +import cz.muni.pa165.banking.account.management.dto.*; import cz.muni.pa165.banking.application.facade.AccountFacade; import cz.muni.pa165.banking.exception.EntityNotFoundException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RestController; +import java.time.LocalDate; + @RestController public class AccountController implements AccountApi { @@ -37,13 +36,13 @@ public class AccountController implements AccountApi { @Override public ResponseEntity<ScheduledPaymentsDto> getScheduledPayments(String accountNumber) { - ScheduledPaymentsDto payments; - try{ - payments = accountFacade.findScheduledPaymentsByNumber(accountNumber); - } - catch (EntityNotFoundException e){ - return new ResponseEntity<>(HttpStatus.NOT_FOUND); - } + ScheduledPaymentsDto payments = accountFacade.findScheduledPaymentsByNumber(accountNumber); + return ResponseEntity.ok(payments); + } + + @Override + public ResponseEntity<ScheduledPaymentsDto> getScheduledPaymentsOf(LocalDate date) { + ScheduledPaymentsDto payments = accountFacade.scheduledPaymentsOfDay(date); return ResponseEntity.ok(payments); } diff --git a/account-management/src/main/java/cz/muni/pa165/banking/application/controller/UserController.java b/account-management/src/main/java/cz/muni/pa165/banking/application/controller/UserController.java index 261ba6d..1fa62d0 100644 --- a/account-management/src/main/java/cz/muni/pa165/banking/application/controller/UserController.java +++ b/account-management/src/main/java/cz/muni/pa165/banking/application/controller/UserController.java @@ -25,13 +25,7 @@ public class UserController implements UserApi{ @Override public ResponseEntity<UserDto> findUserById(Long userId) { - UserDto user; - try{ - user = userFacade.findById(userId); - } - catch (EntityNotFoundException e){ - return new ResponseEntity<>(HttpStatus.NOT_FOUND); - } + UserDto user = userFacade.findById(userId); return ResponseEntity.ok(user); } diff --git a/account-management/src/main/java/cz/muni/pa165/banking/application/facade/AccountFacade.java b/account-management/src/main/java/cz/muni/pa165/banking/application/facade/AccountFacade.java index f8e1a77..9b6077c 100644 --- a/account-management/src/main/java/cz/muni/pa165/banking/application/facade/AccountFacade.java +++ b/account-management/src/main/java/cz/muni/pa165/banking/application/facade/AccountFacade.java @@ -1,9 +1,6 @@ package cz.muni.pa165.banking.application.facade; -import cz.muni.pa165.banking.account.management.dto.AccountDto; -import cz.muni.pa165.banking.account.management.dto.NewAccountDto; -import cz.muni.pa165.banking.account.management.dto.ScheduledPaymentDto; -import cz.muni.pa165.banking.account.management.dto.ScheduledPaymentsDto; +import cz.muni.pa165.banking.account.management.dto.*; import cz.muni.pa165.banking.application.mapper.DtoMapper; import cz.muni.pa165.banking.application.service.AccountService; import cz.muni.pa165.banking.domain.account.Account; @@ -12,7 +9,9 @@ import cz.muni.pa165.banking.exception.EntityNotFoundException; import cz.muni.pa165.banking.exception.UnexpectedValueException; import org.springframework.stereotype.Component; +import java.time.LocalDate; import java.util.Currency; +import java.util.List; @Component @@ -60,4 +59,13 @@ public class AccountFacade { public AccountDto findByAccountNumber(String accountNumber) { return mapper.map(accountService.findByNumber(accountNumber)); } + + public ScheduledPaymentsDto scheduledPaymentsOfDay(LocalDate date) { + List<ScheduledPayment> payments = accountService.scheduledPaymentsOfDay(date); + ScheduledPaymentsDto result = new ScheduledPaymentsDto(); + result.setScheduledPayments(payments.stream() + .map(mapper::map) + .toList()); + return result; + } } diff --git a/account-management/src/main/java/cz/muni/pa165/banking/application/mapper/DtoMapper.java b/account-management/src/main/java/cz/muni/pa165/banking/application/mapper/DtoMapper.java index 9c7eb93..088749a 100644 --- a/account-management/src/main/java/cz/muni/pa165/banking/application/mapper/DtoMapper.java +++ b/account-management/src/main/java/cz/muni/pa165/banking/application/mapper/DtoMapper.java @@ -45,6 +45,8 @@ public interface DtoMapper { return result; } + ScheduledPaymentDto map(ScheduledPayment scheduledPayment); + ScheduledPaymentType map(RecurrenceType type); RecurrenceType map(ScheduledPaymentType type); diff --git a/account-management/src/main/java/cz/muni/pa165/banking/application/service/AccountService.java b/account-management/src/main/java/cz/muni/pa165/banking/application/service/AccountService.java index af6d7ec..cf23bf5 100644 --- a/account-management/src/main/java/cz/muni/pa165/banking/application/service/AccountService.java +++ b/account-management/src/main/java/cz/muni/pa165/banking/application/service/AccountService.java @@ -6,6 +6,7 @@ import cz.muni.pa165.banking.domain.account.repository.AccountRepository; import cz.muni.pa165.banking.domain.scheduled.ScheduledPayment; import cz.muni.pa165.banking.domain.scheduled.ScheduledPaymentProjection; import cz.muni.pa165.banking.domain.scheduled.recurrence.Recurrence; +import cz.muni.pa165.banking.domain.scheduled.recurrence.RecurrenceQuerySpecificationBuilder; import cz.muni.pa165.banking.domain.scheduled.recurrence.RecurrenceType; import cz.muni.pa165.banking.domain.scheduled.repository.ScheduledPaymentRepository; import cz.muni.pa165.banking.domain.user.repository.UserRepository; @@ -15,6 +16,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -74,6 +76,7 @@ public class AccountService { newScheduledPayment.setSourceAccountId(senderAccount.getId()); newScheduledPayment.setTargetAccountId(receiverAccount.getId()); newScheduledPayment.setAmount(amount); + newScheduledPayment.setCurrencyCode(senderAccount.getCurrency().getCurrencyCode()); Recurrence recurrence = new Recurrence(); recurrence.setType(recurrenceType); @@ -109,4 +112,7 @@ public class AccountService { .toList(); } + public List<ScheduledPayment> scheduledPaymentsOfDay(LocalDate date) { + return scheduledPaymentsRepository.findAll(RecurrenceQuerySpecificationBuilder.forDay(date)); + } } diff --git a/account-management/src/main/java/cz/muni/pa165/banking/domain/scheduled/ScheduledPayment.java b/account-management/src/main/java/cz/muni/pa165/banking/domain/scheduled/ScheduledPayment.java index 67aeaa5..ce7404d 100644 --- a/account-management/src/main/java/cz/muni/pa165/banking/domain/scheduled/ScheduledPayment.java +++ b/account-management/src/main/java/cz/muni/pa165/banking/domain/scheduled/ScheduledPayment.java @@ -22,6 +22,9 @@ public class ScheduledPayment { private BigDecimal amount; + @Column(name = "currency_code") + private String currencyCode; + @Embedded @AttributeOverrides({ @AttributeOverride(name = "type", column = @Column(name = "recurrence_type")), @@ -65,6 +68,14 @@ public class ScheduledPayment { this.amount = amount; } + public String getCurrencyCode() { + return currencyCode; + } + + public void setCurrencyCode(String currencyCode) { + this.currencyCode = currencyCode; + } + public Recurrence getRecurrence() { return recurrence; } diff --git a/m2m-banking-api/account-management-api/openapi.yaml b/m2m-banking-api/account-management-api/openapi.yaml index d2472c8..18dc08b 100644 --- a/m2m-banking-api/account-management-api/openapi.yaml +++ b/m2m-banking-api/account-management-api/openapi.yaml @@ -129,6 +129,7 @@ components: - senderAccountNumber - receiverAccountNumber - amount + - currencyCode - type - day properties: @@ -140,6 +141,8 @@ components: type: number format: decimal description: amount of money to send + currencyCode: + type: string type: $ref: '#/components/schemas/ScheduledPaymentType' day: @@ -309,3 +312,25 @@ paths: $ref: '#/components/schemas/ScheduledPaymentDto' "400": description: NOK + + /scheduled: + get: + tags: + - Account + summary: Scheduled payments of a day + operationId: getScheduledPaymentsOf + requestBody: + required: true + content: + application/json: + schema: + type: string + format: date + nullable: false + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ScheduledPaymentsDto' \ No newline at end of file -- GitLab