시간이 애매하게 붕 떠서 강의대신 Lv5 구상을 미리 해보기로 했다.
- 게시글 좋아요 API
- 사용자는 선택한 게시글에 ‘좋아요’를 할 수 있습니다.
- 사용자가 이미 ‘좋아요’한 게시글에 다시 ‘좋아요’ 요청을 하면 ‘좋아요’를 했던 기록이 취소됩니다.
- 요청이 성공하면 Client 로 성공했다는 메시지, 상태코드 반환하기
- 댓글 좋아요 API
- 사용자는 선택한 댓글에 ‘좋아요’를 할 수 있습니다.
- 사용자가 이미 ‘좋아요’한 댓글에 다시 ‘좋아요’ 요청을 하면 ‘좋아요’를 했던 기록이 취소됩니다.
- 요청이 성공하면 Client 로 성공했다는 메시지, 상태코드 반환하기
- 예외처리
- 예외처리를 AOP 를 활용하여 구현하기
- 회원가입 시 username과 password의 구성이 알맞지 않으면 에러메시지와 statusCode: 400을 Client에 반환하기
- Spring Security 를 사용하여 토큰 검사 및 인증기능 확장
- 수정, 삭제시 사용자 검사도 Security로 구현할 것!
게시글 좋아요 API
- Controller에 updateLike 메서드 추가하기
좋아요의 수를 늘려야 하니 Update 기능으로 하는게 맞을 것이다. 좋아요를 추가하거나 줄이는 기능 뿐이기 때문에
게시글의 id만 받아온다. 반환은 상태코드만 반환하면 되기에 StatusResponseDto를 이용하면 될 것이다.
@PutMapping("/post/{id}/like")
public StatusResponseDto updateLike(@PathVariable Long id) {
return postService.updateLike(id, requestDto);
}
- Service에 updateLike 메서드 추가하기
update 기능은 영속성 관리 기능 덕에 구현할 수 있고 @Transactional이 이를 가능하게 해준다.
아래의 메서드를 완성하려면 post에 updateLike메서드를 추가할 필요가 있을 것이다. - 메서드를 추가해줄 때 UserLikePost에 해당 user와 post가 존재하는지 검사 후 저장한다.
boolean existsByUser_IdAndPost_Id(Long userId, Long postId)을 UserLikePostrepository를 만들어 생성해준다.
만일 True면 delete 요청을 하고 False면 save를 해준다. - UserLikePost라는 중간 테이블 클래스로 구현할 것.
@ManyToOne(fetch = FetchType.LAZY) 로 각 테이블의 id로 @joinColum 해줄 것. - Post에 likes 필드 추가, @OneToMany (mappedBy = "post")로 UserLikePost 객체 List로 필드로 가질 것,
User에서는 조회하지 않을것으로 필요 x ResponseDto에만 UserLikePost 필드는 숨기면 됨. - Post에 addLikes와 minusLikes 메서드 구현해서 Service에서 existsByUser_IdAndPost_Id로 참 거짓에 따라 잘 활용할 것
댓글 좋아요 API
- 게시글과 동일한 과정으로 진행 할 것이다.
이름에 Post가 붙은 요소들을 Comment로 바꾸면 끝나는 문제인 것 같다. - 이렇게 댓글과 게시글에 좋아요 수가 필드로 들어오면
get요청시 ResponseDto에서는 좋아요 수를 받아서 반환해줘야 할 것이다.
23년 9월 8일 금요일에는 여기까지 구상하였다. 직접 해보면 구상보다 좀 더 어려울 것이다.