From 916ecb73193cfb4e54da9f1fdf9d3c62a41f2019 Mon Sep 17 00:00:00 2001 From: yeonsu Date: Wed, 31 Jan 2024 14:11:18 +0900 Subject: [PATCH 1/5] feat constant class --- .../java/com/eum/bank/common/Constants.java | 11 +++++++++++ .../common/dto/request/AccountRequestDTO.java | 13 +++++++++++++ .../eum/bank/controller/AccountController.java | 15 +++++++++++++++ .../com/eum/bank/service/AccountService.java | 18 +++++++++--------- 4 files changed, 48 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/eum/bank/common/Constants.java diff --git a/src/main/java/com/eum/bank/common/Constants.java b/src/main/java/com/eum/bank/common/Constants.java new file mode 100644 index 0000000..8c445ca --- /dev/null +++ b/src/main/java/com/eum/bank/common/Constants.java @@ -0,0 +1,11 @@ +package com.eum.bank.common; + +public final class Constants { + + private Constants() { + } + + public static final String SUCCESS = "success"; + + public static final String FREE_TYPE = "free"; +} diff --git a/src/main/java/com/eum/bank/common/dto/request/AccountRequestDTO.java b/src/main/java/com/eum/bank/common/dto/request/AccountRequestDTO.java index c732180..6c4b7df 100644 --- a/src/main/java/com/eum/bank/common/dto/request/AccountRequestDTO.java +++ b/src/main/java/com/eum/bank/common/dto/request/AccountRequestDTO.java @@ -19,4 +19,17 @@ public static class GetAccount { @NotEmpty(message = "비밀번호를 입력해주세요.") private String password; } + + @Getter + public static class Transfer { + @NotEmpty(message = "계좌 번호를 입력해주세요.") + private String accountNumber; + @NotEmpty(message = "비밀번호를 입력해주세요.") + private String password; + @NotEmpty(message = "송금 금액을 입력해주세요.") + private Long deposit; + // 수신자 계좌 번호 + @NotEmpty(message = "송금할 계좌 번호를 입력해주세요.") + private String receiverAccountNumber; + } } diff --git a/src/main/java/com/eum/bank/controller/AccountController.java b/src/main/java/com/eum/bank/controller/AccountController.java index 78003e1..897d17c 100644 --- a/src/main/java/com/eum/bank/controller/AccountController.java +++ b/src/main/java/com/eum/bank/controller/AccountController.java @@ -8,6 +8,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import static com.eum.bank.common.Constants.FREE_TYPE; @RestController @RequiredArgsConstructor @RequestMapping("/account") @@ -34,4 +35,18 @@ public ResponseEntity getAccountInfo(@RequestBody AccountRequestDTO.GetAccoun return ResponseEntity.ok(response); } + // 자유 송금 + @PostMapping("/transfer") + public ResponseEntity transfer(@RequestBody AccountRequestDTO.Transfer transfer) { + String accountNumber = transfer.getAccountNumber(); + String password = transfer.getPassword(); + Long deposit = transfer.getDeposit(); + String receiverAccountNumber = transfer.getReceiverAccountNumber(); + + APIResponse response = accountService.transfer( + accountNumber, receiverAccountNumber, deposit, password, FREE_TYPE + ); + + return ResponseEntity.ok(response); + } } diff --git a/src/main/java/com/eum/bank/service/AccountService.java b/src/main/java/com/eum/bank/service/AccountService.java index fe8d18a..db813f4 100644 --- a/src/main/java/com/eum/bank/service/AccountService.java +++ b/src/main/java/com/eum/bank/service/AccountService.java @@ -113,7 +113,7 @@ public Account getAccount(String accountNumber) { // 4. 수신자 전체금액, 가용금액 플러스 // 5. 통합 거래내역 생성, 각 계좌 거래내역 생성 @Transactional - public APIResponse transfer(String senderAccountNumber, String receiverAccountNumber, Long amount, String password, String transferType) { + public APIResponse transfer(String senderAccountNumber, String receiverAccountNumber, Long deposit, String password, String transferType) { Account senderAccount = this.validateAccount(senderAccountNumber); Account receiverAccount = this.validateAccount(receiverAccountNumber); @@ -123,25 +123,25 @@ public APIResponse transfer(String senderAccountNumber, String receiverAccoun } // 송금자 잔액 검증 - if (senderAccount.getAvailableBudget() < amount) { + if (senderAccount.getAvailableBudget() < deposit) { throw new IllegalArgumentException("Insufficient balance"); } // 송금자 잔액 마이너스 - senderAccount.setTotalBudget(senderAccount.getTotalBudget() - amount); - senderAccount.setAvailableBudget(senderAccount.getAvailableBudget() - amount); + senderAccount.setTotalBudget(senderAccount.getTotalBudget() - deposit); + senderAccount.setAvailableBudget(senderAccount.getAvailableBudget() - deposit); // 수신자 잔액 플러스 - receiverAccount.setTotalBudget(receiverAccount.getTotalBudget() + amount); - receiverAccount.setAvailableBudget(receiverAccount.getAvailableBudget() + amount); + receiverAccount.setTotalBudget(receiverAccount.getTotalBudget() + deposit); + receiverAccount.setAvailableBudget(receiverAccount.getAvailableBudget() + deposit); // 통합 거래내역 생성 TotalTransferHistory response = totalTransferHistoryService.save( TotalTransferHistoryRequestDTO.CreateTotalTransferHistory.builder() .senderAccount(senderAccount) .receiverAccount(receiverAccount) - .transferAmount(amount) + .transferAmount(deposit) .transferType(transferType) .build() ); @@ -151,7 +151,7 @@ public APIResponse transfer(String senderAccountNumber, String receiverAccoun AccountTransferHistoryRequestDTO.CreateAccountTransferHistory.builder() .ownerAccount(senderAccount) .oppenentAccount(receiverAccount) - .transferAmount(amount) + .transferAmount(deposit) .transferType(transferType) .budgetAfterTransfer(senderAccount.getAvailableBudget()) .memo("") @@ -161,7 +161,7 @@ public APIResponse transfer(String senderAccountNumber, String receiverAccoun AccountTransferHistoryRequestDTO.CreateAccountTransferHistory.builder() .ownerAccount(receiverAccount) .oppenentAccount(senderAccount) - .transferAmount(-amount) + .transferAmount(-deposit) .transferType(transferType) .budgetAfterTransfer(receiverAccount.getAvailableBudget()) .memo("") From dd24e5c77ec1850cd43914bf2ea487afc75ee098 Mon Sep 17 00:00:00 2001 From: yeonsu Date: Wed, 31 Jan 2024 14:33:01 +0900 Subject: [PATCH 2/5] feat free transfer --- src/main/java/com/eum/bank/controller/AccountController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/eum/bank/controller/AccountController.java b/src/main/java/com/eum/bank/controller/AccountController.java index 897d17c..b1d554e 100644 --- a/src/main/java/com/eum/bank/controller/AccountController.java +++ b/src/main/java/com/eum/bank/controller/AccountController.java @@ -43,6 +43,8 @@ public ResponseEntity transfer(@RequestBody AccountRequestDTO.Transfer transf Long deposit = transfer.getDeposit(); String receiverAccountNumber = transfer.getReceiverAccountNumber(); + accountService.getAccount(accountNumber, password); + APIResponse response = accountService.transfer( accountNumber, receiverAccountNumber, deposit, password, FREE_TYPE ); From 1807ab0c10bfb933236eff121ab5f69451403cd5 Mon Sep 17 00:00:00 2001 From: yeonsu Date: Wed, 31 Jan 2024 14:38:09 +0900 Subject: [PATCH 3/5] fix constant value --- src/main/java/com/eum/bank/common/Constants.java | 5 +++-- src/main/java/com/eum/bank/service/AccountService.java | 8 +++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/eum/bank/common/Constants.java b/src/main/java/com/eum/bank/common/Constants.java index 8c445ca..657a27b 100644 --- a/src/main/java/com/eum/bank/common/Constants.java +++ b/src/main/java/com/eum/bank/common/Constants.java @@ -5,7 +5,8 @@ public final class Constants { private Constants() { } - public static final String SUCCESS = "success"; - + public static final int ACCOUNT_NUMBER_LENGTH = 12; public static final String FREE_TYPE = "free"; + + } diff --git a/src/main/java/com/eum/bank/service/AccountService.java b/src/main/java/com/eum/bank/service/AccountService.java index db813f4..c07b9cc 100644 --- a/src/main/java/com/eum/bank/service/AccountService.java +++ b/src/main/java/com/eum/bank/service/AccountService.java @@ -1,19 +1,17 @@ package com.eum.bank.service; import com.eum.bank.common.APIResponse; -import com.eum.bank.common.ErrorResponse; import com.eum.bank.common.dto.request.AccountTransferHistoryRequestDTO; import com.eum.bank.common.dto.request.TotalTransferHistoryRequestDTO; import com.eum.bank.common.dto.response.AccountResponseDTO; -import com.eum.bank.common.enums.ErrorCode; import com.eum.bank.common.enums.SuccessCode; import com.eum.bank.domain.account.entity.Account; -import com.eum.bank.domain.account.entity.AccountTransferHistory; import com.eum.bank.domain.account.entity.TotalTransferHistory; import com.eum.bank.repository.AccountRepository; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import static com.eum.bank.common.Constants.ACCOUNT_NUMBER_LENGTH; import org.springframework.security.crypto.password.PasswordEncoder; import java.util.Random; @@ -56,7 +54,7 @@ public String generateAccountNumber() { Random random = new Random(); StringBuilder uniqueNumber = new StringBuilder(); - for (int i = 0; i < 12; i++) { + for (int i = 0; i < ACCOUNT_NUMBER_LENGTH; i++) { int digit = random.nextInt(10); uniqueNumber.append(digit); } @@ -65,7 +63,7 @@ public String generateAccountNumber() { } public Boolean validateAccountNumber(String accountNumber) { - if (accountNumber.length() != 12) { + if (accountNumber.length() != ACCOUNT_NUMBER_LENGTH) { return false; } From 22a30f3700981c631e658146a441514bc5dad4fc Mon Sep 17 00:00:00 2001 From: yeonsu Date: Wed, 31 Jan 2024 14:55:12 +0900 Subject: [PATCH 4/5] rename package-info --- .../com/eum/bank/common/{Constants.java => PackageInfo.java} | 4 ++-- src/main/java/com/eum/bank/controller/AccountController.java | 2 +- src/main/java/com/eum/bank/service/AccountService.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename src/main/java/com/eum/bank/common/{Constants.java => PackageInfo.java} (70%) diff --git a/src/main/java/com/eum/bank/common/Constants.java b/src/main/java/com/eum/bank/common/PackageInfo.java similarity index 70% rename from src/main/java/com/eum/bank/common/Constants.java rename to src/main/java/com/eum/bank/common/PackageInfo.java index 657a27b..e806732 100644 --- a/src/main/java/com/eum/bank/common/Constants.java +++ b/src/main/java/com/eum/bank/common/PackageInfo.java @@ -1,8 +1,8 @@ package com.eum.bank.common; -public final class Constants { +public final class PackageInfo { - private Constants() { + private PackageInfo() { } public static final int ACCOUNT_NUMBER_LENGTH = 12; diff --git a/src/main/java/com/eum/bank/controller/AccountController.java b/src/main/java/com/eum/bank/controller/AccountController.java index b1d554e..2ddf678 100644 --- a/src/main/java/com/eum/bank/controller/AccountController.java +++ b/src/main/java/com/eum/bank/controller/AccountController.java @@ -8,7 +8,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import static com.eum.bank.common.Constants.FREE_TYPE; +import static com.eum.bank.common.PackageInfo.FREE_TYPE; @RestController @RequiredArgsConstructor @RequestMapping("/account") diff --git a/src/main/java/com/eum/bank/service/AccountService.java b/src/main/java/com/eum/bank/service/AccountService.java index c07b9cc..3a2fbc0 100644 --- a/src/main/java/com/eum/bank/service/AccountService.java +++ b/src/main/java/com/eum/bank/service/AccountService.java @@ -11,7 +11,7 @@ import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import static com.eum.bank.common.Constants.ACCOUNT_NUMBER_LENGTH; +import static com.eum.bank.common.PackageInfo.ACCOUNT_NUMBER_LENGTH; import org.springframework.security.crypto.password.PasswordEncoder; import java.util.Random; From b0171216695dcb36b1cf84943126c47f625e54a6 Mon Sep 17 00:00:00 2001 From: yeonsu Date: Wed, 31 Jan 2024 15:00:14 +0900 Subject: [PATCH 5/5] feat javadoc --- src/main/java/com/eum/bank/common/PackageInfo.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/eum/bank/common/PackageInfo.java b/src/main/java/com/eum/bank/common/PackageInfo.java index e806732..c251ad2 100644 --- a/src/main/java/com/eum/bank/common/PackageInfo.java +++ b/src/main/java/com/eum/bank/common/PackageInfo.java @@ -5,7 +5,9 @@ public final class PackageInfo { private PackageInfo() { } + // 계좌 번호 길이 public static final int ACCOUNT_NUMBER_LENGTH = 12; + // 송금 타입 자유 public static final String FREE_TYPE = "free";