Skip to content

Commit

Permalink
[BSVR-214] 리뷰 조회 offset에서 cursor 방식으로 변경 + 이전리뷰(seat nullable) 반영 (#144)
Browse files Browse the repository at this point in the history
* feat: 리뷰 조회 request dto offset -> cursor 방식으로 업데이트

* feat: 리뷰 조회 response dto offset -> cursor 방식으로 업데이트

* feat: readreview쪽 controller, usecase offset -> cursor 방식으로 업데이트

* feat: response에서 review 쪽 total element 필드 삭제

* feat: ReadReviewService offset->cursor

* feat: repository cursor 방식으로 변경 + seat nullable 하게 변경 + N+1 문제 해결

* feat: fake review image, keyword 레포지토리 삭제

* feat: test 위한 set 메서드 추가

* feat: 테스트 코드 작성

* chore: 주석 코드 삭제

* feat: 복합 cursor 방식으로 request, response dto 수정

* feat: SORT_CRITERIA enum 추가

* feat: 공감순, 최신순으로 정렬한 복합 커서 방식으로 업데이트 - likesCount:dateTime:id

* test: test 코드 주석처리
  • Loading branch information
pminsung12 authored Aug 19, 2024
1 parent 4640284 commit 23a70c3
Show file tree
Hide file tree
Showing 18 changed files with 568 additions and 565 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,6 @@
import org.depromeet.spot.usecase.port.in.review.ReadReviewUsecase.MyRecentReviewResult;
import org.depromeet.spot.usecase.port.in.review.ReadReviewUsecase.MyReviewListResult;
import org.depromeet.spot.usecase.port.in.review.ReadReviewUsecase.ReadReviewResult;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

Expand Down Expand Up @@ -52,14 +48,7 @@ public BlockReviewListResponse findReviewsByBlockId(
Long stadiumId,
@PathVariable("blockCode") @NotNull @Parameter(description = "블록 코드", required = true)
String blockCode,
@ModelAttribute @Valid BlockReviewRequest request,
@ParameterObject
@PageableDefault(
size = 20,
page = 0,
sort = "dateTime",
direction = Sort.Direction.DESC)
Pageable pageable) {
@ModelAttribute @Valid BlockReviewRequest request) {

BlockReviewListResult result =
readReviewUsecase.findReviewsByStadiumIdAndBlockCode(
Expand All @@ -69,7 +58,9 @@ public BlockReviewListResponse findReviewsByBlockId(
request.seatNumber(),
request.year(),
request.month(),
pageable);
request.cursor(),
request.sortBy(),
request.size());
return BlockReviewListResponse.from(
result, request.rowNumber(), request.seatNumber(), request.year(), request.month());
}
Expand All @@ -92,18 +83,16 @@ public ReviewMonthsResponse findReviewMonths(@Parameter(hidden = true) Long memb
description = "연도와 월로 필터링할 수 있다. 필터링 없이 전체를 조회하려면 year와 month를 null로 입력한다.")
public MyReviewListResponse findMyReviews(
@Parameter(hidden = true) Long memberId,
@ModelAttribute @Valid MyReviewRequest request,
@ParameterObject
@PageableDefault(
size = 20,
page = 0,
sort = "dateTime",
direction = Sort.Direction.DESC)
Pageable pageable) {
@ModelAttribute @Valid MyReviewRequest request) {

MyReviewListResult result =
readReviewUsecase.findMyReviewsByUserId(
memberId, request.year(), request.month(), pageable);
memberId,
request.year(),
request.month(),
request.cursor(),
request.sortBy(),
request.size());
return MyReviewListResponse.from(result, request.year(), request.month());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,15 @@
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;

import org.depromeet.spot.domain.review.Review.SortCriteria;

import io.swagger.v3.oas.annotations.Parameter;

public record BlockReviewRequest(
@Parameter(description = "열 번호 (필터링)") Integer rowNumber,
@Parameter(description = "좌석 번호 (필터링)") Integer seatNumber,
@Min(1000) @Max(9999) @Parameter(description = "년도 (4자리 숫자)") Integer year,
@Min(1) @Max(12) @Parameter(description = "월 (1-12)") Integer month) {}
@Min(1) @Max(12) @Parameter(description = "월 (1-12)") Integer month,
@Parameter(description = "다음 페이지 커서") String cursor,
@Parameter(description = "정렬 기준", example = "DATE_TIME") SortCriteria sortBy,
@Parameter(description = "페이지 크기") Integer size) {}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,13 @@
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;

