diff --git a/.github/workflows/dev-cd.yml b/.github/workflows/dev-cd.yml index 99e31017..ae3495c3 100644 --- a/.github/workflows/dev-cd.yml +++ b/.github/workflows/dev-cd.yml @@ -62,4 +62,4 @@ jobs: script: | docker rm -f taskflow docker image rm ${{ secrets.DOCKER_REPO }} -f - docker run --name taskflow --network host -d -p 9090:9090 ${{ secrets.DOCKER_REPO }} --restart on-failure + docker run --name taskflow -d -p 9090:9090 ${{ secrets.DOCKER_REPO }} --restart on-failure diff --git a/src/main/java/clap/server/adapter/inbound/web/statistics/FindStatisticsController.java b/src/main/java/clap/server/adapter/inbound/web/statistics/FindStatisticsController.java index ecdfda02..6be9e4c7 100644 --- a/src/main/java/clap/server/adapter/inbound/web/statistics/FindStatisticsController.java +++ b/src/main/java/clap/server/adapter/inbound/web/statistics/FindStatisticsController.java @@ -1,9 +1,6 @@ package clap.server.adapter.inbound.web.statistics; -import clap.server.application.port.inbound.statistics.FindCategoryTaskRequestUsecase; -import clap.server.application.port.inbound.statistics.FindPeriodTaskProcessUsecase; -import clap.server.application.port.inbound.statistics.FindPeriodTaskRequestUsecase; -import clap.server.application.port.inbound.statistics.FindSubCategoryTaskRequestUsecase; +import clap.server.application.port.inbound.statistics.*; import clap.server.common.annotation.architecture.WebAdapter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -23,7 +20,7 @@ public class FindStatisticsController { private final FindPeriodTaskProcessUsecase findPeriodTaskProcessUsecase; private final FindCategoryTaskRequestUsecase findCategoryTaskRequestUsecase; private final FindSubCategoryTaskRequestUsecase findSubCategoryTaskRequestUsecase; -// private final ManagerTaskProcessUsecase managerTaskProcessUsecase; + private final ManagerTaskProcessUsecase managerTaskProcessUsecase; @GetMapping(value = "/task-requests-by-period") public ResponseEntity> aggregatePeriodTaskRequest(@RequestParam String period) { @@ -34,6 +31,7 @@ public ResponseEntity> aggregatePeriodTaskRequest(@RequestPara public ResponseEntity> aggregatePeriodTaskProcess(@RequestParam String period) { return ResponseEntity.ok(findPeriodTaskProcessUsecase.aggregatePeriodTaskProcess(period)); } + @GetMapping("/task-requests-by-category") public ResponseEntity> aggregateCategoryTaskRequest(@RequestParam String period) { return ResponseEntity.ok(findCategoryTaskRequestUsecase.aggregateCategoryTaskRequest(period)); @@ -43,5 +41,9 @@ public ResponseEntity> aggregateCategoryTaskRequest(@RequestPa public ResponseEntity> aggregateSubCategoryTaskRequest(@RequestParam String period, @RequestParam String mainCategory) { return ResponseEntity.ok(findSubCategoryTaskRequestUsecase.aggregateSubCategoryTaskRequest(period, mainCategory)); } -// @GetMapping("/task/statistics/tasks-processed-by-manager") + + @GetMapping("/tasks-processed-by-manager") + public ResponseEntity> aggregateSubCategoryTaskRequest(@RequestParam String period) { + return ResponseEntity.ok(managerTaskProcessUsecase.aggregateManagerTaskProcess(period)); + } } \ No newline at end of file diff --git a/src/main/java/clap/server/adapter/outbound/infrastructure/elastic/TaskDocumentAdapter.java b/src/main/java/clap/server/adapter/outbound/infrastructure/elastic/TaskDocumentAdapter.java index ffa6ab74..7d68bf31 100644 --- a/src/main/java/clap/server/adapter/outbound/infrastructure/elastic/TaskDocumentAdapter.java +++ b/src/main/java/clap/server/adapter/outbound/infrastructure/elastic/TaskDocumentAdapter.java @@ -61,6 +61,14 @@ public Map findSubCategoryTaskRequestByPeriod(String period, Strin return getCategoryTaskResults(executeQuery(query)); } + @Override + public Map findManagerTaskProcessByPeriod(String period) { + PeriodConfig periodConfig = PeriodConfig.valueOf(period.toUpperCase()); + + NativeQuery query = buildManagerTaskProcessQuery(periodConfig); + return getManagerTaskResults(executeQuery(query)); + } + private NativeQuery buildPeriodTaskRequestQuery(PeriodConfig config) { return NativeQuery.builder() .withQuery(q -> q @@ -141,6 +149,20 @@ private NativeQuery buildSubCategoryTaskRequestQuery(PeriodConfig config, String .build(); } + private NativeQuery buildManagerTaskProcessQuery(PeriodConfig config) { + return NativeQuery.builder() + .withQuery(q -> q + .range(r -> r + .date(d -> d + .field("created_at") + .gte(String.valueOf(LocalDate.now().minusDays(config.getDaysToSubtract())))))) + .withAggregation("manager_task", AggregationBuilders.terms() + .field("processor") + .build()._toAggregation()) + .withMaxResults(0) + .build(); + } + private ElasticsearchAggregations executeQuery(NativeQuery query) { return (ElasticsearchAggregations) elasticsearchOperations .search(query, TaskDocument.class) @@ -181,4 +203,20 @@ private Map getCategoryTaskResults(ElasticsearchAggregations aggre )) ); } + + private Map getManagerTaskResults(ElasticsearchAggregations aggregations) { + return new TreeMap<>( + aggregations.get("manager_task") + .aggregation() + .getAggregate() + .sterms() + .buckets() + .array() + .stream() + .collect(Collectors.toMap( + bucket -> bucket.key().stringValue(), + MultiBucketBase::docCount + )) + ); + } } diff --git a/src/main/java/clap/server/application/port/inbound/statistics/ManagerTaskProcessUsecase.java b/src/main/java/clap/server/application/port/inbound/statistics/ManagerTaskProcessUsecase.java new file mode 100644 index 00000000..68026e7a --- /dev/null +++ b/src/main/java/clap/server/application/port/inbound/statistics/ManagerTaskProcessUsecase.java @@ -0,0 +1,7 @@ +package clap.server.application.port.inbound.statistics; + +import java.util.Map; + +public interface ManagerTaskProcessUsecase { + Map aggregateManagerTaskProcess(String period); +} diff --git a/src/main/java/clap/server/application/port/outbound/task/TaskDocumentPort.java b/src/main/java/clap/server/application/port/outbound/task/TaskDocumentPort.java index bf30f1cf..282ed090 100644 --- a/src/main/java/clap/server/application/port/outbound/task/TaskDocumentPort.java +++ b/src/main/java/clap/server/application/port/outbound/task/TaskDocumentPort.java @@ -15,4 +15,6 @@ public interface TaskDocumentPort { Map findCategoryTaskRequestByPeriod(String period); Map findSubCategoryTaskRequestByPeriod(String period, String mainCategory); + + Map findManagerTaskProcessByPeriod(String period); } diff --git a/src/main/java/clap/server/application/statistics/ManagerTaskProcessService.java b/src/main/java/clap/server/application/statistics/ManagerTaskProcessService.java new file mode 100644 index 00000000..c06141c0 --- /dev/null +++ b/src/main/java/clap/server/application/statistics/ManagerTaskProcessService.java @@ -0,0 +1,19 @@ +package clap.server.application.statistics; + +import clap.server.application.port.inbound.statistics.ManagerTaskProcessUsecase; +import clap.server.application.port.outbound.task.TaskDocumentPort; +import clap.server.common.annotation.architecture.ApplicationService; +import lombok.RequiredArgsConstructor; + +import java.util.Map; + +@ApplicationService +@RequiredArgsConstructor +public class ManagerTaskProcessService implements ManagerTaskProcessUsecase { + private final TaskDocumentPort taskDocumentPort; + + @Override + public Map aggregateManagerTaskProcess(String period) { + return taskDocumentPort.findManagerTaskProcessByPeriod(period); + } +}