Skip to content

Commit

Permalink
generate unique account
Browse files Browse the repository at this point in the history
  • Loading branch information
cheesecrust committed Jan 26, 2024
1 parent 9c42016 commit db67577
Show file tree
Hide file tree
Showing 7 changed files with 132 additions and 1 deletion.
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,14 @@ repositories {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'io.springfox:springfox-boot-starter:3.0.0'
implementation 'io.springfox:springfox-swagger-ui:3.0.0'

}

tasks.named('test') {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.eum.bank.common.dto.request;

import jakarta.validation.constraints.NotEmpty;
import lombok.Getter;

public class AccountRequestDTO {
// 계좌 생성 요청
@Getter
public static class CreateAccount {
@NotEmpty(message = "비밀번호를 입력해주세요.")
private Long password;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.eum.bank.common.dto.response;

import jakarta.validation.constraints.NotEmpty;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;

public class AccountResponseDTO {
// 계좌 생성 응답
@Builder
@Getter
public static class Create {
@NotEmpty(message = "계좌 번호가 생성되어야 합니다.")
private String accountNumber;
}
}
28 changes: 28 additions & 0 deletions src/main/java/com/eum/bank/controller/AccountController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.eum.bank.controller;

import com.eum.bank.common.APIResponse;
import com.eum.bank.common.dto.request.AccountRequestDTO;
import com.eum.bank.common.dto.response.AccountResponseDTO;
import com.eum.bank.common.enums.SuccessCode;
import com.eum.bank.service.AccountService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequiredArgsConstructor
@RequestMapping("/account")
@Slf4j
public class AccountController {
private final AccountService accountService;
@PostMapping("/create")
public ResponseEntity<?> create(@RequestBody AccountRequestDTO.CreateAccount createAccount) {

Long password = createAccount.getPassword();
APIResponse<?> response = accountService.createAccount(password);

return ResponseEntity.ok(response);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
public class GlobalExceptionHandler {
private final HttpStatus HTTP_STATUS_OK = HttpStatus.OK;


/**
* [Exception] API 호출 시 '객체' 혹은 '파라미터' 데이터 값이 유효하지 않은 경우
*
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/eum/bank/repository/AccountRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@
import org.springframework.data.jpa.repository.JpaRepository;

public interface AccountRepository extends JpaRepository<Account, String> {
Account save(Account account);
Boolean findByAccountNumber(String accountNumber);
}
71 changes: 71 additions & 0 deletions src/main/java/com/eum/bank/service/AccountService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package com.eum.bank.service;

import com.eum.bank.common.APIResponse;
import com.eum.bank.common.dto.response.AccountResponseDTO;
import com.eum.bank.common.enums.SuccessCode;
import com.eum.bank.domain.account.entity.Account;
import com.eum.bank.repository.AccountRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.Random;

@Service
@RequiredArgsConstructor
public class AccountService {

private final AccountRepository accountRepository;

public APIResponse<?> createAccount(Long password) {

String accountNumber;
do {
accountNumber = generateAccountNumber();
}while (
validateAccountNumber(accountNumber)
);

Account account = Account.builder()
.accountNumber(accountNumber)
.password(password.toString())
.totalBudget(0L)
.availableBudget(0L)
.build();

accountRepository.save(account);

return APIResponse.of(SuccessCode.SELECT_SUCCESS, AccountResponseDTO.Create.builder()
.accountNumber(account.getAccountNumber())
.build());
}

public String generateAccountNumber() {
Random random = new Random();
StringBuilder uniqueNumber = new StringBuilder();

for (int i = 0; i < 12; i++) {
int digit = random.nextInt(10);
uniqueNumber.append(digit);
}

if( validateAccountNumber(uniqueNumber.toString()) )
generateAccountNumber();

return uniqueNumber.toString();
}
public Boolean validateAccountNumber(String accountNumber) {
if (accountNumber.length() != 12) {
return false;
}

try {
Long.parseLong(accountNumber);
accountRepository.findByAccountNumber(accountNumber);
} catch (NumberFormatException e) {
return false;
}
return true;
}


}

0 comments on commit db67577

Please sign in to comment.