SNS 제작 (좋아요 개수 리턴)

개발연습생log·2023년 1월 8일
0

SNS 제작

목록 보기
14/15
post-thumbnail

✨개요

🏃 목표

📢 좋아요 개수를 리턴하는 기능을 구현하자.

📢 요구사항

GET /posts/{postsId}/likes

  • 리턴 (JSON 형식)
    {
    	"resultCode":"SUCCESS",
      "result": 0
    }

📜 접근방법

  • Post의 likes 리스트의 size를 반환한다.

✅ TO-DO

  • 좋아요 개수 컨트롤러 테스트 구현
  • 좋아요 개수 서비스 테스트 구현
  • 좋아요 개수 컨트롤러 구현
  • 좋아요 개수 서비스 구현

🔧 구현

좋아요 개수 컨트롤러 테스트

테스트 성공

<@Test
    @DisplayName("좋아요 개수 리턴 성공")
    @WithMockUser
    void like_count_SUCCESS() throws Exception {
        when(likeService.likeCount(any()))
                .thenReturn(3L);

        mockMvc.perform(get("/api/v1/posts/1/likes")
                        .with(csrf())
                        .contentType(MediaType.APPLICATION_JSON))
                .andDo(print())
                .andExpect(status().isOk());
    }

테스트 실패 : 포스트가 없는 경우

@Test
    @DisplayName("좋아요 카운트 리턴 실패 : 포스트가 없는 경우")
    @WithMockUser
    void like_count_FAIL_post() throws Exception {
        when(likeService.likeCount(any()))
                .thenThrow(new AppException(ErrorCode.POST_NOT_FOUND, ErrorCode.POST_NOT_FOUND.getMessage()));

        mockMvc.perform(get("/api/v1/posts/1/likes")
                        .with(csrf()))
                .andDo(print())
                .andExpect(status().isNotFound());
    }

좋아요 개수 서비스 테스트

테스트 성공

@Test
    @DisplayName("좋아요 카운트 리턴 성공")
    void like_count_SUCCESS() {
        when(postRepository.findById(any()))
                .thenReturn(Optional.of(post));

        assertDoesNotThrow(() -> likeService.likeCount(post.getId()));
    }

테스트 실패 : 포스트가 없는 경우

@Test
    @DisplayName("좋아요 카운트 리턴 실패 : 포스트가 없는 경우")
    void like_count_FAIL_post() {
        when(postRepository.findById(any()))
                .thenReturn(Optional.empty());

        AppException exception = assertThrows(AppException.class, () -> likeService.likeCount(post.getId()));
        assertEquals(ErrorCode.POST_NOT_FOUND, exception.getErrorCode());
    }

좋아요 개수 컨트롤러

@GetMapping
    public ResponseEntity<Response> likeCount(@PathVariable Long postId) {
        Long likeCount = likeService.likeCount(postId);
        return ResponseEntity.ok().body(Response.of("SUCCESS", likeCount));
    }

좋아요 개수 서비스

public Long likeCount(Long postId) {
        //포스트 체크
        Post findPost = AppUtil.findPost(postRepository, postId);
        //좋아요 갯수 리턴
        return findPost.getLikes().stream().count();
    }

🌉 회고

  • 좋아요 기능은 구현 완료했다.
  • 지금까지 구현한 코드들을 보면서 리팩토링을 진행해야 할 것 같다.
  • 프로젝트를 진행하면서 성공했다는 성취감보다 아직 내가 현업에서 일하기에 너무 부족하다는 느낌을 많이 받았다.
  • 지금까지 개인 프로젝트를 진행하면서 구현에만 신경을 쓰고 스프링에 관한 개념 공부는 신경쓰지 못한 부분이 있었다.
  • 이제부터는 스프링 개념 공부에 시간 분배를 잘 해야 할 것 같다.
profile
주니어 개발자를 향해서..

0개의 댓글