제 15장. 댓글 컨트롤러와 서비스 만들기

강연주·2023년 10월 29일
0

앞에서 배웠듯이, 엔티티는 DB 데이터를 담는 자바 객체로, 엔티티를 기반으로 테이블이 생성되게 된다.

댓글 CRUD를 위한 REST API 주소를 다음과 설정했다.

  • GET: /articles/articleId/comments
  • POST: /articles/articleId/comments
  • PATCH: /comments/Id
  • DELETE: /comments/Id

댓글 컨트롤러와 서비스 틀 만들기

댓글(comment)을 생성할 때 대상 게시글(article)의 존재 여부를 파악하기 위해 댓글 리파지터리뿐만 아니라 게시글 리파지터리까지 필요하다.

댓글 조회하기

컨트롤러

이번에는 ResponseEntity<List>를 반환함으로써, 데이터 표현을 API 요구 사항에 맞게 조정해보자.
추가적으로, 12장에서는, 메서드의 반환값을 성공하는 경우와 실패하는 경우를 삼항 연산자로 작성하였지만, 실제 개발에서는 예외 처리 방식을 선호한다. 따라서 여기서는 실패할 경우 스프링 부트가 예외 처리를 한다고 가정하고, 댓글 조회에 성공하는 경우만 응답으로 보내겠다.

CommentDto

아래 애노테이션을 꼭 적용해주자!

서비스

comments 메서드에서는 Comment 객체를 하나하나 CommentDto 객체로 변환해 List 담는 과정을 진행해준다.

위 반복문을 아래와 같이 스트림 문법으로 개선할 수 있다.

결과

댓글 생성하기

댓글 생성 시, 보낼 요청은 다음과 같다.

위 요청을 처리하는 메서드를 만들어보자.

컨트롤러

서비스

create문이므로 @Transactional 애노테이션을 꼭 적용시켜야 한다!

Comment 엔티티

CommentDto를 바탕으로 Comment 엔티티로 변환하는 메서드에서 발생하는 예외는 2가지이다.

  1. dto에 id가 존재하는 경우(댓글을 생성하기 전부터 id 값이 있을 수 없음)
  2. 게시글이 일치하지 않는 경우

결과


인텔리제이에서 오류 메시지도 확인 가능

댓글 수정하기

컨트롤러

서비스

Comment 엔티티

변경감지를 이용한 수정 메서드

결과

댓글 삭제하기

컨트롤러

서비스

결과

profile
백엔드 개발자 준비중

0개의 댓글