Skip to content

Commit

Permalink
Merge pull request #42 from DEPthes/develop
Browse files Browse the repository at this point in the history
[DEPLOY]
  • Loading branch information
jisujeong0 authored Aug 16, 2024
2 parents 3b940cb + db17276 commit 7ceb6f6
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public record ReportRes(
@Builder
public static record LongestWriter(
Long userId,
boolean isCurrentUser,
String nickname,
String imageUrl,
int length
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,20 +85,24 @@ public ResponseEntity<?> findReport(CustomUserDetails customUserDetails, LocalDa
ReportRes.LongestWriter longestWriter = null;
if (longestBoardByTheme != null && longestBoardByTheme.getUser() != null) {
User user = longestBoardByTheme.getUser();
boolean isCurrentUser = customUserDetails != null && customUserDetails.getId().equals(user.getId());
longestWriter = new ReportRes.LongestWriter(
user.getId(),
isCurrentUser,
user.getNickname(),
user.getImageUrl(),
longestBoardByTheme.getLength()
);
}

return ResponseEntity.ok(ReportRes.builder()
ReportRes reportRes = ReportRes.builder()
.selectedDate(parsedDate)
.themeName(theme.getContent())
.writtenTotal(writtenTotal)
.longestWriter(longestWriter) // longestWriter는 null일 수 있음
.build());
.longestWriter(customUserDetails != null ? longestWriter : null) // 로그인하지 않은 경우 longestWriter 정보를 제공하지 않음
.build();

return ResponseEntity.ok(reportRes);
} else {
// 과거 레포트 조회

Expand Down Expand Up @@ -162,6 +166,7 @@ public ResponseEntity<?> findReport(CustomUserDetails customUserDetails, LocalDa
.count(report.getCount())
.longestWriter(new ReportRes.LongestWriter(
user.getId(),
customUserDetails != null && customUserDetails.getId().equals(user.getId()),
user.getNickname(),
user.getImageUrl(),
longestBoardByTheme.getLength()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,21 @@

import com.querydsl.core.types.dsl.Expressions;
import com.querydsl.jpa.impl.JPAQueryFactory;
import depth.mvp.ns.domain.user.domain.QUser;
import depth.mvp.ns.domain.user.domain.RankingType;
import depth.mvp.ns.domain.user.dto.response.*;
import depth.mvp.ns.domain.user_point.domain.QUserPoint;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;


import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors;

import static depth.mvp.ns.domain.user_point.domain.QUserPoint.userPoint;
import static depth.mvp.ns.domain.user.domain.QUser.user;

@RequiredArgsConstructor
Expand Down Expand Up @@ -57,6 +59,9 @@ public UserRankingRes getNRankingDesc(Long id, RankingType type) {
LocalDateTime startDate;
LocalDateTime endDate = LocalDateTime.now();

QUserPoint userPoint = QUserPoint.userPoint;
QUser user = QUser.user;

switch (type) {
case DAILY:
startDate = endDate.toLocalDate().atStartOfDay();
Expand All @@ -78,21 +83,26 @@ public UserRankingRes getNRankingDesc(Long id, RankingType type) {
user.id,
user.nickname,
user.imageUrl,
userPoint.score.sum(),
Expressions.asNumber(userPoint.score.sum()).coalesce(0),
id != null ? user.id.eq(id) : Expressions.asBoolean(false)
))
.from(userPoint)
.leftJoin(user)
.on(userPoint.user.id.eq(user.id))
.where(userPoint.createdDate.between(startDate, endDate))
.groupBy(user.id, user.nickname, user.imageUrl)
.orderBy(userPoint.score.sum().desc())
.orderBy(Expressions.numberTemplate(Integer.class, "COALESCE({0}, {1})", userPoint.score.sum(), 0).desc())
.limit(3)
.fetch();


AtomicBoolean isUserIncluded = new AtomicBoolean(false);
AtomicLong ranking = new AtomicLong(1);

// optionRankingUsers 리스트를 가져옵니다.
List<UserRankingRes.OptionRankingRes> optionRankingUsers = queryFactory
.select(new QUserRankingRes_OptionRankingRes(
Expressions.constant(0L), // 랭킹
Expressions.constant(0L), // 초기 랭킹
user.id,
user.nickname,
userPoint.score.sum(),
Expand All @@ -104,46 +114,51 @@ public UserRankingRes getNRankingDesc(Long id, RankingType type) {
.where(userPoint.createdDate.between(startDate, endDate))
.groupBy(user.id, user.nickname)
.orderBy(userPoint.score.sum().desc())
.limit(10)
.fetch();


AtomicLong ranking = new AtomicLong(1);
optionRankingUsers = optionRankingUsers.stream()
.map(optionRankingUser -> new UserRankingRes.OptionRankingRes(
ranking.getAndIncrement(),
optionRankingUser.userId(),
optionRankingUser.nickname(),
optionRankingUser.point(),
optionRankingUser.isCurrentUser()
))
.fetch()
.stream()
.map(optionRankingUser -> {
boolean isCurrentUser = optionRankingUser.userId().equals(id);
if (isCurrentUser) {
isUserIncluded.set(true);
}
return new UserRankingRes.OptionRankingRes(
ranking.getAndIncrement(),
optionRankingUser.userId(),
optionRankingUser.nickname(),
optionRankingUser.point(),
isCurrentUser
);
})
.collect(Collectors.toList());

optionRankingUsers = optionRankingUsers.stream()
.filter(optionRankingUser -> !optionRankingUser.isCurrentUser())
.limit(9)
.collect(Collectors.toList());

if (id != null) {
// 현재 사용자가 포함되지 않았을 때 랭킹을 추가합니다.
if (id != null && !isUserIncluded.get()) {
UserRankingRes.OptionRankingRes userRanking = queryFactory
.select(new QUserRankingRes_OptionRankingRes(
Expressions.constant(0L),
Expressions.constant(ranking.get()), // 랭킹 설정
user.id,
user.nickname,
userPoint.score.sum(),
user.id.eq(id)
Expressions.asBoolean(true) // 현재 사용자임을 명확히 표시
))
.from(user)
.from(userPoint)
.leftJoin(user)
.on(userPoint.user.id.eq(user.id))
.where(user.id.eq(id))
.groupBy(user.id, user.nickname)
.fetchOne();

optionRankingUsers.add(0, userRanking);
// 현재 사용자를 추가
if (userRanking != null) {
optionRankingUsers.add(userRanking);
}
}

return UserRankingRes.builder()
.top3UserRes(top3Users)
.optionRankingRes(optionRankingUsers)
.build();


}
}

0 comments on commit 7ceb6f6

Please sign in to comment.