Spring boot
게시글 좋아요 구현
1. 게시글 좋아요 레포지토리를 만들어 좋아요 데이터만 따로 저장
2. 좋아요 레포지토리에서 userId와 boardId 의 값과 일치하는 데이터가 있는 경우 > 좋아요가 된 상태
or 좋아요가 안된 상태
3. API를 하나로 만들어 한번 클릭시 좋아요, 한번더 클릭시 좋아요 취소가 되게 설계
1.service
@Transactional
public ResponseMsgDto boardLike(Long id, User user){
Board board = boardRepository.findById(id).orElseThrow(
()->new RequestException(ErrorCode.NULL_CONTENTS_400)
);
if(boardLikeRepository.findByBoardAndUserId(board, user.getId()).isEmpty()){ // 보드라이크에 값이 있는지 확인
boardLikeRepository.save(new BoardLike(user, board)); // 없으면 저장
return new ResponseMsgDto(HttpStatus.OK.value(),"좋아요 성공");
}
else {
boardLikeRepository.deleteByBoardIdAndUserId(board.getId(),user.getId());// 있으면 삭제
return new ResponseMsgDto(HttpStatus.OK.value(),"좋아요 취소");
}
}
2. controller
//게시글 좋아요 기능
@PostMapping("/boards/{boardId}/boardLike")
public MsgResponseDto saveBoardLike(
@PathVariable Long boardId,
@AuthenticationPrincipal UserDetailsImpl userDetails) {
return boardService.boardLike(boardId, userDetails.getUser());
}
3.entity
@Entity(name = "BoardLike")
@Getter
@NoArgsConstructor
public class BoardLike {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "User_Id", nullable = false) // category(n) <-> User(1) 단방향 관계
private User user; // 좋아요 사용자 Id
@ManyToOne
@JoinColumn(name = "Board_Id", nullable = false) // category(n) <-> Board(1) 단방향 관계
private Board board; // 좋아요 게시물 Id
public BoardLike(Board board, User user) {
this.board = board;
this.user = user;
}
}
구현 완료~
댓글 좋아요 수 출력하는 방법
commentLikeRepository.countAllByCommentId(comment.getId()))
를 사용하여 commentlike의 개수 count 후 출력하면 됨
'TIL(Today Ingwang Learned)' 카테고리의 다른 글
TIL)2022-12-28(Spring) (0) | 2022.12.29 |
---|---|
TIL) 2022- 12-23(Spring, git) (0) | 2022.12.24 |
TIL)2022-12-17(Spring) (0) | 2022.12.20 |
TIL)2022-12-16(JAVA,GIT) (1) | 2022.12.17 |
TIL)2022-12-15(Spring) (0) | 2022.12.16 |