Skip to content

Commit

Permalink
Merge pull request #183 from U2DJ2/be/feat/order-paging
Browse files Browse the repository at this point in the history
[BE] 회원이 참여한 모임/생성한 모임 리스트 조회시 정렬 적용 및 No Offset을 이용한 페이징 처리
  • Loading branch information
jerry3269 authored May 23, 2024
2 parents 072e497 + f0eca21 commit 5777624
Show file tree
Hide file tree
Showing 18 changed files with 475 additions and 194 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,7 @@ MoimIdResponse createMoim(final long memberId, final long universityId,

List<MoimSimpleResponse> searchMoim(final long universityId, final String searchParam);

List<MoimSimpleResponse> findAllMyJoinedMoimSimpleResponse(final long memberId, final boolean ended, final boolean onlyHost);
List<MoimSimpleResponse> findAllMyJoinedMoimSimpleResponses(final long memberId, final long lastMoimId, final boolean ended);

List<MoimSimpleResponse> findAllMyMoimSimpleResponses(final long hostMemberId, final long lastMoimId, final Boolean ended);
}
Original file line number Diff line number Diff line change
Expand Up @@ -175,12 +175,16 @@ public List<MoimSimpleResponse> searchMoim(final long universityId, final String
}

@Override
public List<MoimSimpleResponse> findAllMyJoinedMoimSimpleResponse(final long memberId,
final boolean ended,
final boolean onlyHost) {
if(onlyHost){
return moimManager.findAllHostMoimSimpleResponsesByEndStatus(memberId, LocalDate.now(), ended);
}
return moimManager.findAllJoinedMoimSimpleResponseByEndStatus(memberId, LocalDate.now(), ended);
public List<MoimSimpleResponse> findAllMyMoimSimpleResponses(final long hostMemberId,
final long lastMoimId,
final Boolean ended) {
return moimManager.findAllMyMoimSimpleResponses(hostMemberId, lastMoimId, LocalDate.now(), ended);
}

@Override
public List<MoimSimpleResponse> findAllMyJoinedMoimSimpleResponses(final long memberId,
final long lastMoimId,
final boolean ended) {
return moimManager.findAllMyJoinedMoimSimpleResponses(memberId, lastMoimId, LocalDate.now(), ended);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ public enum NumberConstant {
DEFAULT_MOIM_CURRENT_COUNT(0),
DEFAULT_MOIM_VIEWS(0),
VIEW_COUNT_OF_ONE(1),
DEFAULT_JOINED_MOIM_PAGE_SIZE(4),

SCHEDULE_MEETING_ID(0),
SCHEDULE_MOIM_ID(0),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package moim_today.implement.moim.joined_moim;

import moim_today.dto.moim.moim.MoimSimpleResponse;
import moim_today.global.annotation.Implement;
import moim_today.global.error.BadRequestException;
import moim_today.global.error.NotFoundException;
import moim_today.persistence.entity.moim.joined_moim.JoinedMoimJpaEntity;
import moim_today.persistence.repository.moim.joined_moim.JoinedMoimRepository;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.util.List;

import static moim_today.global.constant.exception.JoinedMoimExceptionConstant.JOINED_MOIM_MEMBER_NOT_FOUND;
Expand Down Expand Up @@ -55,4 +57,11 @@ public boolean isJoining(final long moimId, final long memberId) {
public List<Long> findMoimIdsByMemberId(final long memberId) {
return joinedMoimRepository.findMoimIdsByMemberId(memberId);
}

public List<MoimSimpleResponse> findAllMyJoinedMoimSimpleResponses(final long memberId,
final long lastMoimId,
final LocalDate now,
final boolean ended) {
return joinedMoimRepository.findAllMyJoinedMoimSimpleResponses(memberId, lastMoimId, now, ended);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -99,11 +99,10 @@ public List<MoimSimpleResponse> searchMoim(final long universityId, final String
}

@Transactional(readOnly = true)
public List<MoimSimpleResponse> findEndedMoimSimpleResponsesByMoimIds(final List<Long> moimIds, final LocalDate now) {
return moimRepository.findEndedMoimSimpleResponsesByMoimIds(moimIds, now);
}

public List<MoimSimpleResponse> findInProgressMoimSimpleResponsesByMoimIds(final List<Long> moimIds, final LocalDate now) {
return moimRepository.findInProgressMoimSimpleResponsesByMoimIds(moimIds, now);
public List<MoimSimpleResponse> findAllMyMoimSimpleResponses(final long hostMemberId,
final long lastMoimId,
final LocalDate now,
final boolean ended) {
return moimRepository.findAllMyMoimSimpleResponses(hostMemberId, lastMoimId, now, ended);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -95,25 +95,18 @@ public String getTitleById(final Long moimId) {
}

@Transactional(readOnly = true)
public List<MoimSimpleResponse> findAllJoinedMoimSimpleResponseByEndStatus(final long memberId, final LocalDate now, final boolean ended) {
List<Long> joinedMoims = joinedMoimFinder.findMoimIdsByMemberId(memberId);
return getMoimSimpleResponses(joinedMoims, now, ended);
public List<MoimSimpleResponse> findAllMyMoimSimpleResponses(final long hostMemberId,
final long lastMoimId,
final LocalDate now,
final boolean ended) {
return moimFinder.findAllMyMoimSimpleResponses(hostMemberId, lastMoimId, now, ended);
}

@Transactional(readOnly = true)
public List<MoimSimpleResponse> findAllHostMoimSimpleResponsesByEndStatus(final long hostMemberId, final LocalDate now, final boolean ended) {
List<Long> joinedMoims = joinedMoimFinder.findMoimIdsByMemberId(hostMemberId);
List<Long> hostMoims = joinedMoims.stream()
.filter(moimId -> moimFinder.isHost(hostMemberId, moimId))
.toList();
return getMoimSimpleResponses(hostMoims, now, ended);
}

@Transactional(readOnly = true)
public List<MoimSimpleResponse> getMoimSimpleResponses(final List<Long> joinedMoims, final LocalDate now, final boolean ended) {
if (ended) {
return moimFinder.findEndedMoimSimpleResponsesByMoimIds(joinedMoims, now);
}
return moimFinder.findInProgressMoimSimpleResponsesByMoimIds(joinedMoims, now);
public List<MoimSimpleResponse> findAllMyJoinedMoimSimpleResponses(final long memberId,
final long lastMoimId,
final LocalDate now,
final boolean ended) {
return joinedMoimFinder.findAllMyJoinedMoimSimpleResponses(memberId, lastMoimId, now, ended);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ public List<MeetingCommentResponse> findAllByMeetingId(final long meetingId) {
.from(meetingCommentJpaEntity)
.join(memberJpaEntity).on(meetingCommentJpaEntity.memberId.eq(memberJpaEntity.id))
.where(meetingCommentJpaEntity.meetingId.eq(meetingId))
.orderBy(meetingCommentJpaEntity.createdAt.asc())
.fetch();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package moim_today.persistence.repository.moim.joined_moim;

import moim_today.dto.moim.moim.MoimSimpleResponse;
import moim_today.persistence.entity.moim.joined_moim.JoinedMoimJpaEntity;

import java.time.LocalDate;
import java.util.List;

public interface JoinedMoimRepository {
Expand All @@ -23,4 +25,6 @@ public interface JoinedMoimRepository {
boolean isJoining(final long moimId, final long memberId);

boolean existsByMoimIdAndMemberId(final long moimId, final long memberId);

List<MoimSimpleResponse> findAllMyJoinedMoimSimpleResponses(final long memberId, final long lastMoimId, final LocalDate now, final boolean ended);
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
package moim_today.persistence.repository.moim.joined_moim;

import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.jpa.impl.JPAQueryFactory;
import moim_today.dto.moim.moim.MoimSimpleResponse;
import moim_today.dto.moim.moim.QMoimSimpleResponse;
import moim_today.global.error.NotFoundException;
import moim_today.persistence.entity.moim.joined_moim.JoinedMoimJpaEntity;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.util.List;

import static moim_today.global.constant.NumberConstant.DEFAULT_JOINED_MOIM_PAGE_SIZE;
import static moim_today.global.constant.exception.MoimExceptionConstant.JOINED_MOIM_MEMBER_IS_EMPTY;
import static moim_today.persistence.entity.moim.joined_moim.QJoinedMoimJpaEntity.joinedMoimJpaEntity;
import static moim_today.persistence.entity.moim.moim.QMoimJpaEntity.moimJpaEntity;

@Repository
public class JoinedMoimRepositoryImpl implements JoinedMoimRepository {
Expand Down Expand Up @@ -79,4 +85,44 @@ public boolean isJoining(final long moimId, final long memberId) {
public boolean existsByMoimIdAndMemberId(final long moimId, final long memberId) {
return joinedMoimJpaRepository.existsByMoimIdAndMemberId(moimId, memberId);
}

@Override
public List<MoimSimpleResponse> findAllMyJoinedMoimSimpleResponses(final long memberId,
final long lastMoimId,
final LocalDate now,
final boolean ended) {
return queryFactory.select(new QMoimSimpleResponse(
moimJpaEntity.id,
moimJpaEntity.title,
moimJpaEntity.capacity,
moimJpaEntity.currentCount,
moimJpaEntity.imageUrl,
moimJpaEntity.moimCategory,
moimJpaEntity.displayStatus
))
.from(joinedMoimJpaEntity)
.join(moimJpaEntity).on(joinedMoimJpaEntity.moimId.eq(moimJpaEntity.id))
.where(
joinedMoimJpaEntity.memberId.eq(memberId),
applyEndedFilter(now, ended),
ltLastMoimId(lastMoimId)
)
.orderBy(moimJpaEntity.id.desc())
.limit(DEFAULT_JOINED_MOIM_PAGE_SIZE.value())
.fetch();
}

private BooleanExpression applyEndedFilter(final LocalDate now, final boolean ended) {
if (ended) {
return moimJpaEntity.endDate.before(now);
}
return moimJpaEntity.endDate.goe(now);
}

private BooleanExpression ltLastMoimId(final long lastMoimId) {
if (lastMoimId == 0) {
return null;
}
return moimJpaEntity.id.lt(lastMoimId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,5 @@ public interface MoimRepository {

List<MoimSimpleResponse> searchMoimBySearchParam(final long universityId, final String searchParam);

List<MoimSimpleResponse> findEndedMoimSimpleResponsesByMoimIds(final List<Long> moimIds, final LocalDate now);

List<MoimSimpleResponse> findInProgressMoimSimpleResponsesByMoimIds(final List<Long> moimIds, final LocalDate now);
List<MoimSimpleResponse> findAllMyMoimSimpleResponses(final long hostMemberId, final long lastMoimId, final LocalDate now, final boolean ended);
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import java.util.List;
import java.util.Optional;

import static moim_today.global.constant.NumberConstant.DEFAULT_JOINED_MOIM_PAGE_SIZE;
import static moim_today.global.constant.SymbolConstant.PERCENT;
import static moim_today.global.constant.exception.MoimExceptionConstant.MOIM_NOT_FOUND_ERROR;
import static moim_today.persistence.entity.moim.moim.QMoimJpaEntity.moimJpaEntity;
Expand Down Expand Up @@ -100,11 +101,15 @@ public List<MoimSimpleResponse> searchMoimBySearchParam(final long universityId,
.where(moimJpaEntity.universityId.eq(universityId)
.and(moimJpaEntity.title.likeIgnoreCase(PERCENT.value() + searchParam.trim() + PERCENT.value()))
)
.orderBy(moimJpaEntity.views.desc())
.fetch();
}

@Override
public List<MoimSimpleResponse> findEndedMoimSimpleResponsesByMoimIds(final List<Long> moimIds, final LocalDate now) {
public List<MoimSimpleResponse> findAllMyMoimSimpleResponses(final long hostMemberId,
final long lastMoimId,
final LocalDate now,
final boolean ended) {
return queryFactory.select(new QMoimSimpleResponse(
moimJpaEntity.id,
moimJpaEntity.title,
Expand All @@ -115,23 +120,13 @@ public List<MoimSimpleResponse> findEndedMoimSimpleResponsesByMoimIds(final List
moimJpaEntity.displayStatus
))
.from(moimJpaEntity)
.where(moimJpaEntity.id.in(moimIds).and(moimJpaEntity.endDate.before(now)))
.fetch();
}

@Override
public List<MoimSimpleResponse> findInProgressMoimSimpleResponsesByMoimIds(final List<Long> moimIds, final LocalDate now) {
return queryFactory.select(new QMoimSimpleResponse(
moimJpaEntity.id,
moimJpaEntity.title,
moimJpaEntity.capacity,
moimJpaEntity.currentCount,
moimJpaEntity.imageUrl,
moimJpaEntity.moimCategory,
moimJpaEntity.displayStatus
))
.from(moimJpaEntity)
.where(moimJpaEntity.id.in(moimIds).and(moimJpaEntity.endDate.goe(now)))
.where(
moimJpaEntity.memberId.eq(hostMemberId),
applyEndedFilter(now, ended),
ltLastMoimId(lastMoimId)
)
.orderBy(moimJpaEntity.id.desc())
.limit(DEFAULT_JOINED_MOIM_PAGE_SIZE.value())
.fetch();
}

Expand All @@ -150,8 +145,9 @@ public List<MoimSimpleResponse> findAllMoimResponses(final long universityId,
moimJpaEntity.displayStatus
))
.from(moimJpaEntity)
.where(moimJpaEntity.universityId.eq(universityId)
.and(applyMoimCategoryFilter(moimCategoryDto))
.where(
moimJpaEntity.universityId.eq(universityId),
applyMoimCategoryFilter(moimCategoryDto)
)
.orderBy(createOrderBySpecifier(moimSortedFilter))
.fetch();
Expand Down Expand Up @@ -183,4 +179,18 @@ private OrderSpecifier<?> createOrderBySpecifier(final MoimSortedFilter moimSort
}
return moimJpaEntity.createdAt.desc();
}

private BooleanExpression applyEndedFilter(final LocalDate now, final boolean ended) {
if (ended) {
return moimJpaEntity.endDate.before(now);
}
return moimJpaEntity.endDate.goe(now);
}

private BooleanExpression ltLastMoimId(final long lastMoimId) {
if (lastMoimId == 0) {
return null;
}
return moimJpaEntity.id.lt(lastMoimId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public List<MoimNoticeSimpleResponse> findAllMoimNotice(final long moimId) {
))
.from(moimNoticeJpaEntity)
.where(moimNoticeJpaEntity.moimId.eq(moimId))
.orderBy(moimNoticeJpaEntity.createdAt.desc())
.fetch();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,17 +37,27 @@ public CollectionResponse<List<MyMoimResponse>> findAllMyJoinedMoimResponse(@Log
return CollectionResponse.from(myMoimResponses);
}

@GetMapping("/joined/simple")
public CollectionResponse<List<MoimSimpleResponse>> findAllMyJoinedMoimSimpleResponse(
@GetMapping("/joined")
public CollectionResponse<List<MoimSimpleResponse>> findMyJoinedMoimSimpleResponses(
@Login final MemberSession memberSession,
@RequestParam final Boolean ended,
@RequestParam(required = false, defaultValue = "false") final Boolean onlyHost){
List<MoimSimpleResponse> myMoimSimpleResponses = moimService.findAllMyJoinedMoimSimpleResponse(
memberSession.id(), ended, onlyHost
);
@RequestParam final long lastMoimId,
@RequestParam(required = false, defaultValue = "true") final boolean ended
){
List<MoimSimpleResponse> myMoimSimpleResponses = moimService.findAllMyJoinedMoimSimpleResponses(
memberSession.id(), lastMoimId, ended);
return CollectionResponse.from(myMoimSimpleResponses);
}

@GetMapping("/joined/host")
public CollectionResponse<List<MoimSimpleResponse>> findMyMoimSimpleResponses(
@Login final MemberSession memberSession,
@RequestParam final long lastMoimId,
@RequestParam(required = false, defaultValue = "true") final boolean ended
){
List<MoimSimpleResponse> myMoimSimpleResponses = moimService.findAllMyMoimSimpleResponses(
memberSession.id(), lastMoimId, ended);
return CollectionResponse.from(myMoimSimpleResponses);
}

@PostMapping
public MoimIdResponse createMoim(@Login final MemberSession memberSession,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -198,9 +198,37 @@ public List<MoimSimpleResponse> searchMoim(final long universityId, final String
}

@Override
public List<MoimSimpleResponse> findAllMyJoinedMoimSimpleResponse(final long memberId,
final boolean ended,
final boolean onlyHost) {
public List<MoimSimpleResponse> findAllMyJoinedMoimSimpleResponses(final long memberId,
final long lastMoimId,
final boolean ended) {
MoimSimpleResponse moimSimpleResponse1 = MoimSimpleResponse.builder()
.moimId(1L)
.title(MOIM_TITLE.value())
.capacity(CAPACITY.intValue())
.currentCount(CURRENT_COUNT.intValue())
.imageUrl(MOIM_IMAGE_URL.value())
.moimCategory(MoimCategory.STUDY)
.displayStatus(DisplayStatus.PUBLIC)
.build();

MoimSimpleResponse moimSimpleResponse2 = MoimSimpleResponse.builder()
.moimId(2L)
.title(MOIM_TITLE.value())
.capacity(CAPACITY.intValue())
.currentCount(CURRENT_COUNT.intValue())
.imageUrl(MOIM_IMAGE_URL.value())
.moimCategory(MoimCategory.STUDY)
.displayStatus(DisplayStatus.PUBLIC)
.build();

return List.of(moimSimpleResponse1, moimSimpleResponse2);
}

@Override
public List<MoimSimpleResponse> findAllMyMoimSimpleResponses(final long memberId,
final long lastMoimId,
final Boolean ended) {

MoimSimpleResponse moimSimpleResponse1 = MoimSimpleResponse.builder()
.moimId(1L)
.title(MOIM_TITLE.value())
Expand Down
Loading

0 comments on commit 5777624

Please sign in to comment.