Skip to content

Commit f9ec0ed

Browse files
CLAP-249 Refactor : 통계 조회 서비스 리팩토링
* CLAP-110 Feature : 담당자별 작업 처리량 조회 API 구현 <footer> - 관련: #73 * CLAP-111 Refactor : 통계 조회 API 리팩토링 및 기능 수정 <footer> - 관련: #74 * 내 작업한 내용에 대한 설명 * 담당자 조회 API 구현 * CLAP-111 Refactor : 통계 조회 API 주소 통합, 리팩토링, 예외처리 <footer> - 관련: #74 * Bug : 프로퍼티파일 수정 * CLAP-104 CI/CD : CI에서 s3.yml 파일 생성하도록 수정 * CLAP-146 Feature : 카테고리 목록 조회 API 구현 <footer> - 관련: #118 * CLAP-147 Feature : 카테고리 수정 API 구현 <footer> - 관련: #119 * CLAP-147 Feature : 카테고리 추가, 수정 API 리뷰반영 수정 <footer> - 관련: #119 * CLAP-148 Feature : 카테고리 삭제 API 구현 <footer> - 관련: #120 * CLAP-148 Feature : 카테고리 삭제 API 수정 <footer> - 관련: #120 * CLAP-148 Docs : 카테고리 API 스웨거 수정 <footer> - 관련: #120 * CLAP-107 Bug : CI test yml파일 key 중복 수정 <footer> - 관련: #60 * CLAP-148 Feature : 카테고리 CUD 리뷰 반영 수정, 조회 반환 양식 수정 <footer> - 관련: #120 * CLAP-214 Cleanup : 통계, 카테고리 미흡한부분 리팩토링 <footer> - 관련: #216 * CLAP-214 Fix : 통계조회 API 파라미터 바인딩 오류 수정 <footer> - 관련: #216 * CLAP-214 Fix : addConverter 수정 <footer> - 관련: #216 * CLAP-214 Hotfix : 추가한 파일들 제거 <footer> - 관련: #216 * CLAP-214 Hotfix : FindStatisticsController 스위치문 수정 <footer> - 관련: #216 * CLAP-214 Hotfix : AddCategoryService 지연로딩 오류 수정 <footer> - 관련: #216 * CLAP-214 Hotfix : DeleteCategoryService 카테고리 삭제 로직 수정 <footer> - 관련: #216 * CLAP-249 Refactor : 통계 조회 서비스 리팩토링 <footer> - 관련: #265 * CLAP-250 Test : 통계 조회 테스트코드 작성 <footer> - 관련: #266
1 parent bbdf26d commit f9ec0ed

File tree

4 files changed

+161
-2
lines changed

4 files changed

+161
-2
lines changed

