Skip to content

Commit 73bd762

Browse files
committed
CLAP-111 Refactor : 통계 조회 API 리팩토링 및 기능 수정
<footer> - 관련: #74
1 parent c97d37c commit 73bd762

File tree

5 files changed

+58
-23
lines changed

5 files changed

+58
-23
lines changed

src/main/java/clap/server/adapter/outbound/infrastructure/elastic/PeriodConfig.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,27 @@
44
import lombok.Getter;
55
import lombok.RequiredArgsConstructor;
66

7+
import java.time.LocalDate;
8+
import java.time.temporal.ChronoUnit;
9+
710
@Getter
811
@RequiredArgsConstructor
912
public enum PeriodConfig {
10-
DAY(1, CalendarInterval.Hour, 11, 19),
11-
WEEK(14, CalendarInterval.Day, 0, 10);
13+
DAY(1, CalendarInterval.Hour, 11, 16),
14+
WEEK(7, CalendarInterval.Day, 0, 10),
15+
MONTH(-1, CalendarInterval.Day, 0, 10);
1216

1317
private final long daysToSubtract;
1418
private final CalendarInterval calendarInterval;
1519
private final int substringStart;
1620
private final int substringEnd;
1721

22+
// MONTH에 대해 동적으로 daysToSubtract를 계산하는 메서드
23+
public long getDaysToSubtract() {
24+
if (this == MONTH) {
25+
return ChronoUnit.DAYS.between(LocalDate.now().minusMonths(1), LocalDate.now());
26+
}
27+
return daysToSubtract;
28+
}
29+
1830
}

src/main/java/clap/server/adapter/outbound/infrastructure/elastic/TaskDocumentAdapter.java

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -50,23 +50,23 @@ public Map<String, Long> findCategoryTaskRequestByPeriod(String period) {
5050
PeriodConfig periodConfig = PeriodConfig.valueOf(period.toUpperCase());
5151

5252
NativeQuery query = buildCategoryTaskRequestQuery(periodConfig);
53-
return getCategoryTaskResults(executeQuery(query));
53+
return getNonPeriodTaskResults(executeQuery(query), "category_task");
5454
}
5555

5656
@Override
5757
public Map<String, Long> findSubCategoryTaskRequestByPeriod(String period, String mainCategory) {
5858
PeriodConfig periodConfig = PeriodConfig.valueOf(period.toUpperCase());
5959

6060
NativeQuery query = buildSubCategoryTaskRequestQuery(periodConfig, mainCategory);
61-
return getCategoryTaskResults(executeQuery(query));
61+
return getNonPeriodTaskResults(executeQuery(query), "category_task");
6262
}
6363

6464
@Override
6565
public Map<String, Long> findManagerTaskProcessByPeriod(String period) {
6666
PeriodConfig periodConfig = PeriodConfig.valueOf(period.toUpperCase());
6767

6868
NativeQuery query = buildManagerTaskProcessQuery(periodConfig);
69-
return getManagerTaskResults(executeQuery(query));
69+
return getNonPeriodTaskResults(executeQuery(query), "manager_task");
7070
}
7171

7272
private NativeQuery buildPeriodTaskRequestQuery(PeriodConfig config) {
@@ -188,25 +188,9 @@ private Map<String, Long> getPeriodTaskResults(ElasticsearchAggregations aggrega
188188
);
189189
}
190190

191-
private Map<String, Long> getCategoryTaskResults(ElasticsearchAggregations aggregations) {
191+
private Map<String, Long> getNonPeriodTaskResults(ElasticsearchAggregations aggregations, String name) {
192192
return new TreeMap<>(
193-
aggregations.get("category_task")
194-
.aggregation()
195-
.getAggregate()
196-
.sterms()
197-
.buckets()
198-
.array()
199-
.stream()
200-
.collect(Collectors.toMap(
201-
bucket -> bucket.key().stringValue(),
202-
MultiBucketBase::docCount
203-
))
204-
);
205-
}
206-
207-
private Map<String, Long> getManagerTaskResults(ElasticsearchAggregations aggregations) {
208-
return new TreeMap<>(
209-
aggregations.get("manager_task")
193+
aggregations.get(name)
210194
.aggregation()
211195
.getAggregate()
212196
.sterms()

src/main/java/clap/server/application/statistics/FindPeriodTaskProcessService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import clap.server.application.port.inbound.statistics.FindPeriodTaskProcessUsecase;
44
import clap.server.application.port.outbound.task.TaskDocumentPort;
55
import clap.server.common.annotation.architecture.ApplicationService;
6+
import clap.server.domain.statistics.Statistics;
67
import lombok.RequiredArgsConstructor;
78

89
import java.util.Map;
@@ -14,6 +15,9 @@ public class FindPeriodTaskProcessService implements FindPeriodTaskProcessUsecas
1415

1516
@Override
1617
public Map<String, Long> aggregatePeriodTaskProcess(String period) {
18+
if (period.equals("week") || period.equals("month")) {
19+
return Statistics.transformToWeekdayStatistics(taskDocumentPort.findPeriodTaskProcessByPeriod(period));
20+
}
1721
return taskDocumentPort.findPeriodTaskProcessByPeriod(period);
1822
}
1923
}

src/main/java/clap/server/application/statistics/FindPeriodTaskRequestService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import clap.server.application.port.inbound.statistics.FindPeriodTaskRequestUsecase;
44
import clap.server.application.port.outbound.task.TaskDocumentPort;
55
import clap.server.common.annotation.architecture.ApplicationService;
6+
import clap.server.domain.statistics.Statistics;
67
import lombok.RequiredArgsConstructor;
78

89
import java.util.Map;
@@ -14,6 +15,9 @@ public class FindPeriodTaskRequestService implements FindPeriodTaskRequestUsecas
1415

1516
@Override
1617
public Map<String, Long> aggregatePeriodTaskRequest(String period) {
18+
if (period.equals("week") || period.equals("month")) {
19+
return Statistics.transformToWeekdayStatistics(taskDocumentPort.findPeriodTaskRequestByPeriod(period));
20+
}
1721
return taskDocumentPort.findPeriodTaskRequestByPeriod(period);
1822
}
1923
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package clap.server.domain.statistics;
2+
3+
import lombok.AccessLevel;
4+
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
6+
7+
import java.time.DayOfWeek;
8+
import java.time.LocalDate;
9+
import java.util.Map;
10+
import java.util.Map.Entry;
11+
import java.util.TreeMap;
12+
13+
@Getter
14+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
15+
public class Statistics {
16+
public static Map<String, Long> transformToWeekdayStatistics(Map<String, Long> statistics) {
17+
TreeMap<String, Long> result = new TreeMap<>();
18+
19+
for (Entry<String, Long> statistic : statistics.entrySet()) {
20+
String stringDate = statistic.getKey();
21+
LocalDate date = LocalDate.parse(stringDate);
22+
23+
if (!(date.getDayOfWeek() == DayOfWeek.SATURDAY || date.getDayOfWeek() == DayOfWeek.SUNDAY)) {
24+
result.put(stringDate.substring(6, 10).replace("-", "월 ") + "일", statistic.getValue());
25+
}
26+
}
27+
28+
return result;
29+
30+
}
31+
}

0 commit comments

Comments
 (0)