66import org .springframework .data .domain .PageRequest ;
77import org .springframework .data .domain .Pageable ;
88import org .springframework .data .domain .Sort ;
9+ import org .springframework .data .web .PageableDefault ;
910import org .springframework .http .ResponseEntity ;
1011import org .springframework .validation .Errors ;
1112import org .springframework .web .bind .annotation .GetMapping ;
13+ import org .springframework .web .bind .annotation .ModelAttribute ;
1214import org .springframework .web .bind .annotation .PathVariable ;
1315import org .springframework .web .bind .annotation .PostMapping ;
1416import org .springframework .web .bind .annotation .RequestBody ;
2022import com .gamzabat .algohub .exception .RequestException ;
2123import com .gamzabat .algohub .feature .solution .dto .CreateSolutionRequest ;
2224import com .gamzabat .algohub .feature .solution .dto .GetCurrentSolvingStatusResponse ;
25+ import com .gamzabat .algohub .feature .solution .dto .GetMySolutionListRequest ;
26+ import com .gamzabat .algohub .feature .solution .dto .GetSolutionListRequest ;
2327import com .gamzabat .algohub .feature .solution .dto .GetSolutionResponse ;
24- import com .gamzabat .algohub .feature .solution .dto . GetSolutionWithGroupIdResponse ;
28+ import com .gamzabat .algohub .feature .solution .enums . ProgressCategory ;
2529import com .gamzabat .algohub .feature .solution .service .SolutionService ;
2630import com .gamzabat .algohub .feature .user .domain .User ;
2731
@@ -41,14 +45,9 @@ public class SolutionController {
4145 @ Operation (summary = "풀이 목록 조회 API" , description = "특정 문제에 대한 풀이를 모두 조회하는 API" )
4246 public ResponseEntity <Page <GetSolutionResponse >> getSolutionList (@ AuthedUser User user ,
4347 @ PathVariable Long problemId ,
44- @ RequestParam (required = false ) String language ,
45- @ RequestParam (required = false ) String result ,
46- @ RequestParam (required = false ) String nickname ,
47- @ RequestParam (defaultValue = "0" ) int page ,
48- @ RequestParam (defaultValue = "20" ) int size ) {
49- Pageable pageable = PageRequest .of (page , size );
50- Page <GetSolutionResponse > response = solutionService .getSolutionList (user , problemId , nickname , language ,
51- result , pageable );
48+ @ ModelAttribute GetSolutionListRequest request ,
49+ @ PageableDefault (size = 20 , sort = "createdAt" , direction = Sort .Direction .DESC ) Pageable pageable ) {
50+ Page <GetSolutionResponse > response = solutionService .getSolutionList (user , problemId ,request ,pageable );
5251 return ResponseEntity .ok ().body (response );
5352 }
5453
@@ -69,69 +68,21 @@ public ResponseEntity<Void> createSolution(@Valid @RequestBody CreateSolutionReq
6968 return ResponseEntity .ok ().build ();
7069 }
7170
72- @ GetMapping ("/groups/{groupId}/my-solutions/in-progress" )
73- @ Operation (summary = "그룹 내 진행 중인 나의 풀이 전체 조회 API" , description = "특정 그룹 내에서 진행 중인 문제에 대해 제출한 나의 풀이 모두 조회하는 API" )
74- public ResponseEntity <Page <GetSolutionResponse >> getMySolutionsInGroupInProgress (@ AuthedUser User user ,
75- @ PathVariable Long groupId ,
76- @ RequestParam (required = false ) Integer problemNumber ,
77- @ RequestParam (required = false ) String language ,
78- @ RequestParam (required = false ) String result ,
79- @ RequestParam (defaultValue = "0" ) int page ,
80- @ RequestParam (defaultValue = "20" ) int size ) {
81- Pageable pageable = PageRequest .of (page , size );
82- Page <GetSolutionResponse > response = solutionService .getMySolutionsInGroupInProgress (user ,
83- groupId , problemNumber , language , result , pageable );
84- return ResponseEntity .ok ().body (response );
85- }
86-
87- @ GetMapping ("/groups/{groupId}/my-solutions/expired" )
88- @ Operation (summary = "그룹 내 마감된 나의 풀이 전체 조회 API" , description = "특정 그룹 내에서 마감한 문제에 대해 제출한 나의 풀이를 모두 조회하는 API" )
89- public ResponseEntity <Page <GetSolutionResponse >> getMySolutionsInGroupExpired (@ AuthedUser User user ,
90- @ PathVariable Long groupId ,
91- @ RequestParam (required = false ) Integer problemNumber ,
92- @ RequestParam (required = false ) String language ,
93- @ RequestParam (required = false ) String result ,
94- @ RequestParam (defaultValue = "0" ) int page ,
95- @ RequestParam (defaultValue = "20" ) int size ) {
96- Pageable pageable = PageRequest .of (page , size );
97- Page <GetSolutionResponse > response = solutionService .getMySolutionsInGroupExpired (user ,
98- groupId , problemNumber , language , result , pageable );
99- return ResponseEntity .ok ().body (response );
100- }
101-
102- @ GetMapping ("/users/my-solutions/in-progress" )
103- @ Operation (summary = "진행 중인 내 풀이 전체 조회 API" , description = "그룹 상관 없이 진행 중인 문제에 대한 나의 풀이 전체를 조회하는 API" )
104- public ResponseEntity <Page <GetSolutionWithGroupIdResponse >> getMySolutionsInProgress (@ AuthedUser User user ,
105- @ RequestParam (required = false ) Integer problemNumber ,
106- @ RequestParam (required = false ) String language ,
107- @ RequestParam (required = false ) String result ,
108- @ RequestParam (defaultValue = "0" ) int page ,
109- @ RequestParam (defaultValue = "20" ) int size ) {
110- Pageable pageable = PageRequest .of (page , size );
111- Page <GetSolutionWithGroupIdResponse > response = solutionService .getMySolutionsInProgress (user ,
112- problemNumber , language , result , pageable );
113- return ResponseEntity .ok ().body (response );
114- }
115-
116- @ GetMapping ("/users/my-solutions/expired" )
117- @ Operation (summary = "마감 된 내 풀이 전체 조회 API" , description = "그룹 상관 없이 나의 풀이 전체를 조회하는 API" )
118- public ResponseEntity <Page <GetSolutionWithGroupIdResponse >> getMySolutions (@ AuthedUser User user ,
119- @ RequestParam (required = false ) Integer problemNumber ,
120- @ RequestParam (required = false ) String language ,
121- @ RequestParam (required = false ) String result ,
122- @ RequestParam (defaultValue = "0" ) int page ,
123- @ RequestParam (defaultValue = "20" ) int size ) {
124- Pageable pageable = PageRequest .of (page , size , Sort .by ("createdAt" ).descending ());
125- Page <GetSolutionWithGroupIdResponse > response = solutionService .getMySolutionsExpired (user ,
126- problemNumber , language , result , pageable );
127- return ResponseEntity .ok ().body (response );
128- }
129-
13071 @ GetMapping ("/groups/{groupId}/solutions/current-status" )
13172 @ Operation (summary = "풀이 현황 테이블 조회 API" , description = "진행 중인 문제들에 대해 풀이 현황 테이블을 조회하는 API" )
13273 public ResponseEntity <List <GetCurrentSolvingStatusResponse >> getCurrentSolvingStatus (@ AuthedUser User user ,
13374 @ PathVariable Long groupId ) {
13475 List <GetCurrentSolvingStatusResponse > response = solutionService .getCurrentSolvingStatuses (user , groupId );
13576 return ResponseEntity .ok ().body (response );
13677 }
78+
79+ @ GetMapping ("/solutions/me" )
80+ @ Operation (summary = "내 풀이 전체 조회" , description = "나의 풀이를 그룹, 문제 번호, 언어, 결과, 상태 등으로 필터링하여 조회하는 API" )
81+ public ResponseEntity <Page <GetSolutionResponse >> getMySolutionList (@ AuthedUser User user ,
82+ @ ModelAttribute GetMySolutionListRequest request ,
83+ @ PageableDefault (size = 20 , sort = "createdAt" , direction = Sort .Direction .DESC ) Pageable pageable ) {
84+ Page <GetSolutionResponse > response = solutionService .getMySolutionList (user , request .groupId (),
85+ request .problemNumber (), request .language (), request .result (), request .status (), request .isIncorrect (), pageable );
86+ return ResponseEntity .ok ().body (response );
87+ }
13788}
0 commit comments