Skip to content

Commit dc7cdcf

Browse files
authored
Merge pull request #130 from podofarm-dev/hwang
최근 활동 조회 쿼리 변경
2 parents c0ce3f9 + 0da6400 commit dc7cdcf

File tree

4 files changed

+48
-9
lines changed

4 files changed

+48
-9
lines changed

src/main/java/com/podofarm/dev/api/study/repository/CustomStudyRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ public interface CustomStudyRepository {
2020

2121
List<ProblemInfoDto> searchSolvedProblemInfo(LocalDate date, String memberId);
2222

23-
List<RecentActivityInfoDto> searchTodayActivityInfo(String studyId);
23+
List<RecentActivityInfoDto> searchActivityInfo(String studyId);
2424
}
2525

src/main/java/com/podofarm/dev/api/study/repository/CustomStudyRepositoryImpl.java

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.sql.Date;
2222
import java.sql.Timestamp;
2323
import java.time.LocalDate;
24+
import java.time.LocalDateTime;
2425
import java.time.YearMonth;
2526
import java.util.List;
2627

@@ -149,12 +150,39 @@ public List<ProblemInfoDto> searchSolvedProblemInfo(LocalDate date, String membe
149150
)
150151
.fetch();
151152
}
152-
153+
153154
@Override
154-
public List<RecentActivityInfoDto> searchTodayActivityInfo(String studyId) {
155-
Timestamp startOfToday = Timestamp.valueOf(LocalDate.now().atStartOfDay());
155+
public List<RecentActivityInfoDto> searchActivityInfo(String studyId) {
156+
LocalDateTime todayMidnight = LocalDate.now().atStartOfDay();
156157

157-
return query
158+
//1. 최근 활동 20개 조회 (금일 활동인지 여부 상관없이)
159+
List<RecentActivityInfoDto> recentActivities = query
160+
.select(new QRecentActivityInfoDto(
161+
memberEntity.memberId,
162+
memberEntity.name,
163+
problemEntity.problemId,
164+
problemEntity.problemTitle,
165+
codeEntity.codeSolvedDate
166+
))
167+
.from(codeEntity)
168+
.join(codeEntity.problemEntity, problemEntity)
169+
.join(codeEntity.memberEntity, memberEntity)
170+
.where(
171+
memberEntity.studyEntity.studyId.eq(studyId),
172+
codeEntity.codeStatus.isTrue()
173+
)
174+
.orderBy(codeEntity.codeSolvedDate.desc())
175+
.limit(20)
176+
.fetch();
177+
178+
//2. 조회한 값 중 마지막 활동이 금일 자정 전에 이뤄졌다면 그대로 반환
179+
RecentActivityInfoDto oldestActivity = recentActivities.get(recentActivities.size() - 1);
180+
if (oldestActivity.getSolvedAt().isBefore(todayMidnight)) {
181+
return recentActivities;
182+
}
183+
184+
//3. 아니라면 추가 쿼리 실행 (금일 활동이 더 있을 수 있으므로)
185+
List<RecentActivityInfoDto> additionalActivities = query
158186
.select(new QRecentActivityInfoDto(
159187
memberEntity.memberId,
160188
memberEntity.name,
@@ -168,10 +196,14 @@ public List<RecentActivityInfoDto> searchTodayActivityInfo(String studyId) {
168196
.where(
169197
memberEntity.studyEntity.studyId.eq(studyId),
170198
codeEntity.codeStatus.isTrue(),
171-
codeEntity.codeSolvedDate.goe(startOfToday)
199+
codeEntity.codeSolvedDate.goe(Timestamp.valueOf(todayMidnight))
172200
)
173201
.orderBy(codeEntity.codeSolvedDate.desc())
202+
.offset(recentActivities.size())
174203
.fetch();
204+
205+
recentActivities.addAll(additionalActivities);
206+
return recentActivities;
175207
}
176208

177209
private BooleanExpression solvedAt(YearMonth yearMonth) {

src/main/java/com/podofarm/dev/api/study/service/StudyService.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,14 @@ public LogResDto getLog(String memberId, String studyId) {
158158
checkValidMemberAndStudy(memberId, studyId);
159159

160160
//2. 해당 스터디의 최근 활동 정보 조회
161-
List<RecentActivityInfoDto> repoDto = studyRepository.searchTodayActivityInfo(studyId);
162-
return LogResDto.fromRepoDto(repoDto, LocalDateTime.now());
161+
List<RecentActivityInfoDto> repoDto = studyRepository.searchActivityInfo(studyId);
162+
for (RecentActivityInfoDto aDto : repoDto) {
163+
log.info("{}-{}: solved at={}", aDto.getMemberName(), aDto.getProblemTitle(), aDto.getSolvedAt());
164+
}
165+
166+
LocalDateTime now = LocalDateTime.now();
167+
log.info("now={}");
168+
return LogResDto.fromRepoDto(repoDto, now);
163169
}
164170

165171
@Transactional(readOnly = true)

src/main/java/com/podofarm/dev/api/study/service/utils/DashBoardUtils.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import static java.time.temporal.ChronoUnit.HOURS;
88
import static java.time.temporal.ChronoUnit.MINUTES;
99
import static java.time.temporal.ChronoUnit.MONTHS;
10+
import static java.time.temporal.ChronoUnit.SECONDS;
1011
import static java.time.temporal.ChronoUnit.YEARS;
1112

1213
public class DashBoardUtils {
@@ -37,7 +38,7 @@ public static String getSolvedBefore(LocalDateTime solvedAt, LocalDateTime now)
3738
if ((duration = MINUTES.between(solvedAt, now)) != 0L) {
3839
return duration + MINUTE_SUFFIX;
3940
}
40-
return duration + SECOND_SUFFIX;
41+
return SECONDS.between(solvedAt, now) + SECOND_SUFFIX;
4142
}
4243

4344
public static Integer getLevel(String levelString) {

0 commit comments

Comments
 (0)