spring / CRUD 기능구현(2)

kongta2·2023년 11월 29일
0
post-thumbnail

Todo프로젝트의 CRUD기능 중 수정, 삭제이다.

TodoController - putTodo, 수정

   @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한다.

TodoController - deletePost, 삭제

    @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정보를 받아온다.

TodoService - deletePost, 삭제

   public void deletePost(User user, Long todoId) {
        Todo post = getTodo(todoId, user);

        todoRepository.delete(post);
    }

간단하게 delete메서드를 이용해서 저장되어있던 todo를 삭제해준다.

Postman을 이용한 기능 구현 확인

  1. 수정

  2. 삭제

profile
2025.04.01~

0개의 댓글