본문 바로가기

TIL(Today Ingwang Learned)

TIL)2022-12-19(Spring)


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


Calendar
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
더보기
Archives
Visits
Today
Yesterday