Skip to content

Commit cb244ee

Browse files
Merge pull request #54 from TaskFlow-CLAP/CLAP-95
CLAP-95 2차 카테고리별 작업 요청량 조회 API 조회
2 parents 036dbf1 + e914a2a commit cb244ee

File tree

5 files changed

+67
-3
lines changed

5 files changed

+67
-3
lines changed

src/main/java/clap/server/adapter/inbound/web/statistics/StatisticsFindController.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import clap.server.application.port.inbound.statistics.CategoryTaskRequestUsecase;
44
import clap.server.application.port.inbound.statistics.PeriodTaskProcessUsecase;
55
import clap.server.application.port.inbound.statistics.PeriodTaskRequestUsecase;
6+
import clap.server.application.port.inbound.statistics.SubCategoryTaskRequestUsecase;
67
import clap.server.common.annotation.architecture.WebAdapter;
78
import lombok.RequiredArgsConstructor;
89
import org.springframework.web.bind.annotation.GetMapping;
@@ -16,7 +17,7 @@ public class StatisticsFindController {
1617
private final PeriodTaskRequestUsecase periodTaskRequestUsecase;
1718
private final PeriodTaskProcessUsecase periodTaskProcessUsecase;
1819
private final CategoryTaskRequestUsecase categoryTaskRequestUsecase;
19-
// private final SubCategoryTaskRequestUsecase subCategoryTaskRequestUsecase;
20+
private final SubCategoryTaskRequestUsecase subCategoryTaskRequestUsecase;
2021
// private final ManagerTaskProcessUsecase managerTaskProcessUsecase;
2122

2223
@GetMapping(value = "/task/statistics/task-requests-by-period")
@@ -33,7 +34,9 @@ public Map<String, Long> aggregateCategoryTaskRequest(@RequestParam String perio
3334
return categoryTaskRequestUsecase.categoryTaskRequestAggregate(period);
3435
}
3536

36-
// @GetMapping("/task/statistics/task-requests-by-subcategory")
37-
//
37+
@GetMapping("/task/statistics/task-requests-by-subcategory")
38+
public Map<String, Long> aggregateSubCategoryTaskRequest(@RequestParam String period, @RequestParam String mainCategory) {
39+
return subCategoryTaskRequestUsecase.subCategoryTaskRequestAggregate(period, mainCategory);
40+
}
3841
// @GetMapping("/task/statistics/tasks-processed-by-manager")
3942
}

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,14 @@ public Map<String, Long> findCategoryTaskRequestByPeriod(String period) {
5252
return getCategoryTaskResults(executeQuery(query));
5353
}
5454

55+
@Override
56+
public Map<String, Long> findSubCategoryTaskRequestByPeriod(String period, String mainCategory) {
57+
PeriodConfig periodConfig = PeriodConfig.valueOf(period.toUpperCase());
58+
59+
NativeQuery query = buildSubCategoryTaskRequestQuery(periodConfig, mainCategory);
60+
return getCategoryTaskResults(executeQuery(query));
61+
}
62+
5563
private NativeQuery buildPeriodTaskRequestQuery(PeriodConfig config) {
5664
return NativeQuery.builder()
5765
.withQuery(q -> q
@@ -107,6 +115,31 @@ private NativeQuery buildCategoryTaskRequestQuery(PeriodConfig config) {
107115
.build();
108116
}
109117

118+
private NativeQuery buildSubCategoryTaskRequestQuery(PeriodConfig config, String mainCategory) {
119+
NativeQuery rangeQuery = NativeQuery.builder()
120+
.withQuery(q -> q
121+
.range(r -> r
122+
.date(d -> d
123+
.field("created_at")
124+
.gte(String.valueOf(LocalDate.now().minusDays(config.getDaysToSubtract())))))).build();
125+
NativeQuery categoryQuery = NativeQuery.builder()
126+
.withQuery(q -> q
127+
.term(v -> v
128+
.field("main_category")
129+
.value(mainCategory))).build();
130+
131+
return NativeQuery.builder()
132+
.withQuery(q -> q
133+
.bool(b -> b
134+
.must(rangeQuery.getQuery(), categoryQuery.getQuery()))
135+
)
136+
.withAggregation("category_task", AggregationBuilders.terms()
137+
.field("sub_category")
138+
.build()._toAggregation())
139+
.withMaxResults(0)
140+
.build();
141+
}
142+
110143
private ElasticsearchAggregations executeQuery(NativeQuery query) {
111144
return (ElasticsearchAggregations) elasticsearchOperations
112145
.search(query, ElasticTask.class)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package clap.server.application.port.inbound.statistics;
2+
3+
import java.util.Map;
4+
5+
public interface SubCategoryTaskRequestUsecase {
6+
Map<String, Long> subCategoryTaskRequestAggregate(String period, String mainCategory);
7+
}

src/main/java/clap/server/application/port/outbound/task/ElasticTaskPort.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,6 @@ public interface ElasticTaskPort {
1313
Map<String, Long> findPeriodTaskProcessByPeriod(String period);
1414

1515
Map<String, Long> findCategoryTaskRequestByPeriod(String period);
16+
17+
Map<String, Long> findSubCategoryTaskRequestByPeriod(String period, String mainCategory);
1618
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package clap.server.application.statistics;
2+
3+
import clap.server.application.port.inbound.statistics.SubCategoryTaskRequestUsecase;
4+
import clap.server.application.port.outbound.task.ElasticTaskPort;
5+
import clap.server.common.annotation.architecture.ApplicationService;
6+
import lombok.RequiredArgsConstructor;
7+
8+
import java.util.Map;
9+
10+
@ApplicationService
11+
@RequiredArgsConstructor
12+
public class SubCategoryTaskRequestService implements SubCategoryTaskRequestUsecase {
13+
private final ElasticTaskPort elasticTaskPort;
14+
15+
@Override
16+
public Map<String, Long> subCategoryTaskRequestAggregate(String period, String mainCategory) {
17+
return elasticTaskPort.findSubCategoryTaskRequestByPeriod(period, mainCategory);
18+
}
19+
}

0 commit comments

Comments
 (0)