1 . create
Header<request>로 들어온 것의 body를 해당 Entity의 Request로 받음.
그리고 Entity 객체를 생성해서 Request의 데이터를 뽑아내서 채움.
그리고 그 Entity를 Repository를 이용하여 저장.
@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로 해줘야 함.
}
2. read
id를 통해 Optional로 해당 객체를 찾음.
그리고 해당 객체의 값이 존재 할 때 해당 객체를 Header.OK(data) 형태로 return을 시키고 없다면 Headr.ERROR("데이터 없음")을 return
이 때 Optional의 옵션들을 사용 (map , orElseGet())
@Override
public Header<UserApiResponse> read(Long id) {
//id -> repository getOne, getId
Optional<User> user = userRepository.findById(id);
//map은 요소들을 특정조건에 해당하는 값으로 변환해 줍니다.
//orElseGet ()은 없음을 표시 한 것.
return user.map(u->response(u)).orElseGet(()->Header.ERROR("데이터 없음"));
}
3. update
Header<Request>로 들어온 것의 body를 Request를 통해 받음.
그리고 Optional을 통해 body에서 Id를 뽑아 내어 해당 객체를 찾음.
해당 객체를 Request의 정보로 셋팅함.
그리고 셋팅 된 객체를 return 시킨 후에 셋팅 된 객체를 repository를 통해 저장해서 newEntity를 뽑아 냄.
그 newEntity를 데이터로 하는 Header.OK(newEntity)를 return시키고 만약 newEntity가 없다면 Header.ERROR("데이터 없음") return.
@Override
public Header<UserApiResponse> update(Header<UserApiRequest> request) {
//1. data
UserApiRequest userApiRequest = request.getData();
//2. id -> user찾고
Optional<User> optional = userRepository.findById(userApiRequest.getId());
String str = userApiRequest.getPassword();
//3. update
return optional.map(user -> {user.setAccount(userApiRequest.getAccount())
.setPassword(userApiRequest.getPassword())
.setStatus(UserStatus.REGISTERED)
.setPhoneNumber(userApiRequest.getPhoneNumber())
.setEmail(userApiRequest.getEmail())
.setRegisteredAt(userApiRequest.getRegisteredAt())
.setUnregisteredAt(userApiRequest.getUnregisteredAt());
return user; //update된 user return
}).map(user -> userRepository.save(user)) //update -> newuser
.map(newuser->response(newuser)) //userApiResponse return
.orElseGet(()->Header.ERROR("데이터 없음"));
//4. userApiResponse 만들기
}
4. delete
Optional을 통해 id로 해당 객체를 찾고 해당 객체가 존재 할 때, Repository를 이용하여 delete시킴
그리고 Header.OK() return, 만약 없다면 Header.ERROR("데이터 없음") return
@Override
public Header delete(Long id) {
//id를 가지고 -> User
//repository -> delelte
// response return
Optional<User> optional = userRepository.findById(id);
return optional.map(user ->{
userRepository.delete(user);
return Header.OK();
}).orElseGet(()->Header.ERROR("데이터 없음"));
}
5. Entity -> Header.OK(data)
Entity가 들어오면 Response를 만들어서 해당 Response에 Entity의 정보를 담음.
그리고 Header.OK(response)를 return 시킴
private Header<UserApiResponse> response(User user)
{
//user -> userApiResponser
UserApiResponse userApiResponse = UserApiResponse.builder()
.id(user.getId())
.account(user.getAccount())
.password(user.getPassword())
.email(user.getEmail())
.phoneNumber(user.getPhoneNumber())
.status(UserStatus.REGISTERED)
.registeredAt(user.getRegisteredAt())
.unregisteredAt(user.getUnregisteredAt())
.build();
// Header + data -> return
return Header.OK(userApiResponse);
}
'Spring' 카테고리의 다른 글
Controller 추상화 (0) | 2019.11.17 |
---|---|
Code Refactoring : JPA Enum 형태 관리 (0) | 2019.11.17 |
@Slf4j (0) | 2019.11.14 |
@PathVariable (0) | 2019.11.14 |
서버와 Java 연동 Case변경 (0) | 2019.11.14 |