Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat : QueryDslUtil 및 무한 스크롤 적용 #276

Merged
merged 10 commits into from
Feb 2, 2023
Merged

Conversation

gengminy
Copy link
Member

@gengminy gengminy commented Feb 2, 2023

개요

작업사항

  • 호스트와 이벤트 조회 api 에 무한 스크롤 적용하였습니다
  • SliceResponse 정의
  • SliceParam 정의
    public SliceResponse<HostProfileResponse> execute(SliceParam sliceParam) {
        final User user = userUtils.getCurrentUser();
        final Long userId = user.getId();

        return SliceResponse.of(
                hostAdaptor
                        .querySliceHostByUserId(
                                userId, sliceParam.getLastId(), sliceParam.toPageable())
                        .map(host -> HostProfileResponse.of(host, userId)));
    }
  • 사용은 sliceParam.toPageable() 메소드로 repository 에 적용해주면 됩니다

  • QueryDsl Order By 적용을 위한 QueryDslUtil 구현

    @Override
    public Slice<Host> querySliceHostsByUserId(Long userId, Pageable pageable) {
        OrderSpecifier[] orders = QueryDslUtil.getOrderSpecifiers(Host.class, pageable);
        List<Host> comments =
                queryFactory
                        .select(host)
                        .from(host, hostUser)
                        .where(hostUser.userId.eq(userId), host.hostUsers.contains(hostUser))
                        .offset(pageable.getOffset())
                        .orderBy(orders)
                        .limit(pageable.getPageSize() + 1)
                        .fetch();

        return checkLastPage(comments, pageable);
    }
  • 이런 식으로 QueryDsl 에서 OrderBy 사용하고 싶어서 유틸 클래스 정의했습니다
  • 사용법은 위에 처럼 해당 엔티티 클래스와 Sort.by 적용한 pageable 넣어주면 됩니다
  • 자동으로 리플렉션 해서 클래스 필드 이름과 일치하는 값이 있는지 확인하고 없으면 무시합니다

image

  • 호스트 조회 응답값에 초대 수락 여부 표시하는 active 필드 추가

변경로직

  • 위와 같음

@gengminy gengminy added For: API [이슈 대상] 외부 API For: Utils [이슈 대상] API, 모델, 뷰를 제외한 백엔드 로직 Type: Feature [이슈 목적] 새로운 기능 추가 labels Feb 2, 2023
@gengminy gengminy self-assigned this Feb 2, 2023
Copy link
Member

@ImNM ImNM left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

굿굿~

Copy link
Member

@sanbonai06 sanbonai06 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

반영해서 무한 스크롤 방식 리팩토링 진행할게요

Comment on lines 31 to 43
host.hostUsers.contains(hostUser),
lastIdLessThanEqual(lastId))
.orderBy(orders)
.limit(pageable.getPageSize() + 1)
.fetch();

return checkLastPage(comments, pageable);
}

private BooleanExpression lastIdLessThanEqual(Long lastId) {
return lastId == null ? null : host.id.loe(lastId);
}

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이거보니깐 last Id방식은
필터링만 가능해야할듯 싶긴하네유
orderBy 가 역순이고..?
다른순으로 순서 바꾸면 라스트 아이디가 동작을 안하니..?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이거보니깐 last Id방식은 필터링만 가능해야할듯 싶긴하네유 orderBy 가 역순이고..? 다른순으로 순서 바꾸면 라스트 아이디가 동작을 안하니..?

소팅된 리스트에서 last id 다음거 가져오니 상관없지 않을까요?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

흐음 궁금하긴하네유
근데 생각해보니 될것같긴해유!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

흐음 궁금하긴하네유 근데 생각해보니 될것같긴해유!

오프셋 기반이 아니라 제대로 동작을 안하네요 오프셋으로 변경합니당

Comment on lines 39 to 43

private BooleanExpression lastIdLessThanEqual(Long lastId) {
return lastId == null ? null : host.id.loe(lastId);
}

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

레스 댄이 맞지않나? 싶기도 하네유

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

레스 댄이 맞지않나? 싶기도 하네유

저도용

@sonarqubecloud
Copy link

sonarqubecloud bot commented Feb 2, 2023

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 288 Code Smells

15.5% 15.5% Coverage
0.0% 0.0% Duplication

@gengminy gengminy merged commit 3a8678c into dev Feb 2, 2023
@gengminy gengminy deleted the feature/272-inf-scroll branch February 2, 2023 10:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
For: API [이슈 대상] 외부 API For: Utils [이슈 대상] API, 모델, 뷰를 제외한 백엔드 로직 Type: Feature [이슈 목적] 새로운 기능 추가
Projects
None yet
Development

Successfully merging this pull request may close these issues.

🚀 [feature] 호스트 및 이벤트 리스트 무한 스크롤
3 participants