Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import clap.server.application.port.inbound.statistics.CategoryTaskRequestUsecase;
import clap.server.application.port.inbound.statistics.PeriodTaskProcessUsecase;
import clap.server.application.port.inbound.statistics.PeriodTaskRequestUsecase;
import clap.server.application.port.inbound.statistics.SubCategoryTaskRequestUsecase;
import clap.server.common.annotation.architecture.WebAdapter;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
Expand All @@ -16,7 +17,7 @@ public class StatisticsFindController {
private final PeriodTaskRequestUsecase periodTaskRequestUsecase;
private final PeriodTaskProcessUsecase periodTaskProcessUsecase;
private final CategoryTaskRequestUsecase categoryTaskRequestUsecase;
// private final SubCategoryTaskRequestUsecase subCategoryTaskRequestUsecase;
private final SubCategoryTaskRequestUsecase subCategoryTaskRequestUsecase;
// private final ManagerTaskProcessUsecase managerTaskProcessUsecase;

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

// @GetMapping("/task/statistics/task-requests-by-subcategory")
//
@GetMapping("/task/statistics/task-requests-by-subcategory")
public Map<String, Long> aggregateSubCategoryTaskRequest(@RequestParam String period, @RequestParam String mainCategory) {
return subCategoryTaskRequestUsecase.subCategoryTaskRequestAggregate(period, mainCategory);
}
// @GetMapping("/task/statistics/tasks-processed-by-manager")
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,14 @@ public Map<String, Long> findCategoryTaskRequestByPeriod(String period) {
return getCategoryTaskResults(executeQuery(query));
}

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

NativeQuery query = buildSubCategoryTaskRequestQuery(periodConfig, mainCategory);
return getCategoryTaskResults(executeQuery(query));
}

private NativeQuery buildPeriodTaskRequestQuery(PeriodConfig config) {
return NativeQuery.builder()
.withQuery(q -> q
Expand Down Expand Up @@ -107,6 +115,31 @@ private NativeQuery buildCategoryTaskRequestQuery(PeriodConfig config) {
.build();
}

private NativeQuery buildSubCategoryTaskRequestQuery(PeriodConfig config, String mainCategory) {
NativeQuery rangeQuery = NativeQuery.builder()
.withQuery(q -> q
.range(r -> r
.date(d -> d
.field("created_at")
.gte(String.valueOf(LocalDate.now().minusDays(config.getDaysToSubtract())))))).build();
NativeQuery categoryQuery = NativeQuery.builder()
.withQuery(q -> q
.term(v -> v
.field("main_category")
.value(mainCategory))).build();

return NativeQuery.builder()
.withQuery(q -> q
.bool(b -> b
.must(rangeQuery.getQuery(), categoryQuery.getQuery()))
)
.withAggregation("category_task", AggregationBuilders.terms()
.field("sub_category")
.build()._toAggregation())
.withMaxResults(0)
.build();
}

private ElasticsearchAggregations executeQuery(NativeQuery query) {
return (ElasticsearchAggregations) elasticsearchOperations
.search(query, ElasticTask.class)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package clap.server.application.port.inbound.statistics;

import java.util.Map;

public interface SubCategoryTaskRequestUsecase {
Map<String, Long> subCategoryTaskRequestAggregate(String period, String mainCategory);
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,6 @@ public interface ElasticTaskPort {
Map<String, Long> findPeriodTaskProcessByPeriod(String period);

Map<String, Long> findCategoryTaskRequestByPeriod(String period);

Map<String, Long> findSubCategoryTaskRequestByPeriod(String period, String mainCategory);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package clap.server.application.statistics;

import clap.server.application.port.inbound.statistics.SubCategoryTaskRequestUsecase;
import clap.server.application.port.outbound.task.ElasticTaskPort;
import clap.server.common.annotation.architecture.ApplicationService;
import lombok.RequiredArgsConstructor;

import java.util.Map;

@ApplicationService
@RequiredArgsConstructor
public class SubCategoryTaskRequestService implements SubCategoryTaskRequestUsecase {
private final ElasticTaskPort elasticTaskPort;

@Override
public Map<String, Long> subCategoryTaskRequestAggregate(String period, String mainCategory) {
return elasticTaskPort.findSubCategoryTaskRequestByPeriod(period, mainCategory);
}
}