77import org .springframework .http .ResponseEntity ;
88import org .springframework .web .bind .annotation .*;
99
10+ import java .util .Collections ;
1011import java .util .List ;
1112import java .util .Map ;
13+ import java .util .NoSuchElementException ;
1214
1315@ RestController
1416@ RequestMapping ("/api/v1/stats" )
@@ -20,18 +22,33 @@ public class CaseStatsController {
2022 // 개요 조회
2123 @ GetMapping ("/overview" )
2224 public ResponseEntity <?> getOverview (HttpSession session ) {
23- // 결과가 없으면 404, 있으면 200
24- CaseStatsOverviewResponse response = caseStatsService .getOverview (session );
25- return ResponseEntity .ok (response );
25+ try {
26+ CaseStatsOverviewResponse response = caseStatsService .getOverview (session );
27+ return ResponseEntity .ok (response );
28+ } catch (IllegalStateException e ) {
29+ return ResponseEntity .status (401 ).body (Collections .singletonMap ("message" , e .getMessage ()));
30+ } catch (NoSuchElementException e ) {
31+ return ResponseEntity .status (404 ).body (Collections .singletonMap ("message" , e .getMessage ()));
32+ } catch (Exception e ) {
33+ return ResponseEntity .status (500 ).body (Collections .singletonMap ("message" , "내부 서버 오류 발생" ));
34+ }
2635 }
2736
2837 // 시간대별 사건 수 조회 (0시~23시 모두 반환)
2938 @ GetMapping ("/hour" )
3039 public ResponseEntity <?> getHourlyCaseStats (@ RequestParam ("date" ) String date ,
3140 @ RequestParam (value = "category" , required = false ) String category ,
3241 HttpSession session ) {
33- List <HourlyCaseStatsResponse > stats = caseStatsService .getHourlyCaseStats (date , category , session );
34- return ResponseEntity .ok (stats );
42+ try {
43+ List <HourlyCaseStatsResponse > stats = caseStatsService .getHourlyCaseStats (date , category , session );
44+ return ResponseEntity .ok (stats );
45+ } catch (IllegalStateException e ) {
46+ return ResponseEntity .status (401 ).body (Collections .singletonMap ("message" , e .getMessage ()));
47+ } catch (NoSuchElementException e ) {
48+ return ResponseEntity .status (404 ).body (Collections .singletonMap ("message" , e .getMessage ()));
49+ } catch (Exception e ) {
50+ return ResponseEntity .status (500 ).body (Collections .singletonMap ("message" , "내부 서버 오류가 발생했습니다." ));
51+ }
3552 }
3653
3754 // 월별/일별 사건 수 조회 (month 파라미터 존재 여부에 따라 분기; 전체 범위를 0으로 채워 반환)
@@ -40,36 +57,70 @@ public ResponseEntity<?> getCaseStats(@RequestParam("year") int year,
4057 @ RequestParam (value = "month" , required = false ) Integer month ,
4158 @ RequestParam (value = "category" , required = false ) String category ,
4259 HttpSession session ) {
43- // month가 없으면 월별 데이터
44- if (month == null ) {
45- List <MonthlyCaseStatsResponse > monthlyStats = caseStatsService .getMonthlyCaseStats (year , category , session );
46- return ResponseEntity .ok (monthlyStats );
60+ try {
61+ if (month == null ) {
62+ List <MonthlyCaseStatsResponse > monthlyStats = caseStatsService .getMonthlyCaseStats (year , category , session );
63+ return ResponseEntity .ok (monthlyStats );
64+ }
65+ List <DailyCaseStatsResponse > dailyStats = caseStatsService .getDailyCaseStats (year , month , category , session );
66+ return ResponseEntity .ok (dailyStats );
67+ } catch (IllegalStateException e ) {
68+ return ResponseEntity .status (401 ).body (Collections .singletonMap ("message" , e .getMessage ()));
69+ } catch (NoSuchElementException e ) {
70+ return ResponseEntity .status (404 ).body (Collections .singletonMap ("message" , e .getMessage ()));
71+ } catch (Exception e ) {
72+ return ResponseEntity .status (500 ).body (Collections .singletonMap ("message" , "내부 서버 오류가 발생했습니다." ));
4773 }
48-
49- // month가 있으면 일별 데이터
50- List <DailyCaseStatsResponse > dailyStats = caseStatsService .getDailyCaseStats (year , month , category , session );
51- return ResponseEntity .ok (dailyStats );
5274 }
5375
5476 // 유형별 사건 수 조회 (기본 카테고리 0 포함)
5577 @ GetMapping ("/category" )
5678 public ResponseEntity <?> getCategoryCaseStats (@ RequestParam ("period" ) String period , HttpSession session ) {
57- Map <String , Integer > stats = caseStatsService .getCategoryCaseStats (period , session );
58- return ResponseEntity .ok (stats );
79+ try {
80+ Map <String , Integer > stats = caseStatsService .getCategoryCaseStats (period , session );
81+ return ResponseEntity .ok (stats );
82+ } catch (IllegalStateException e ) {
83+ return ResponseEntity .status (401 ).body (Collections .singletonMap ("message" , e .getMessage ()));
84+ } catch (IllegalArgumentException e ) {
85+ return ResponseEntity .status (400 ).body (Collections .singletonMap ("message" , e .getMessage ()));
86+ } catch (NoSuchElementException e ) {
87+ return ResponseEntity .status (404 ).body (Collections .singletonMap ("message" , e .getMessage ()));
88+ } catch (Exception e ) {
89+ return ResponseEntity .status (500 ).body (Collections .singletonMap ("message" , "내부 서버 오류가 발생했습니다." ));
90+ }
5991 }
6092
6193 // 장소별 사건 수 조회
6294 @ GetMapping ("/location" )
6395 public ResponseEntity <?> getLocationCaseStats (@ RequestParam ("period" ) String period , HttpSession session ) {
64- List <LocationCaseStatsResponse > stats = caseStatsService .getLocationCaseStats (period , session );
65- return ResponseEntity .ok (stats );
96+ try {
97+ List <LocationCaseStatsResponse > stats = caseStatsService .getLocationCaseStats (period , session );
98+ return ResponseEntity .ok (stats );
99+ } catch (IllegalStateException e ) {
100+ return ResponseEntity .status (401 ).body (Collections .singletonMap ("message" , e .getMessage ()));
101+ } catch (IllegalArgumentException e ) {
102+ return ResponseEntity .status (400 ).body (Collections .singletonMap ("message" , e .getMessage ()));
103+ } catch (NoSuchElementException e ) {
104+ return ResponseEntity .status (404 ).body (Collections .singletonMap ("message" , e .getMessage ()));
105+ } catch (Exception e ) {
106+ return ResponseEntity .status (500 ).body (Collections .singletonMap ("message" , "내부 서버 오류가 발생했습니다." ));
107+ }
66108 }
67109
68110 // 지도용 장소별 사건 수 조회
69111 @ GetMapping ("/map" )
70112 public ResponseEntity <?> getMapCaseStats (@ RequestParam ("period" ) String period , HttpSession session ) {
71- List <MapCaseStatsResponse > stats = caseStatsService .getMapCaseStats (period , session );
72- return ResponseEntity .ok (stats );
113+ try {
114+ List <MapCaseStatsResponse > stats = caseStatsService .getMapCaseStats (period , session );
115+ return ResponseEntity .ok (stats );
116+ } catch (IllegalStateException e ) {
117+ return ResponseEntity .status (401 ).body (Collections .singletonMap ("message" , e .getMessage ()));
118+ } catch (IllegalArgumentException e ) {
119+ return ResponseEntity .status (400 ).body (Collections .singletonMap ("message" , e .getMessage ()));
120+ } catch (NoSuchElementException e ) {
121+ return ResponseEntity .status (404 ).body (Collections .singletonMap ("message" , e .getMessage ()));
122+ } catch (Exception e ) {
123+ return ResponseEntity .status (500 ).body (Collections .singletonMap ("message" , "내부 서버 오류가 발생했습니다." ));
124+ }
73125 }
74-
75126}
0 commit comments