Skip to content

Commit 0d8ce27

Browse files
authored
refactor : 푼 문제 리스트도 반환 (#187)
1 parent dcbe2db commit 0d8ce27

File tree

3 files changed

+31
-18
lines changed

3 files changed

+31
-18
lines changed

gradlew

100644100755
File mode changed.

src/main/java/org/ezcode/codetest/domain/submission/dto/DailyCorrectCount.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
public record DailyCorrectCount(
77
LocalDate date,
8-
Long count,
8+
int count,
99
Set<Long> problemIds
10-
) { }
10+
) {
11+
}
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,25 @@
11
package org.ezcode.codetest.infrastructure.persistence.repository.submission.query;
22

33

4+
import java.sql.Date;
45
import java.time.LocalDate;
6+
import java.util.LinkedHashMap;
57
import java.util.List;
8+
import java.util.Map;
9+
import java.util.Objects;
610
import java.util.Set;
11+
import java.util.stream.Collectors;
712

813
import org.ezcode.codetest.domain.submission.dto.DailyCorrectCount;
914
import org.ezcode.codetest.domain.submission.model.entity.QUserProblemResult;
1015
import org.springframework.stereotype.Repository;
11-
12-
import com.querydsl.core.group.GroupBy;
13-
import com.querydsl.core.types.Projections;
14-
import com.querydsl.core.types.dsl.NumberExpression;
1516
import com.querydsl.core.types.dsl.Expressions;
1617
import com.querydsl.jpa.impl.JPAQueryFactory;
1718

1819
import lombok.RequiredArgsConstructor;
20+
import lombok.extern.slf4j.Slf4j;
1921

22+
@Slf4j
2023
@Repository
2124
@RequiredArgsConstructor
2225
public class UserProblemResultQueryRepositoryImpl implements UserProblemResultQueryRepository{
@@ -28,25 +31,34 @@ public List<DailyCorrectCount> countCorrectByUserGroupedByDate(Long userId) {
2831

2932
QUserProblemResult upr = QUserProblemResult.userProblemResult;
3033

31-
var date = Expressions.dateTemplate(LocalDate.class, "DATE({0})", upr.modifiedAt);
32-
NumberExpression<Long> countDistinctProblem = upr.problem.id.countDistinct();
34+
var date = Expressions.dateTemplate(Date.class, "DATE({0})", upr.modifiedAt);
3335

34-
return queryFactory
36+
var results = queryFactory
37+
.select(date, upr.problem.id)
3538
.from(upr)
3639
.where(
3740
upr.user.id.eq(userId),
3841
upr.isCorrect.eq(true)
3942
)
4043
.orderBy(date.asc())
41-
.transform(
42-
GroupBy.groupBy(date).list(
43-
Projections.constructor(
44-
DailyCorrectCount.class,
45-
date,
46-
countDistinctProblem,
47-
GroupBy.set(upr.problem.id)
48-
)
44+
.fetch();
45+
46+
Map<LocalDate, Set<Long>> problemIdsByDate = results.stream()
47+
.collect(Collectors.groupingBy(
48+
tuple -> Objects.requireNonNull(tuple.get(0, Date.class)).toLocalDate(),
49+
LinkedHashMap::new,
50+
Collectors.mapping(
51+
tuple -> tuple.get(1, Long.class),
52+
Collectors.toSet()
4953
)
50-
);
54+
));
55+
56+
return problemIdsByDate.entrySet().stream()
57+
.map(entry -> new DailyCorrectCount(
58+
entry.getKey(),
59+
entry.getValue().size(),
60+
entry.getValue()
61+
))
62+
.collect(Collectors.toList());
5163
}
5264
}

0 commit comments

Comments
 (0)