11package clap .server .adapter .outbound .infrastructure .elastic ;
22
3- import clap .server .adapter .outbound .infrastructure .elastic .dto .PeriodConfig ;
43import clap .server .adapter .outbound .infrastructure .elastic .entity .ElasticTask ;
54import clap .server .adapter .outbound .infrastructure .elastic .repository .TaskElasticRepository ;
65import clap .server .application .port .outbound .task .ElasticTaskPort ;
76import clap .server .common .annotation .architecture .InfrastructureAdapter ;
87import co .elastic .clients .elasticsearch ._types .aggregations .AggregationBuilders ;
9- import co .elastic .clients .elasticsearch ._types .aggregations .CalendarInterval ;
108import co .elastic .clients .elasticsearch ._types .aggregations .MultiBucketBase ;
119import lombok .RequiredArgsConstructor ;
1210import org .springframework .data .elasticsearch .client .elc .ElasticsearchAggregations ;
@@ -32,27 +30,26 @@ public void saveStatistics(List<ElasticTask> statistics) {
3230
3331 @ Override
3432 public Map <String , Long > findPeriodTaskRequestByPeriod (String period ) {
35- PeriodConfig periodConfig = getPeriodConfig (period );
33+ PeriodConfig periodConfig = PeriodConfig . valueOf (period . toUpperCase () );
3634
3735 NativeQuery query = buildPeriodTaskRequestQuery (periodConfig );
38- ElasticsearchAggregations result = executeQuery (query );
39- return processResults (result , periodConfig );
36+ return getPeriodTaskResults (executeQuery (query ), periodConfig );
4037 }
4138
4239 @ Override
4340 public Map <String , Long > findPeriodTaskProcessByPeriod (String period ) {
44- PeriodConfig periodConfig = getPeriodConfig (period );
41+ PeriodConfig periodConfig = PeriodConfig . valueOf (period . toUpperCase () );
4542
4643 NativeQuery query = buildPeriodTaskProcessQuery (periodConfig );
47- ElasticsearchAggregations result = executeQuery (query );
48- return processResults (result , periodConfig );
44+ return getPeriodTaskResults (executeQuery (query ), periodConfig );
4945 }
5046
51- private PeriodConfig getPeriodConfig (String period ) {
52- if (period .equals ("week" )) {
53- return new PeriodConfig (14 , CalendarInterval .Day , 0 , 10 );
54- }
55- return new PeriodConfig (1 , CalendarInterval .Hour , 11 , 19 );
47+ @ Override
48+ public Map <String , Long > findCategoryTaskRequestByPeriod (String period ) {
49+ PeriodConfig periodConfig = PeriodConfig .valueOf (period .toUpperCase ());
50+
51+ NativeQuery query = buildCategoryTaskRequestQuery (periodConfig );
52+ return getCategoryTaskResults (executeQuery (query ));
5653 }
5754
5855 private NativeQuery buildPeriodTaskRequestQuery (PeriodConfig config ) {
@@ -61,10 +58,10 @@ private NativeQuery buildPeriodTaskRequestQuery(PeriodConfig config) {
6158 .range (r -> r
6259 .date (d -> d
6360 .field ("created_at" )
64- .gte (String .valueOf (LocalDate .now ().minusDays (config .daysToSubtract ()))))))
61+ .gte (String .valueOf (LocalDate .now ().minusDays (config .getDaysToSubtract ()))))))
6562 .withAggregation ("period_task" , AggregationBuilders .dateHistogram ()
6663 .field ("created_at" )
67- .calendarInterval (config .calendarInterval ())
64+ .calendarInterval (config .getCalendarInterval ())
6865 .build ()._toAggregation ())
6966 .withMaxResults (0 )
7067 .build ();
@@ -76,7 +73,7 @@ private NativeQuery buildPeriodTaskProcessQuery(PeriodConfig config) {
7673 .range (r -> r
7774 .date (d -> d
7875 .field ("created_at" )
79- .gte (String .valueOf (LocalDate .now ().minusDays (config .daysToSubtract ())))))).build ();
76+ .gte (String .valueOf (LocalDate .now ().minusDays (config .getDaysToSubtract ())))))).build ();
8077 NativeQuery statusQuery = NativeQuery .builder ()
8178 .withQuery (q -> q
8279 .term (v -> v
@@ -87,10 +84,24 @@ private NativeQuery buildPeriodTaskProcessQuery(PeriodConfig config) {
8784 .withQuery (q -> q
8885 .bool (b -> b
8986 .must (rangeQuery .getQuery (), statusQuery .getQuery ()))
90- )
87+ )
9188 .withAggregation ("period_task" , AggregationBuilders .dateHistogram ()
9289 .field ("created_at" )
93- .calendarInterval (config .calendarInterval ())
90+ .calendarInterval (config .getCalendarInterval ())
91+ .build ()._toAggregation ())
92+ .withMaxResults (0 )
93+ .build ();
94+ }
95+
96+ private NativeQuery buildCategoryTaskRequestQuery (PeriodConfig config ) {
97+ return NativeQuery .builder ()
98+ .withQuery (q -> q
99+ .range (r -> r
100+ .date (d -> d
101+ .field ("created_at" )
102+ .gte (String .valueOf (LocalDate .now ().minusDays (config .getDaysToSubtract ()))))))
103+ .withAggregation ("category_task" , AggregationBuilders .terms ()
104+ .field ("main_category" )
94105 .build ()._toAggregation ())
95106 .withMaxResults (0 )
96107 .build ();
@@ -102,7 +113,7 @@ private ElasticsearchAggregations executeQuery(NativeQuery query) {
102113 .getAggregations ();
103114 }
104115
105- private Map <String , Long > processResults (ElasticsearchAggregations aggregations , PeriodConfig config ) {
116+ private Map <String , Long > getPeriodTaskResults (ElasticsearchAggregations aggregations , PeriodConfig config ) {
106117 return new TreeMap <>(
107118 aggregations .get ("period_task" )
108119 .aggregation ()
@@ -113,11 +124,27 @@ private Map<String, Long> processResults(ElasticsearchAggregations aggregations,
113124 .stream ()
114125 .collect (Collectors .toMap (
115126 bucket -> bucket .keyAsString ().substring (
116- config .substringStart (),
117- config .substringEnd ()
127+ config .getSubstringStart (),
128+ config .getSubstringEnd ()
118129 ),
119130 MultiBucketBase ::docCount
120131 ))
121132 );
122133 }
134+
135+ private Map <String , Long > getCategoryTaskResults (ElasticsearchAggregations aggregations ) {
136+ return new TreeMap <>(
137+ aggregations .get ("category_task" )
138+ .aggregation ()
139+ .getAggregate ()
140+ .sterms ()
141+ .buckets ()
142+ .array ()
143+ .stream ()
144+ .collect (Collectors .toMap (
145+ bucket -> bucket .key ().stringValue (),
146+ MultiBucketBase ::docCount
147+ ))
148+ );
149+ }
123150}
0 commit comments