- 23.11.17) TIL - 숙련 주차 7일차2023년 11월 17일 19시 54분 46초에 업로드 된 글입니다.작성자: oneseel
개인 프로젝트 진행상황
- comment entity와 user entity, todo entity 연관관계 설정
- 댓글 추가, 댓글 수정, 댓글 삭제 API 구현
댓글 관련 API의 경우 기존 할일카드 만들 때와 비슷한 형태로 구성했다.
1. 댓글 추가 API
1) CommentController
- 기존의 할일카드 만들 때와 달리 할일카드의 id값이 필요하다.
@RequestMapping("/api/todo/{todo_id}/comment")
@PostMapping public ResponseEntity<CommentResponseDto> createComment( @PathVariable Long todo_id, @RequestBody CommentRequestDto requestDto) { CommentResponseDto responseDto = commentService.createComment(requestDto, todo_id); return ResponseEntity.status(HttpStatus.CREATED).body(responseDto);
2) CommentService
public CommentResponseDto createComment(CommentRequestDto requestDto, Long todo_id) { User user = todoService.getUser(); // 회원 확인 Todo todo = todoService.getTodoCard(todo_id); // 할일카드 확인 Comment comment = new Comment(requestDto, user, todo); Comment saveComment = commentRepository.save(comment); return new CommentResponseDto(saveComment); }
- 기존의 todoService에 있던 회원인지 확인하는 메소드 getUser를 사용한다. (todoService는 주입해서 사용)
더보기User getUser() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); String username = authentication.getName(); // 현재 로그인한 사용자의 정보를 가져오기 return userRepository.findByUsername(username) .orElseThrow(() -> new IllegalArgumentException("현재 로그인한 사용자를 찾을 수 없습니다.")); }
- 회원확인 이후에는 todoService에 있던 할일카드가 존재하는지 확인하는 메소드 getTodoCard를 사용한다.
더보기Todo getTodoCard(Long id) { return todoRepository.findById(id) .orElseThrow(() -> new IllegalArgumentException("선택한 할일카드가 존재하지 않습니다.") ); }
- 할일카드가 확인 이후에는 댓글 객체를 만들어서 commentRepository에 저장한다.
2. 댓글 수정 API
1) CommentController
@PatchMapping("/{comment_id}") public ResponseEntity<CommentResponseDto> updateComment( @PathVariable Long todo_id, @PathVariable Long comment_id, @RequestBody CommentUpdateRequestDto requestDto) { CommentResponseDto responseDto = commentService.updateComment(requestDto, todo_id, comment_id); return ResponseEntity.ok(responseDto); }
2) CommentService
@Transactional public CommentResponseDto updateComment(CommentUpdateRequestDto requestDto, Long todo_id, Long comment_id) { todoService.getUser(); // 회원 확인 Todo todo = todoService.getTodoCard(todo_id); // 할일카드 확인 Comment comment = getComment(comment_id); // 댓글 확인 comment.update(requestDto); return new CommentResponseDto(comment); }
- 회원 확인, 할일카드 확인, 이후에 댓글이 존재하는지 getComment라는 메소드를 만들어서 확인해준다.
더보기// 댓글 존재 여부 Comment getComment(Long id) { return commentRepository.findById(id) .orElseThrow(() -> new IllegalArgumentException("선택한 할일카드가 존재하지 않습니다.") ); }
3. 댓글 삭제 API
1) CommentController
// 댓글 삭제 @DeleteMapping("/{comment_id}") public ResponseEntity<Void> deleteComment( @PathVariable Long todo_id, @PathVariable Long comment_id) { commentService.deleteComment(todo_id, comment_id); return ResponseEntity.noContent().build(); }
2) CommentService
public void deleteComment(Long todo_id, Long comment_id) { todoService.getUser(); // 회원 확인 Todo todo = todoService.getTodoCard(todo_id); // 할일카드 확인 Comment comment = getComment(comment_id); // 댓글 확인 commentRepository.delete(comment); }
이제 Validation 설정과 예외처리 부분을 하면 프로젝트의 기본 요구사항은 갖출 수 있다.
'TIL' 카테고리의 다른 글
23.11.28) TIL (0) 2023.11.28 23.11.22) TIL - 뉴스피드 프로젝트 1일차 (0) 2023.11.22 23.11.16) TIL - 스프링 숙련 주차 8일차 (0) 2023.11.16 23.11.15) TIL - 스프링 숙련 주차 7일차 (0) 2023.11.15 23.11.14) TIL - 스프링 숙련주차 6일차 (1) 2023.11.14 댓글