Skip to content

Commit

Permalink
Feat: 한줄요약 조회 API 구현 (#59)
Browse files Browse the repository at this point in the history
* #55 - refactor: @Valid 중복 검사 삭제

* #55 - feat: 한줄요약 조회 기능 구현

* #55 - feat: 한줄요약 조회 기능 테스트 코드 구현
  • Loading branch information
morenow98 authored Feb 3, 2024
1 parent 12f20e5 commit a70eba9
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import cotato.bookitlist.config.security.jwt.AuthDetails;
import cotato.bookitlist.review.dto.request.ReviewRegisterRequest;
import cotato.bookitlist.review.dto.request.ReviewUpdateRequest;
import cotato.bookitlist.review.dto.response.ReviewResponse;
import cotato.bookitlist.review.service.ReviewService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
Expand Down Expand Up @@ -45,4 +46,11 @@ public ResponseEntity<Void> registerReview(

return ResponseEntity.ok().build();
}

@GetMapping("/{review-id}")
public ResponseEntity<ReviewResponse> getReview(
@PathVariable("review-id") Long reviewId
) {
return ResponseEntity.ok(ReviewResponse.from(reviewService.getReview(reviewId)));
}
}
23 changes: 23 additions & 0 deletions src/main/java/cotato/bookitlist/review/dto/ReviewDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package cotato.bookitlist.review.dto;

import cotato.bookitlist.review.domain.Review;

public record ReviewDto(
Long reviewId,
Long memberId,
Long bookId,
String content,
int likeCount,
int viewCount
) {
public static ReviewDto from(Review entity) {
return new ReviewDto(
entity.getId(),
entity.getMember().getId(),
entity.getBook().getId(),
entity.getContent(),
entity.getLikeCount(),
entity.getViewCount()
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package cotato.bookitlist.review.dto.response;

import cotato.bookitlist.review.dto.ReviewDto;

public record ReviewResponse(
Long reviewId,
Long memberId,
Long bookId,
String content,
int likeCount,
int viewCount
) {
public static ReviewResponse from(ReviewDto reviewDto) {
return new ReviewResponse(
reviewDto.reviewId(),
reviewDto.memberId(),
reviewDto.bookId(),
reviewDto.content(),
reviewDto.likeCount(),
reviewDto.viewCount()
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
import cotato.bookitlist.member.domain.Member;
import cotato.bookitlist.member.repository.MemberRepository;
import cotato.bookitlist.review.domain.Review;
import cotato.bookitlist.review.dto.ReviewDto;
import cotato.bookitlist.review.dto.request.ReviewRegisterRequest;
import cotato.bookitlist.review.dto.request.ReviewUpdateRequest;
import cotato.bookitlist.review.repository.ReviewRepository;
import jakarta.persistence.EntityNotFoundException;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -34,12 +34,19 @@ public Long registerReview(ReviewRegisterRequest request, Long memberId) {
return reviewRepository.save(review).getId();
}

public void updateReview(Long reviewId, @Valid ReviewUpdateRequest reviewUpdateRequest, Long memberId) {
public void updateReview(Long reviewId, ReviewUpdateRequest reviewUpdateRequest, Long memberId) {
Member member = memberRepository.getReferenceById(memberId);

Review review = reviewRepository.findById(reviewId)
.orElseThrow(() -> new EntityNotFoundException("한줄요약을 찾을 수 없습니다"));

review.updateReview(member, reviewUpdateRequest.content());
}

public ReviewDto getReview(Long reviewId) {
Review review = reviewRepository.findById(reviewId)
.orElseThrow(() -> new EntityNotFoundException("한줄요약을 찾을 수 없습니다"));

return ReviewDto.from(review);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@

import java.util.List;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
Expand Down Expand Up @@ -149,4 +148,28 @@ private static List<ReviewUpdateRequest> provideInvalidReviewUpdateRequest() {
new ReviewUpdateRequest(tooLongContent)
);
}

@Test
@DisplayName("한줄요약을 조회한다.")
void givenReviewId_whenGettingReview_thenReturnReviewResponse() throws Exception {
//given

//when & then
mockMvc.perform(get("/reviews/1")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
;
}

@Test
@DisplayName("없는 한줄요약 id로 조회하면 에러를 반환한다.")
void givenNonExistedReviewId_whenGettingReview_thenErrorResponse() throws Exception {
//given

//when & then
mockMvc.perform(get("/reviews/10")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isNotFound())
;
}
}

0 comments on commit a70eba9

Please sign in to comment.