eco-dessert-platform / backend

Apache License 2.0
0 stars 0 forks source link

⚙️ Refactoring 순원님이 만들어 놓으신 CusorPageResponse에 대한 의견 요청 #291

Open sikdong opened 1 week ago

sikdong commented 1 week ago

Issue: ⚙️ Refactoring

순원님이 만들어 놓으신 CusorPageResponse에 대한 의견 요청

Description

CursorPageResponse 로 변경 중 다른 도메인은 모르겠지만 제가 만든 Review 쪽에는 적용이 어려워 도움 요청 차 이슈를 남깁니다

적용이 어렵다고 생각하는 이유 image

  1. Early Return의 불가 image

이번에 만들어주신 클래스는 첫번째 매개변수에 최종 dto(ReviewInfoResponse)를 담아야 하는데 ReviewInfoResponse는 Early Return이 되지 않는 경우(dto가 비어있지 않은 경우)에만 만들어지기 때문에 if -else 구문을 써보려고도 했지만 비어있는 경우 이후 로직을 안타는 것이 더 성능 상 좋겠다는 생각이 들었습니다

  1. 해당 로직을 사용할 수 없음 보시는 것처럼 저는 ReviewCursor에서 범위를 정해 이미지와 도움되요를 가져오기 때문에 CursorPageResponse 를 적용하는 경우 이 로직을 사용 못하게 되더라구요.

이 이슈를 올린 이유는 다른 분들이 실제로 이 클래스를 사용했을 때 어떠셨는지 여쭤보고 싶었고 이 클래스는 사용하기 어렵다가 아닌 좀 더 같의 의논하면서 발전시켜보고 싶어서 올렸습니다. 의견 부탁 드립니다

To do

ETC

yunyechan9893 commented 1 week ago

그러네요. 현재 로직은 11개를 가져온 후 다음 전처리 과정을 이행하기 위해 불필요한 아이템을 제거 (11개에서 10개로 만듦) 후 진행하는데, 순원님 클래스는 바로 Response로 만드니 문제가 될 수 있겠네요!

저도 내일 진행해보고 다시 댓글달겠습니다

yunyechan9893 commented 1 week ago

동석님 이번 이슈 해결했습니다! 아래 PR 확인 부탁드릴게요

https://github.com/eco-dessert-platform/backend/pull/297

sunwon12 commented 1 week ago

    @Transactional(readOnly = true)
    public CursorPageResponse<ReviewInfoResponse> getMyReviews(Long memberId, Long cursorId) {
        List<ReviewSingleDto> myReviewList = reviewRepository.getMyReviews(memberId, cursorId);
        if (ObjectUtils.isEmpty(myReviewList)) {
            return CursorPageResponse.of(Collections.emptyList(), 10, ReviewInfoResponse::getId);
        }

        List<Long> reviewIds = 리뷰아이디들가져오기(myReviewList);
        Map<Long, String> imagesMap = imageService.리뷰아이디들의_해당하는_이미지 가져오기(reviewIds);
        Map<Long, List<Long>> likeMap = makeLikeMap(reviewIds);

        List<ReviewInfoResponse> reviewInfoResponses = MappingReiew.reviewWithImageAndLike(myReviewList, imagesMap, likeMap);
        ReviewInfoResponse reviewInfoResponses2 = 태그액션으로_바꾸기(reviewInfoResponses); 

        return CursorPageResponse.of(reviewInfoResponses2, 10, ReviewInfoResponse::getId);
    }

이런 식으로 바꾸는 게 어떨까요? 그리고

  1. CursorPageReponse가 생겼으므로 ReviewCursor 객체는 필요없을 것 같아요
  2. 아이디 범위를 두어서 가져오기보단 아이디들에 해당하는 이미지나, 좋아요를 가져오는 게 어떨까요

+) 참고로 CursorPageResponse에 빈 DTO리스트 파라미터로 넘겨줘도 됩니다