11package com .ai .lawyer .domain .poll .controller ;
22
3- import com .ai .lawyer .domain .poll .dto .PollCreateDto ;
4- import com .ai .lawyer .domain .poll .dto .PollDto ;
5- import com .ai .lawyer .domain .poll .dto .PollStaticsResponseDto ;
6- import com .ai .lawyer .domain .poll .dto .PollVoteDto ;
3+ import com .ai .lawyer .domain .poll .dto .*;
74import com .ai .lawyer .domain .poll .entity .PollVote ;
85import com .ai .lawyer .domain .poll .entity .PollOptions ;
96import com .ai .lawyer .domain .poll .service .PollService ;
107import com .ai .lawyer .domain .post .dto .PostDetailDto ;
118import com .ai .lawyer .domain .post .service .PostService ;
129import com .ai .lawyer .global .response .ApiResponse ;
10+ import com .ai .lawyer .global .util .AuthUtil ;
1311import io .swagger .v3 .oas .annotations .Operation ;
1412import io .swagger .v3 .oas .annotations .tags .Tag ;
1513import lombok .RequiredArgsConstructor ;
14+ import lombok .extern .slf4j .Slf4j ;
1615import org .springframework .http .ResponseEntity ;
1716import org .springframework .security .core .Authentication ;
1817import org .springframework .security .core .context .SecurityContextHolder ;
2625@ RestController
2726@ RequestMapping ("/api/polls" )
2827@ RequiredArgsConstructor
28+ @ Slf4j
2929public class PollController {
3030
3131 private final PollService pollService ;
@@ -34,17 +34,12 @@ public class PollController {
3434 @ Operation (summary = "투표 단일 조회" )
3535 @ GetMapping ("/{pollId}" )
3636 public ResponseEntity <ApiResponse <PollDto >> getPoll (@ PathVariable Long pollId ) {
37- PollDto poll = pollService .getPoll (pollId );
37+ Long memberId = AuthUtil .getCurrentMemberId ();
38+ log .info ("PollController getPoll: memberId={}" , memberId );
39+ PollDto poll = pollService .getPoll (pollId , memberId );
3840 return ResponseEntity .ok (new ApiResponse <>(200 , "투표 단일 조회 성공" , poll ));
3941 }
4042
41- @ Operation (summary = "투표 옵션 목록 조회" )
42- @ GetMapping ("/{pollId}/options" )
43- public ResponseEntity <ApiResponse <List <PollOptions >>> getPollOptions (@ PathVariable Long pollId ) {
44- List <PollOptions > options = pollService .getPollOptions (pollId );
45- return ResponseEntity .ok (new ApiResponse <>(200 , "투표 옵션 목록 조회 성공" , options ));
46- }
47-
4843 @ Operation (summary = "투표하기" )
4944 @ PostMapping ("/{pollId}/vote" )
5045 public ResponseEntity <ApiResponse <PollVoteDto >> vote (@ PathVariable Long pollId , @ RequestParam Long pollItemsId ) {
@@ -68,24 +63,39 @@ public ResponseEntity<ApiResponse<Void>> closePoll(@PathVariable Long pollId) {
6863 return ResponseEntity .ok (new ApiResponse <>(200 , "투표가 종료되었습니다." , null ));
6964 }
7065
66+ @ Operation (summary = "투표 수정" )
67+ @ PutMapping ("/{pollId}" )
68+ public ResponseEntity <ApiResponse <PollDto >> updatePoll (@ PathVariable Long pollId , @ RequestBody PollUpdateDto pollUpdateDto ) {
69+ Long currentMemberId = AuthUtil .getCurrentMemberId ();
70+ PollDto updated = pollService .updatePoll (pollId , pollUpdateDto , currentMemberId );
71+ return ResponseEntity .ok (new ApiResponse <>(200 , "투표가 수정되었습니다." , updated ));
72+ }
73+
7174 @ Operation (summary = "투표 삭제" )
7275 @ DeleteMapping ("/{pollId}" )
7376 public ResponseEntity <ApiResponse <Void >> deletePoll (@ PathVariable Long pollId ) {
77+ Long currentMemberId = AuthUtil .getCurrentMemberId ();
78+ PollDto poll = pollService .getPoll (pollId , currentMemberId );
79+ if (!poll .getPostId ().equals (currentMemberId )) {
80+ return ResponseEntity .status (403 ).body (new ApiResponse <>(403 , "본인만 투표를 삭제할 수 있습니다." , null ));
81+ }
7482 pollService .deletePoll (pollId );
7583 return ResponseEntity .ok (new ApiResponse <>(200 , "투표가 삭제되었습니다." , null ));
7684 }
7785
7886 @ Operation (summary = "진행중인 투표 Top 1 조회" )
7987 @ GetMapping ("/top/ongoing" )
8088 public ResponseEntity <ApiResponse <PollDto >> getTopOngoingPoll () {
81- PollDto poll = pollService .getTopPollByStatus (PollDto .PollStatus .ONGOING );
89+ Long memberId = AuthUtil .getCurrentMemberId ();
90+ PollDto poll = pollService .getTopPollByStatus (PollDto .PollStatus .ONGOING , memberId );
8291 return ResponseEntity .ok (new ApiResponse <>(200 , "진행중인 투표 Top 1 조회 성공" , poll ));
8392 }
8493
8594 @ Operation (summary = "종료된 투표 Top 1 조회" )
8695 @ GetMapping ("/top/closed" )
8796 public ResponseEntity <ApiResponse <PollDto >> getTopClosedPoll () {
88- PollDto poll = pollService .getTopPollByStatus (PollDto .PollStatus .CLOSED );
97+ Long memberId = AuthUtil .getCurrentMemberId ();
98+ PollDto poll = pollService .getTopPollByStatus (PollDto .PollStatus .CLOSED , memberId );
8999 return ResponseEntity .ok (new ApiResponse <>(200 , "종료된 투표 Top 1 조회 성공" , poll ));
90100 }
91101
@@ -112,42 +122,37 @@ public ResponseEntity<ApiResponse<PollDto>> createPoll(@RequestBody PollCreateDt
112122 return ResponseEntity .ok (new ApiResponse <>(201 , "투표가 생성되었습니다." , created ));
113123 }
114124
115- @ Operation (summary = "투표 수정" )
116- @ PutMapping ("/{pollId}" )
117- public ResponseEntity <ApiResponse <PollDto >> updatePoll (@ PathVariable Long pollId , @ RequestBody com .ai .lawyer .domain .poll .dto .PollUpdateDto pollUpdateDto ) {
118- PollDto updated = pollService .updatePoll (pollId , pollUpdateDto );
119- return ResponseEntity .ok (new ApiResponse <>(200 , "투표가 수정되었습니다." , updated ));
120- }
121-
122125 @ Operation (summary = "진행중인 투표 전체 목록 조회" )
123126 @ GetMapping ("/ongoing" )
124127 public ResponseEntity <ApiResponse <List <PollDto >>> getOngoingPolls () {
125- List <PollDto > polls = pollService .getPollsByStatus (PollDto .PollStatus .ONGOING );
128+ Long memberId = AuthUtil .getCurrentMemberId ();
129+ List <PollDto > polls = pollService .getPollsByStatus (PollDto .PollStatus .ONGOING , memberId );
126130 return ResponseEntity .ok (new ApiResponse <>(200 , "진행중인 투표 전체 목록 조회 성공" , polls ));
127131 }
128132
129133 @ Operation (summary = "종료된 투표 전체 목록 조회" )
130134 @ GetMapping ("/closed" )
131135 public ResponseEntity <ApiResponse <List <PollDto >>> getClosedPolls () {
132- List <PollDto > polls = pollService .getPollsByStatus (PollDto .PollStatus .CLOSED );
136+ Long memberId = AuthUtil .getCurrentMemberId ();
137+ List <PollDto > polls = pollService .getPollsByStatus (PollDto .PollStatus .CLOSED , memberId );
133138 return ResponseEntity .ok (new ApiResponse <>(200 , "종료된 투표 전체 목록 조회 성공" , polls ));
134139 }
135140
136- @ Operation (summary = "종료된 투표 Top N 조회" )
137- @ GetMapping ("/top/closed-list" ) //검색조건 : pi/polls/top/closed-list?size=3
138- public ResponseEntity <ApiResponse <List <PollDto >>> getTopClosedPolls (@ RequestParam (defaultValue = "3" ) int size ) {
139- List <PollDto > polls = pollService .getTopNPollsByStatus (PollDto .PollStatus .CLOSED , size );
140- String message = String .format ("종료된 투표 Top %d 조회 성공" , size );
141- return ResponseEntity .ok (new ApiResponse <>(200 , message , polls ));
142- }
143-
144- @ Operation (summary = "진행중인 투표 Top N 조회" )
145- @ GetMapping ("/top/ongoing-list" ) //검색조건 : api/polls/top/ongoing-list?size=3
146- public ResponseEntity <ApiResponse <List <PollDto >>> getTopOngoingPolls (@ RequestParam (defaultValue = "3" ) int size ) {
147- List <PollDto > polls = pollService .getTopNPollsByStatus (PollDto .PollStatus .ONGOING , size );
148- String message = String .format ("진행중인 투표 Top %d 조회 성공" , size );
149- return ResponseEntity .ok (new ApiResponse <>(200 , message , polls ));
150- }
141+ // @Operation(summary = "종료된 투표 Top N 조회")
142+ // @GetMapping("/top/closed-list") //검색조건 : pi/polls/top/closed-list?size=3
143+ // public ResponseEntity<ApiResponse<List<PollDto>>> getTopClosedPolls(@RequestParam(defaultValue = "3") int size) {
144+ // List<PollDto> polls = pollService.getTopNPollsByStatus(PollDto.PollStatus.CLOSED, size);
145+ // String message = String.format("종료된 투표 Top %d 조회 성공", size);
146+ // return ResponseEntity.ok(new ApiResponse<>(200, message, polls));
147+ // }
148+ //
149+ // @Operation(summary = "진행중인 투표 Top N 조회")
150+ // @GetMapping("/top/ongoing-list") //검색조건 : api/polls/top/ongoing-list?size=3
151+ // public ResponseEntity<ApiResponse<List<PollDto>>> getTopOngoingPolls(@RequestParam(defaultValue = "3") int size) {
152+ // List<PollDto> polls = pollService.getTopNPollsByStatus(PollDto.PollStatus.ONGOING, size);
153+ // String message = String.format("진행중인 투표 Top %d 조회 성공", size);
154+ // return ResponseEntity.ok(new ApiResponse<>(200, message, polls));
155+ // }
151156
152157 @ Operation (summary = "index(순번)로 투표하기" )
153158 @ PostMapping ("/{pollId}/voting" )
0 commit comments