본문 바로가기

Spring

Code Refactoring : JPA Enum 형태 관리

반응형

Code Refactoring 
외부 API는 동일하게 제공되나 내부적으로 오류같은 것에 대한 대비가
탄탄하게 되도록 설계하는 것.


JPA Enum 형태 값 관리

이를 테면 status라는 변수에 REGISTERED / UNREGISTERED가
직접 입력으로 들어가게 되는데 오타나 여러 오류가 발생 가능.

enum을 만들고  원하는 값을 만들고 그 안에 보일 
index , title, description 등 원하는 변수 설정하고
변수 생성함. 그리고 그 변수들을 받을 수 있도록 어노테이션 지정 하고

만든 enum을 지정할 Entity에서 enum  클래스로 변수를 바꿔주고
ApiRequest , ApiResponse 모두 바꿔줌.

 

<코드>

 

@Getter
@AllArgsConstructor
public enum UserStatus {

REGISTERED(0,"등록","사용자 등록 상태"),
UNREGISTERED(1,"해지","사용자 해지 상태");

//첫번째 인덱스 , 두번째 타이틀 , 세번째 상세 설명
//3가지에 대한 변수 설정.
// 3가지에 대해 설정 가능하도록 AllArgsConstructor등 밖에서 받을 수 있도록 설정

private Integer id;
private String title;
private String description;
}

 

 

public class User {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) //데이터 베이스에 기본키 생성 위임. Mysql


private Long id;
private String account;
private String password;

@Enumerated(EnumType.STRING)
private UserStatus status; //REGISTERED / UNREGISTERED

private String email;
private String phoneNumber;
private LocalDateTime registeredAt;
private LocalDateTime unregisteredAt;

@CreatedDate
private LocalDateTime createdAt;
@CreatedBy
private String createdBy;
@LastModifiedDate
private LocalDateTime updatedAt;
@LastModifiedBy
private String updatedBy;


//User 1 : N OrderGroup
@OneToMany(fetch = FetchType.LAZY,mappedBy = "user")
private List<OrderGroup> orderGroupList;


}

 

 

 

public class UserApiRequest {

private Long id;
private String account;
private String password;


private UserStatus status;

private String email;

private String phoneNumber;

private LocalDateTime registeredAt;
private LocalDateTime unregisteredAt;


//creat update는 클라이언트에서 받는게 아니고 서버 단이기 때문에 생략
}

 

public class UserApiResponse {


private Long id;
private String account;
private String password;

private UserStatus status;

private String email;

private String phoneNumber;

private LocalDateTime registeredAt;
private LocalDateTime unregisteredAt;
}

 

 

 

@Override
public Header<UserApiResponse> create(Header<UserApiRequest> request) {

//1. request data
UserApiRequest userApiRequest = request.getData();


//2. User 생성

User user = User.builder()
.account(userApiRequest.getAccount())
.password(userApiRequest.getPassword())
.status(UserStatus.REGISTERED)
.phoneNumber(userApiRequest.getPhoneNumber())
.email(userApiRequest.getEmail())
.registeredAt(LocalDateTime.now())

.build();

User newUser = userRepository.save(user);

//3 .생성된 데이터 -> userApiResponse return

return response(newUser); //id등 디비에서 추가되는 것이 들어가므로 newUSer로 해줘야 함.
}

 

 

enum의 항목을 가져오는 것은

String statusTitle = item.getStatus().getTitle();

 

 

 

반응형

'Spring' 카테고리의 다른 글

페이징 처리  (0) 2019.11.18
Controller 추상화  (0) 2019.11.17
CRUD Logic 구현  (0) 2019.11.17
@Slf4j  (0) 2019.11.14
@PathVariable  (0) 2019.11.14