본문 바로가기

Spring

CRUD Logic 구현

반응형

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