[인스타그램 클론코딩] 09. 게시물 좋아요 기능 구현(Back-End)

2023. 2. 4. 12:00·Web/인스타 클론 코딩
목차
  1. 1. PostDto 수정
  2. 2. PostService에 postLike를 등록, 삭제하는 로직 구현
  3. 3. PostController에 좋아요 요청을 처리하는 메서드 작성

게시글 좋아요 기능을 구현하는 로직은 다음과 같다. 헤당 게시글과 좋아요를 누른 유저의 정보를 DB에 저장하며, 그 정보를 토대로 좋아요를 누른 상태와 아닌 상태를 구분하는 것이다.

 

1. PostDto 수정

기존의 PostDto에서 추가적으로 게시글에 대한 게시글 좋아요를 누른 상태인지를 반환해주는 like라는 불리언 변수를 추가해주었다.

@Data
public class PostDto {

    private Long postId;
    private UserDto user;
    private String content;
    private List<PostFileDto> postFileList;
    private boolean like;

    @Builder
    public PostDto(Long postId, UserDto user, String content, List<PostFileDto> postFileList, boolean like) {
        this.postId = postId;
        this.user = user;
        this.content = content;
        this.postFileList = postFileList;
        this.like = like;
    }
}

 

2. PostService에 postLike를 등록, 삭제하는 로직 구현

@Transactional
public PostResponseDto setPostLike(User user, Long postId) {
    Post post = postRepository.findById(postId).orElseThrow(() -> new EntityNotFoundException("해당 게시글이 없습니다."));

    // postLike 저장 DB에 요청 좋아요 정보가 없다면, 저장한다.
    if(!postLikeRepository.existsByPostAndUser(post, user)) {
        postLikeRepository.save(PostLike.builder()
                .post(post)
                .user(user)
                .build());
    }

    return this.getPostList(user);
}

@Transactional
public PostResponseDto deletePostLike(User user, Long postId) {
    Post post = postRepository.findById(postId).orElseThrow(() -> new EntityNotFoundException("해당 게시글이 없습니다."));

    PostLike postLike = postLikeRepository.findByPostAndUser(post, user).orElseThrow(() -> new EntityNotFoundException());

    postLikeRepository.delete(postLike);

    return this.getPostList(user);
}

 

- setPostLike는 좋아요를 누른 User와 그 게시글의 Id를 입력으로 받아, postLike DB에 저장해 준뒤, 이전에 작성했던 포스트 리스트를 반환해주는 getPostList의 결과 값을 반환해준다.

.- deletePostLike 또한 좋아요를 누른 User와 그 게시글의 Id를 입력으로 받아, postLike DB에서 해당 정보를 삭제 후, getPostList의 결과 값을 반환해준다.

 

3. PostController에 좋아요 요청을 처리하는 메서드 작성

@GetMapping("/like")
public ResponseEntity setPostLike(@CurrentUser User user, @RequestParam(value = "postId") Long postId) {
    try {
        return ResponseEntity.ok().body(postService.setPostLike(user, postId));
    } catch (Exception e) {
        return ResponseEntity.badRequest().body(e.getMessage());
    }
}

@DeleteMapping("/like")
public ResponseEntity deletePostLike(@CurrentUser User user, @RequestParam(value = "postId") Long postId) {
    try {
        return ResponseEntity.ok().body(postService.deletePostLike(user, postId));
    } catch (Exception e) {
        return ResponseEntity.badRequest().body(e.getMessage());
    }
}

 

- setPostLike는 Get 요청과 postId를 파라미터로 받아 setPostLike 메서드에 넘겨준다.

- deletePostLike는 Delete 요청과 postId를 파라미터로 받아 deletePostLike 메서드에 넘겨준다.

저작자표시 비영리 변경금지 (새창열림)

'Web > 인스타 클론 코딩' 카테고리의 다른 글

[인스타그램 클론코딩] 10. 게시물 댓글 기능 구현(Back-End)  (0) 2023.02.07
[인스타그램 클론코딩] 09. 게시물 좋아요 기능 구현(Front-End)  (0) 2023.02.04
[인스타그램 클론코딩] 08. 홈 화면 구현(Front-End)  (0) 2023.02.03
[인스타그램 클론코딩] 08. 홈 화면 구현(Back-End)  (0) 2023.02.03
[인스타그램 클론코딩] 07. 팔로우 기능 구현(Back-End)  (0) 2023.02.02
  1. 1. PostDto 수정
  2. 2. PostService에 postLike를 등록, 삭제하는 로직 구현
  3. 3. PostController에 좋아요 요청을 처리하는 메서드 작성
'Web/인스타 클론 코딩' 카테고리의 다른 글
  • [인스타그램 클론코딩] 10. 게시물 댓글 기능 구현(Back-End)
  • [인스타그램 클론코딩] 09. 게시물 좋아요 기능 구현(Front-End)
  • [인스타그램 클론코딩] 08. 홈 화면 구현(Front-End)
  • [인스타그램 클론코딩] 08. 홈 화면 구현(Back-End)
뚝딱뚝딱2
뚝딱뚝딱2
  • 뚝딱뚝딱2
    개발도상국
    뚝딱뚝딱2
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 공부
        • Java
        • Spring Boot
        • LORA
      • Web
        • 인스타 클론 코딩
        • GPT 응답 API 서버
        • Spring Boot 예외 처리
        • 코테 준비용 서비스 만들기
      • DevOps
        • 쿠버네티스
        • 서버 만들기
      • 코딩테스트
        • 알고리즘
      • 교육
        • 스파르타코딩클럽 - 내일배움단
        • 혼자 공부하는 컴퓨터 구조 운영체제
      • 잡다한것
  • 블로그 메뉴

    • 홈
  • 링크

    • GITHUB
  • 공지사항

  • 인기 글

  • 태그

    오블완
    MSA
    클러스터
    백준
    인스타그램
    티스토리챌린지
    spring boot
    리액트
    Entity
    클론코딩
    chat GPT
    mapstruct
    스프링 부트
    예외
    쿠버네티스
    OpenAI API
    Java
    react
    REST API
    스프링부트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
뚝딱뚝딱2
[인스타그램 클론코딩] 09. 게시물 좋아요 기능 구현(Back-End)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.