import org.depromeet.spot.domain.review.Review.SortCriteria;

import io.swagger.v3.oas.annotations.Parameter;

public record MyReviewRequest(
@Min(1000) @Max(9999) @Parameter(description = "년도 (4자리 숫자)") Integer year,
@Min(1) @Max(12) @Parameter(description = "월 (1-12)") Integer month) {}
@Min(1) @Max(12) @Parameter(description = "월 (1-12)") Integer month,
@Parameter(description = "다음 페이지 커서") String cursor,
@Parameter(description = "정렬 기준", example = "DATE_TIME") SortCriteria sortBy,
@Parameter(description = "페이지 크기") Integer size) {}
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public record BaseReviewResponse(
public static BaseReviewResponse from(CreateReviewResult result) {
Review review = result.review();
Member member = result.member();

return new BaseReviewResponse(
review.getId(),
MemberInfo.from(member),
Expand Down Expand Up @@ -112,7 +113,6 @@ public static RowResponse from(BlockRow row) {
public record SeatResponse(Long id, Integer seatNumber) {

public static SeatResponse from(Seat seat) {
if (seat == null) return null;
return new SeatResponse(seat.getId(), seat.getSeatNumber());
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,8 @@ public record BlockReviewListResponse(
List<KeywordCountResponse> keywords,
List<BaseReviewResponse> reviews,
List<TopReviewImageResponse> topReviewImages,
long totalElements,
int totalPages,
int number,
int size,
boolean first,
boolean last,
String nextCursor,
boolean hasNext,
FilterInfo filter) {

public static BlockReviewListResponse from(
Expand All @@ -38,20 +34,13 @@ public static BlockReviewListResponse from(

FilterInfo filter = new FilterInfo(rowNumber, seatNumber, year, month);

boolean first = result.number() == 0;
boolean last = result.number() == result.totalPages() - 1;

return new BlockReviewListResponse(
result.location(),
keywordResponses,
reviewResponses,
topReviewImageResponses,
result.totalElements(),
result.totalPages(),
result.number(),
result.size(),
first,
last,
result.nextCursor(),
result.hasNext(),
filter);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,8 @@
public record MyReviewListResponse(
MemberInfoOnMyReviewResult memberInfoOnMyReview,
List<MyReviewResponse> reviews,
long totalElements,
int totalPages,
int number,
int size,
boolean first,
boolean last,
String nextCursor,
boolean hasNext,
FilterInfo filter) {
public static MyReviewListResponse from(
MyReviewListResult result, Integer year, Integer month) {
Expand All @@ -25,17 +21,11 @@ public static MyReviewListResponse from(
result.reviews().stream().map(MyReviewResponse::from).collect(Collectors.toList());
FilterInfo filter = new FilterInfo(null, null, year, month);

boolean first = result.number() == 0;
boolean last = result.number() == result.totalPages() - 1;
return new MyReviewListResponse(
result.memberInfoOnMyReviewResult(),
reviews,
result.totalElements(),
result.totalPages(),
result.number(),
result.size(),
first,
last,
result.nextCursor(),
result.hasNext(),
filter);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public class Review {
private final Seat seat;
private final LocalDateTime dateTime;
private final String content;
private final LocalDateTime deletedAt;
private LocalDateTime deletedAt;
private List<ReviewImage> images;
private List<ReviewKeyword> keywords;
private transient Map<Long, Keyword> keywordMap;
Expand Down Expand Up @@ -88,4 +88,13 @@ public void setKeywordMap(Map<Long, Keyword> keywordMap) {
public Keyword getKeywordById(Long keywordId) {
return keywordMap != null ? keywordMap.get(keywordId) : null;
}

public void setDeletedAt(LocalDateTime now) {
this.deletedAt = now;
}

public enum SortCriteria {
DATE_TIME,
LIKES_COUNT,
}
}
Loading

0 comments on commit 23a70c3

Please sign in to comment.