Todo프로젝트의 CRUD기능 중 수정, 삭제이다.
@PutMapping("/{todoId}")
public ResponseEntity<CommonResponseDto> putTodo(@PathVariable Long todoId, @RequestBody TodoRequestDto todoRequestDto, @AuthenticationPrincipal UserDetailsImpl userDetails) {
try {
TodoResponseDto responseDto = todoService.updateTodo(todoId, todoRequestDto, userDetails.getUser());
return ResponseEntity.ok().body(responseDto);
} catch (RejectedExecutionException | IllegalArgumentException ex) {
return ResponseEntity.badRequest().body(new CommonResponseDto(ex.getMessage(), HttpStatus.BAD_REQUEST.value()));
}
}
@PathVariable을 이용해서 수정할 todoId를 받아오고, @AuthenticationPrincipal을 이용해서 유저정보를 받아온다.
TodoService - updateTodo, 수정
@Transactional
public TodoResponseDto updateTodo(Long todoId, TodoRequestDto todoRequestDto, User user) {
Todo todo = getTodo(todoId, user);
todo.setTitle(todoRequestDto.getTitle());
todo.setContent(todoRequestDto.getContent());
return new TodoResponseDto(todo);
}
자동으로 수정을 수행할 수 있도록 @Transactional을 이용하고, setTitle, setContent로 값을 변환하고 return한다.
@DeleteMapping("/{todoId}")
public ResponseEntity<CommonResponseDto> deletePost(@AuthenticationPrincipal UserDetailsImpl userDetails, @PathVariable Long todoId) {
try {
todoService.deletePost(userDetails.getUser(), todoId);
return ResponseEntity.ok().body(new CommonResponseDto("게시물 삭제가 완료되었습니다.", HttpStatus.OK.value()));
} catch (RejectedExecutionException | IllegalArgumentException e){
return ResponseEntity.badRequest().body(new CommonResponseDto("작성자만 삭제할 수 있습니다.", HttpStatus.BAD_REQUEST.value()));
}
}
수정할때와 같이 @PathVariable과 @AuthenticationPrincipal을 이용해서 todoId와 user정보를 받아온다.
public void deletePost(User user, Long todoId) {
Todo post = getTodo(todoId, user);
todoRepository.delete(post);
}
간단하게 delete메서드를 이용해서 저장되어있던 todo를 삭제해준다.
수정

삭제
