Skip to content

Commit c97d37c

Browse files
committed
CLAP-110 Feature : 담당자별 작업 처리량 조회 API 구현
<footer> - 관련: #73
1 parent 0a5bdf1 commit c97d37c

File tree

6 files changed

+75
-7
lines changed

6 files changed

+75
-7
lines changed

.github/workflows/dev-cd.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,4 @@ jobs:
6262
script: |
6363
docker rm -f taskflow
6464
docker image rm ${{ secrets.DOCKER_REPO }} -f
65-
docker run --name taskflow --network host -d -p 9090:9090 ${{ secrets.DOCKER_REPO }} --restart on-failure
65+
docker run --name taskflow -d -p 9090:9090 ${{ secrets.DOCKER_REPO }} --restart on-failure

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package clap.server.adapter.inbound.web.statistics;
22

3-
import clap.server.application.port.inbound.statistics.FindCategoryTaskRequestUsecase;
4-
import clap.server.application.port.inbound.statistics.FindPeriodTaskProcessUsecase;
5-
import clap.server.application.port.inbound.statistics.FindPeriodTaskRequestUsecase;
6-
import clap.server.application.port.inbound.statistics.FindSubCategoryTaskRequestUsecase;
3+
import clap.server.application.port.inbound.statistics.*;
74
import clap.server.common.annotation.architecture.WebAdapter;
85
import io.swagger.v3.oas.annotations.tags.Tag;
96
import lombok.RequiredArgsConstructor;
@@ -23,7 +20,7 @@ public class FindStatisticsController {
2320
private final FindPeriodTaskProcessUsecase findPeriodTaskProcessUsecase;
2421
private final FindCategoryTaskRequestUsecase findCategoryTaskRequestUsecase;
2522
private final FindSubCategoryTaskRequestUsecase findSubCategoryTaskRequestUsecase;
26-
// private final ManagerTaskProcessUsecase managerTaskProcessUsecase;
23+
private final ManagerTaskProcessUsecase managerTaskProcessUsecase;
2724

2825
@GetMapping(value = "/task-requests-by-period")
2926
public ResponseEntity<Map<String, Long>> aggregatePeriodTaskRequest(@RequestParam String period) {
@@ -34,6 +31,7 @@ public ResponseEntity<Map<String, Long>> aggregatePeriodTaskRequest(@RequestPara
3431
public ResponseEntity<Map<String, Long>> aggregatePeriodTaskProcess(@RequestParam String period) {
3532
return ResponseEntity.ok(findPeriodTaskProcessUsecase.aggregatePeriodTaskProcess(period));
3633
}
34+
3735
@GetMapping("/task-requests-by-category")
3836
public ResponseEntity<Map<String, Long>> aggregateCategoryTaskRequest(@RequestParam String period) {
3937
return ResponseEntity.ok(findCategoryTaskRequestUsecase.aggregateCategoryTaskRequest(period));
@@ -43,5 +41,9 @@ public ResponseEntity<Map<String, Long>> aggregateCategoryTaskRequest(@RequestPa
4341
public ResponseEntity<Map<String, Long>> aggregateSubCategoryTaskRequest(@RequestParam String period, @RequestParam String mainCategory) {
4442
return ResponseEntity.ok(findSubCategoryTaskRequestUsecase.aggregateSubCategoryTaskRequest(period, mainCategory));
4543
}
46-
// @GetMapping("/task/statistics/tasks-processed-by-manager")
44+
45+
@GetMapping("/tasks-processed-by-manager")
46+
public ResponseEntity<Map<String, Long>> aggregateSubCategoryTaskRequest(@RequestParam String period) {
47+
return ResponseEntity.ok(managerTaskProcessUsecase.aggregateManagerTaskProcess(period));
48+
}
4749
}

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,14 @@ public Map<String, Long> findSubCategoryTaskRequestByPeriod(String period, Strin
6161
return getCategoryTaskResults(executeQuery(query));
6262
}
6363

64+
@Override
65+
public Map<String, Long> findManagerTaskProcessByPeriod(String period) {
66+
PeriodConfig periodConfig = PeriodConfig.valueOf(period.toUpperCase());
67+
68+
NativeQuery query = buildManagerTaskProcessQuery(periodConfig);
69+
return getManagerTaskResults(executeQuery(query));
70+
}
71+
6472
private NativeQuery buildPeriodTaskRequestQuery(PeriodConfig config) {
6573
return NativeQuery.builder()
6674
.withQuery(q -> q
@@ -141,6 +149,20 @@ private NativeQuery buildSubCategoryTaskRequestQuery(PeriodConfig config, String
141149
.build();
142150
}
143151

152+
private NativeQuery buildManagerTaskProcessQuery(PeriodConfig config) {
153+
return NativeQuery.builder()
154+
.withQuery(q -> q
155+
.range(r -> r
156+
.date(d -> d
157+
.field("created_at")
158+
.gte(String.valueOf(LocalDate.now().minusDays(config.getDaysToSubtract()))))))
159+
.withAggregation("manager_task", AggregationBuilders.terms()
160+
.field("processor")
161+
.build()._toAggregation())
162+
.withMaxResults(0)
163+
.build();
164+
}
165+
144166
private ElasticsearchAggregations executeQuery(NativeQuery query) {
145167
return (ElasticsearchAggregations) elasticsearchOperations
146168
.search(query, TaskDocument.class)
@@ -181,4 +203,20 @@ private Map<String, Long> getCategoryTaskResults(ElasticsearchAggregations aggre
181203
))
182204
);
183205
}
206+
207+
private Map<String, Long> getManagerTaskResults(ElasticsearchAggregations aggregations) {
208+
return new TreeMap<>(
209+
aggregations.get("manager_task")
210+
.aggregation()
211+
.getAggregate()
212+
.sterms()
213+
.buckets()
214+
.array()
215+
.stream()
216+
.collect(Collectors.toMap(
217+
bucket -> bucket.key().stringValue(),
218+
MultiBucketBase::docCount
219+
))
220+
);
221+
}
184222
}
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 ManagerTaskProcessUsecase {
6+
Map<String, Long> aggregateManagerTaskProcess(String period);
7+
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ public interface TaskDocumentPort {
1515
Map<String, Long> findCategoryTaskRequestByPeriod(String period);
1616

1717
Map<String, Long> findSubCategoryTaskRequestByPeriod(String period, String mainCategory);
18+
19+
Map<String, Long> findManagerTaskProcessByPeriod(String period);
1820
}
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.ManagerTaskProcessUsecase;
4+
import clap.server.application.port.outbound.task.TaskDocumentPort;
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 ManagerTaskProcessService implements ManagerTaskProcessUsecase {
13+
private final TaskDocumentPort taskDocumentPort;
14+
15+
@Override
16+
public Map<String, Long> aggregateManagerTaskProcess(String period) {
17+
return taskDocumentPort.findManagerTaskProcessByPeriod(period);
18+
}
19+
}

0 commit comments

Comments
 (0)