eco-dessert-platform / backend

Apache License 2.0
0 stars 0 forks source link

본인의 위시리스트 폴더 내 게시글 조회 로직 수정 #165

Closed shoeone96 closed 4 months ago

shoeone96 commented 5 months ago

History

🚀 Major Changes & Explanations

-> 최신 담은 순, 인기순, 낮은 가격순으로 정상적으로 조회하는 것을 확인

-> 새롭게 적용한 방식에 대해 피드백을 받아보고 싶습니다.


24.05.22 update

  1. 기존 FolderBoardSortType 열거형에서 cursor에 따른 BooleanBuilder, 실제 쿼리문 클래스를 매핑하는 방식 적용
    • 정렬 방식에 따라 cursor와 쿼리문이 모두 달라지는 부분에서 이렇게 작성
    • 그러나 FolderBoardSortType의 책임 범위가 크다는 피드백을 받음

cursor에 따른 ordering 순서는 CursorGeneratorMapping에 책임을 이양, query문은 QueryGeneratorMapping에 책임을 이양 -> spring의 HandlerMapping이 api경로에 따라 컨트롤러, 메서드를 mapping 해주는 것에서 참고

스크린샷 2024-05-22 오후 5 08 14
// 구현체 중 memberId를 사용하는 곳은 WishListRecentCursorGenerator 뿐이다
public interface CursorGenerator {

    BooleanBuilder getCursor(Long cursorId, memberId);

}
  1. CursorGenerator의 구현체에 사용되는 모든 정보를 CursorGeneratorMapping의 멤버 변수로 넣고 각각 구현체에도 그 구현체에만 필요한 변수의 경우 생성자로 넣는 방식으로 변경

    
    //이전
    @RequiredArgsConstructor
    public class WishListRecentCursorGenerator implements CursorGenerator{
    
    private static final QWishListBoard wishListBoard = QWishListBoard.wishListBoard;
    
    private final JPAQueryFactory queryFactory;
    private final Long memberId;
    
    @Override
    public BooleanBuilder getCursor(Long cursorId, Long memberId) {
        BooleanBuilder cursorBuilder = new BooleanBuilder();
        ...
    }

}

//현재 @RequiredArgsConstructor public class WishListRecentCursorGenerator implements CursorGenerator{

private static final QWishListBoard wishListBoard = QWishListBoard.wishListBoard;

private final JPAQueryFactory queryFactory;
private final Long memberId;

@Override
public BooleanBuilder getCursor(Long cursorId) {
    BooleanBuilder cursorBuilder = new BooleanBuilder();
    ...
}

}

- CursorGenerator의 매개변수도 그 메서드 내에서 공통적으로 꼭 사용하는 것만 받을 수 있게 변경됨
```java
public interface CursorGenerator {

    BooleanBuilder getCursor(Long cursorId); 
// 필수 요소인 cursorId만을 가지고 구현체에 따라 사용하기도 하고 안하기도 하는 memberId는 구현체에 따라 멤버 변수에 넣는 방식으로 변경

}
  1. BoardResponseDao 생성 및 이용
    • 기존 Board 를 양방향 매핑으로 정보를 가져와 BoardResponse로 바꾸는 방식 사용
    • 불필요한 정보도 가져오고 양방향 매핑이라는 변수가 많은 기술을 사용하는 것을 변경하고자 함
    • 태그 정보도 가공하기 쉽게 만들기 위해 TagDao를 따로 만들어 사용
      public record BoardResponseDao(
      Long boardId,
      Long storeId,
      String storeName,
      String thumbnail,
      String title,
      Integer price,
      Category category,
      TagsDao tagsDao
      ) { }
      public record TagsDao (
      boolean glutenFreeTag,
      boolean highProteinTag,
      boolean sugarFreeTag,
      boolean veganTag,
      boolean ketogenicTag
      ){}
스크린샷 2024-05-22 오후 5 27 57

📷 Test Image

스크린샷 2024-05-22 오후 5 28 37 스크린샷 2024-05-22 오후 5 30 30 스크린샷 2024-05-22 오후 5 30 39

💡 ETC

chung-A commented 5 months ago

고생하셨습니다! 시간되실때 테스트도 만들면 좋을거같아요~

sikdong commented 5 months ago

새로 올리신 거 확인했습니다 딱히 코멘트 달 건 없어서 안 달았습니다