** 테스팅
Todo 아이템의 id만 보내도 된다.
2.3.2 Retrieve Todo 구현
** 퍼시스턴스구현
2.2.6절에서 작성한 TodoRepository를 사용한다.
** 서비스 구현
리포지터리의 findByUserId() 메서드를 이용한다.
// read
public List<TodoEntity> retrieve(final String userId){
return repository.findByUserId(userId);
}
** 컨트롤러 구현
@GetMapping
public ResponseEntity<?> retrieveTodoList() {
String temporaryUserId = "temporary-user"; // temporary user id.
// (1) 서비스 메서드의 retrieve() 메서드를 사용해 Todo 리스트를 가져온다.
List<TodoEntity> entities = service.retrieve(temporaryUserId);
// (2) 자바 스트림을 이용해 리턴된 엔티티 리스트를 TodoDTO 리스트로 변환한다.
List<TodoDTO> dtos = entities.stream().map(TodoDTO::new).collect(Collectors.toList());
// (3) 변환된 TodoDTO 리스트를 이용해 ResponseDTO를 초기화한다.
ResponseDTO<TodoDTO> response = ResponseDTO.<TodoDTO>builder().data(dtos).build();
// (4) ResponseDTO를 리턴한다.
return ResponseEntity.ok().body(response);
}
**테스팅
Json형태의 HTTP 응답이 리턴되는 것을 확인할 수 있다.
2.3.3 Update Todo 구현
2.3.3절에서는 Todo를 업데이트하는 리포지터리, 서비스, 컨트롤러를 구현한다.
** 퍼시스턴스 구현
업데이트를 위해 save(), findByUserId() 메서드를 사용한다.
** 서비스 구현
Update 기능의 구현을 위해 TodoService에 실습코드 2-38과 같은 update() 메서드를 작성해 보자.
// update
public List<TodoEntity> update(final TodoEntity entity) {
// (1) 저장할 엔티티가 유효한지 확인한다. 이 메서드는 2.3.1 Create Todo에서 구현했다.
validate(entity);
// (2) 넘겨받은 엔티티 id를 이용해 TodoEntity를 가져온다. 존재하지 않는 엔티티는 업데이트할 수 없기 때문이다.
final Optional<TodoEntity> original = repository.findById(entity.getId());
original.ifPresent(todo -> {
// (3) 반환된 TodoEntity가 존재하면 값을 새 entity 값으로 덮어 씌운다.
todo.setTitle(entity.getTitle());
todo.setDone(entity.isDone());
// (4) 데이터베이스에 새 값을 저장한다.
repository.save(todo);
});
// 2.3.2 Retrieve Todo에서 만든 메서드를 이용해 사용자의 모든 Todo 리스트를 리턴한다.
return retrieve(entity.getUserId());
}
if(original.isPresent()) {
// (3) 반환된 TodoEntity가 존재하면 값을 새 entity 값으로 덮어 씌운다.
final TodoEntity todo = original.get();
todo.setTitle(entity.getTitle());
todo.setDone(entity.isDone());
// (4) 데이터베이스에 새 값을 저장한다.
repository.save(todo);
}
람다식이 어색하면,,,ㅎ
** 컨트롤러 구현
@PutMapping
public ResponseEntity<?> updateDTodoList(@RequestBody TodoDTO dto) {
String temporaryUserId = "temporary-user"; // temporary user id.
// (1) dto를 entity로 변환한다.
TodoEntity entity = TodoDTO.toEntity(dto);
// (2) id를 temporaryUserId로 초기화한다. 여기는 4장 인증과 인가에서 수정할 예정이다.
entity.setId(temporaryUserId);
// (3) 서비스를 이용해 entity를 업데이트한다.
List<TodoEntity> entities = service.update(entity);
// (4) 자바 스트림을 이용해 리턴된 엔티티 리스트를 TodoDTO 리스트로 변환한다.
List<TodoDTO> dtos = entities.stream().map(TodoDTO::new).collect(Collectors.toList());
// (5) 변환된 TodoDTO 리스트를 이용해 ResponseDTO를 초기화한다.
ResponseDTO<TodoDTO> response = ResponseDTO.<TodoDTO>builder().data(dtos).build();
// (6) ResponseDTO를 리턴한다.
return ResponseEntity.ok().body(response);
}
**테스팅
수정하면 잘 바뀐다..ㅎ
'React.js, 스프링 부트, AWS로 배우는 웹 개발 101' 카테고리의 다른 글
[Error] JPQL 문법 오류 (0) | 2025.02.17 |
---|---|
[TIL] 25/02/16, 서비스 개발 및 실습(1) (0) | 2025.02.17 |
[TIL] 25/01/29, 퍼시스턴스 레이어 : 스프링 데이터 JPA (0) | 2025.01.29 |
[TIL] 25/01/28, Service Layer : Business Logic (0) | 2025.01.29 |
[TIL] 25/01/27, REST API (0) | 2025.01.28 |