src/main/java/clap/server/application/service/statistics/FindTaskProcessService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
@ApplicationService
1515
@RequiredArgsConstructor
1616
@Transactional(readOnly = true)
17-
class FindTaskProcessService implements FindTaskProcessUsecase {
17+
public class FindTaskProcessService implements FindTaskProcessUsecase {
1818
private final TaskDocumentPort taskDocumentPort;
1919
private final TaskStatisticsPolicy taskStatisticsPolicy;
2020

src/main/java/clap/server/domain/policy/task/TaskStatisticsPolicy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
@Policy
1414
public class TaskStatisticsPolicy {
15-
private static final String DISPLAY_FORMAT = "MM월 dd일";
15+
private static final String DISPLAY_FORMAT = "M월 d일";
1616

1717
public Map<String, Long> filterAndFormatWeekdayStatistics(Map<String, Long> statistics) {
1818
return statistics.entrySet().stream()
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package clap.server.application.statistics;
2+
3+
import clap.server.adapter.inbound.web.dto.statistics.StatisticsResponse;
4+
import clap.server.application.port.outbound.task.TaskDocumentPort;
5+
import clap.server.application.service.statistics.FindTaskProcessService;
6+
import clap.server.domain.policy.task.TaskStatisticsPolicy;
7+
import org.junit.jupiter.api.DisplayName;
8+
import org.junit.jupiter.api.Test;
9+
import org.junit.jupiter.api.extension.ExtendWith;
10+
import org.mockito.InjectMocks;
11+
import org.mockito.Mock;
12+
import org.mockito.junit.jupiter.MockitoExtension;
13+
14+
import java.util.List;
15+
import java.util.Map;
16+
import java.util.TreeMap;
17+
18+
import static org.assertj.core.api.Assertions.assertThat;
19+
import static org.mockito.ArgumentMatchers.eq;
20+
import static org.mockito.Mockito.when;
21+
22+
@ExtendWith(MockitoExtension.class)
23+
class FindTaskProcessServiceTest {
24+
@Mock
25+
private TaskDocumentPort taskDocumentPort;
26+
@Mock
27+
private TaskStatisticsPolicy taskStatisticsPolicy;
28+
@InjectMocks
29+
private FindTaskProcessService findTaskProcessService;
30+
31+
@Test
32+
@DisplayName("카테고리별 요청량")
33+
void aggregateCategoryTaskRequest() {
34+
//given
35+
Map<String, Long> statistics = new TreeMap<>();
36+
statistics.put("VM", 6L);
37+
statistics.put("KS", 7L);
38+
statistics.put("DN", 8L);
39+
40+
when(taskDocumentPort.findCategoryTaskRequestByPeriod(eq("week"))).thenReturn(statistics);
41+
42+
//when
43+
List<StatisticsResponse> week = findTaskProcessService.aggregateCategoryTaskRequest("week");
44+
45+
//then
46+
assertThat(week.get(0).key()).isEqualTo("DN");
47+
assertThat(week.get(0).count()).isEqualTo(8L);
48+
assertThat(week.get(1).key()).isEqualTo("KS");
49+
assertThat(week.get(1).count()).isEqualTo(7L);
50+
assertThat(week.get(2).key()).isEqualTo("VM");
51+
assertThat(week.get(2).count()).isEqualTo(6L);
52+
}
53+
54+
@Test
55+
@DisplayName("담당자별 처리량")
56+
void aggregateManagerTaskProcess() {
57+
//given
58+
Map<String, Long> statistics = new TreeMap<>();
59+
statistics.put("log.d", 6L);
60+
statistics.put("tony.tsx", 7L);
61+
statistics.put("moya.moya", 8L);
62+
63+
when(taskDocumentPort.findManagerTaskProcessByPeriod(eq("week"))).thenReturn(statistics);
64+
65+
//when
66+
List<StatisticsResponse> week = findTaskProcessService.aggregateManagerTaskProcess("week");
67+
68+
//then
69+
assertThat(week.get(0).key()).isEqualTo("log.d");
70+
assertThat(week.get(0).count()).isEqualTo(6L);
71+
assertThat(week.get(1).key()).isEqualTo("moya.moya");
72+
assertThat(week.get(1).count()).isEqualTo(8L);
73+
assertThat(week.get(2).key()).isEqualTo("tony.tsx");
74+
assertThat(week.get(2).count()).isEqualTo(7L);
75+
}
76+
77+
@Test
78+
@DisplayName("기간별 처리량")
79+
void aggregatePeriodTaskProcess() {
80+
//given
81+
Map<String, Long> statistics = new TreeMap<>();
82+
statistics.put("2025-02-01", 8L);
83+
statistics.put("2025-01-30", 7L);
84+
statistics.put("2025-01-31", 6L);
85+
86+
when(taskDocumentPort.findPeriodTaskProcessByPeriod(eq("week"))).thenReturn(statistics);
87+
88+
Map<String, Long> formattedStatistics = new TreeMap<>();
89+
formattedStatistics.put("1월 30일", 7L);
90+
formattedStatistics.put("1월 31일", 6L);
91+
when(taskStatisticsPolicy.filterAndFormatWeekdayStatistics(statistics)).thenReturn(formattedStatistics);
92+
93+
//when
94+
List<StatisticsResponse> week = findTaskProcessService.aggregatePeriodTaskProcess("week");
95+
96+
//then
97+
assertThat(week.get(0).key()).isEqualTo("1월 30일");
98+
assertThat(week.get(0).count()).isEqualTo(7L);
99+
assertThat(week.get(1).key()).isEqualTo("1월 31일");
100+
assertThat(week.get(1).count()).isEqualTo(6L);
101+
}
102+
103+
@Test
104+
@DisplayName("기간별 요청량")
105+
void aggregatePeriodTaskRequest() {
106+
//given
107+
Map<String, Long> statistics = new TreeMap<>();
108+
statistics.put("2025-02-01", 8L);
109+
statistics.put("2025-01-30", 7L);
110+
statistics.put("2025-01-31", 6L);
111+
112+
when(taskDocumentPort.findPeriodTaskRequestByPeriod(eq("week"))).thenReturn(statistics);
113+
114+
Map<String, Long> formattedStatistics = new TreeMap<>();
115+
formattedStatistics.put("1월 30일", 7L);
116+
formattedStatistics.put("1월 31일", 6L);
117+
when(taskStatisticsPolicy.filterAndFormatWeekdayStatistics(statistics)).thenReturn(formattedStatistics);
118+
119+
//when
120+
List<StatisticsResponse> week = findTaskProcessService.aggregatePeriodTaskRequest("week");
121+
122+
//then
123+
assertThat(week.get(0).key()).isEqualTo("1월 30일");
124+
assertThat(week.get(0).count()).isEqualTo(7L);
125+
assertThat(week.get(1).key()).isEqualTo("1월 31일");
126+
assertThat(week.get(1).count()).isEqualTo(6L);
127+
}
128+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package clap.server.domain.policy.task;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import java.util.Map;
6+
import java.util.TreeMap;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
class TaskStatisticsPolicyTest {
11+
private final TaskStatisticsPolicy taskStatisticsPolicy = new TaskStatisticsPolicy();
12+
13+
@Test
14+
void filterAndFormatWeekdayStatistics() {
15+
//given
16+
Map<String, Long> statistics = new TreeMap<>();
17+
statistics.put("2025-02-01", 8L);
18+
statistics.put("2025-01-30", 7L);
19+
statistics.put("2025-01-31", 6L);
20+
21+
Map<String, Long> formattedStatistics = new TreeMap<>();
22+
formattedStatistics.put("1월 30일", 7L);
23+
formattedStatistics.put("1월 31일", 6L);
24+
25+
//when
26+
Map<String, Long> weekdayStatistics = taskStatisticsPolicy.filterAndFormatWeekdayStatistics(statistics);
27+
28+
//then
29+
assertThat(weekdayStatistics).isEqualTo(formattedStatistics);
30+
}
31+
}

0 commit comments

Comments
 (0)