11package swyp .mingling .domain .meeting .controller ;
22
3- import io .swagger .v3 .oas .annotations .Parameter ;
43import io .swagger .v3 .oas .annotations .tags .Tag ;
5- import jakarta .servlet .http .HttpServletRequest ;
64import jakarta .servlet .http .HttpSession ;
75import jakarta .validation .Valid ;
8- import java .util .List ;
9- import java .util .UUID ;
106import lombok .RequiredArgsConstructor ;
117import lombok .extern .slf4j .Slf4j ;
12- import org .springframework .web .bind .annotation .GetMapping ;
13- import org .springframework .web .bind .annotation .PatchMapping ;
14- import org .springframework .web .bind .annotation .PathVariable ;
15- import org .springframework .web .bind .annotation .PostMapping ;
16- import org .springframework .web .bind .annotation .RequestBody ;
17- import org .springframework .web .bind .annotation .RequestMapping ;
18- import org .springframework .web .bind .annotation .RequestParam ;
19- import org .springframework .web .bind .annotation .RestController ;
20- import org .springframework .web .bind .annotation .SessionAttribute ;
8+ import org .springframework .web .bind .annotation .*;
219import swyp .mingling .domain .meeting .dto .request .CreateDepartureRequest ;
2210import swyp .mingling .domain .meeting .dto .request .CreateMeetingRequest ;
2311import swyp .mingling .domain .meeting .dto .request .UpdateDepartureRequest ;
24- import swyp .mingling .domain .meeting .dto .response .CreateDepartureResponse ;
25- import swyp .mingling .domain .meeting .dto .response .CreateMeetingResponse ;
26- import swyp .mingling .domain .meeting .dto .response .GetMeetingStatusResponse ;
27- import swyp .mingling .domain .meeting .dto .response .GetMidpointResponse ;
28- import swyp .mingling .domain .meeting .dto .response .RecommendResponse ;
29- import swyp .mingling .domain .meeting .dto .response .ResultMeetingResponse ;
30- import swyp .mingling .domain .meeting .dto .response .UpdateDepartureResponse ;
31- import swyp .mingling .domain .meeting .service .CreateDepartureUseCase ;
32- import swyp .mingling .domain .meeting .service .CreateMeetingUseCase ;
33- import swyp .mingling .domain .meeting .service .GetMeetingStatusUseCase ;
34- import swyp .mingling .domain .meeting .service .ResultMeetingUseCase ;
35- import swyp .mingling .domain .meeting .service .UpdateDepartureUseCase ;
12+ import swyp .mingling .domain .meeting .dto .response .*;
13+ import swyp .mingling .domain .meeting .dto .response .midpoint .GetMidPointResponse ;
14+ import swyp .mingling .domain .meeting .service .*;
3615import swyp .mingling .global .documentation .MeetingApiDocumentation ;
3716import swyp .mingling .global .response .ApiResponse ;
3817
18+ import java .util .List ;
19+ import java .util .UUID ;
20+
3921/**
4022 * 모임 관련 API 컨트롤러
4123 */
@@ -50,7 +32,10 @@ public class MeetingController {
5032 private final ResultMeetingUseCase resultMeetingUseCase ;
5133 private final CreateDepartureUseCase createDepartureUseCase ;
5234 private final UpdateDepartureUseCase updateDepartureUseCase ;
35+ private final DeleteDepartureUseCase deleteDepartureUseCase ;
5336 private final GetMeetingStatusUseCase getMeetingStatusUseCase ;
37+ private final RecommendPlaceUseCase recommendPlaceUseCase ;
38+ private final MidPointAsyncUseCase midPointAsyncUseCase ;
5439
5540 /**
5641 * 모임 생성 API
@@ -67,32 +52,19 @@ public ApiResponse<CreateMeetingResponse> createMeeting(
6752 }
6853
6954 /**
70- * 중간지점 조회 API
55+ * 중간지점 조회 API (동기 버전)
7156 *
7257 * @param meetingId 모임 식별자 (UUID)
7358 * @return 중간지점 번화가 및 추천 장소 목록
7459 */
7560 @ MeetingApiDocumentation .GetMidpointDoc
7661 @ GetMapping ("/{meetingId}/midpoint" )
77- public ApiResponse <GetMidpointResponse > getMidpoint (@ PathVariable ("meetingId" ) UUID meetingId ,
78- @ Parameter (hidden = true )
79- @ SessionAttribute (value = "userName" ) String userName ) {
80- // TODO: 실제 로직 구현 필요
81- // 1. meetingId로 모임 존재 여부 확인
82- // 2. name + meetingId로 기존 참여자 조회(확인필요)
83- // 3. 중간 지점 이름과 위도 경도, 로그인한 참여자의 출발 위치부터 중간지점 까지의 경로 전달
84-
85- List <GetMidpointResponse .MidpointDto > mockMidpoints = List .of (
86- new GetMidpointResponse .MidpointDto ("합정역" , 37.5484757 , 126.912071 , 30 , "2호선 > 6호선" ),
87- new GetMidpointResponse .MidpointDto ("서울역" , 37.554648 , 126.972559 , 35 , "1호선 > 4호선" ),
88- new GetMidpointResponse .MidpointDto ("용산역" , 37.529844 , 126.964804 , 32 , "경의중앙선 > 1호선" )
89- );
62+ public ApiResponse <Object > getMidpoint (@ PathVariable ("meetingId" ) UUID meetingId ) {
9063
64+ List <GetMidPointResponse > execute = midPointAsyncUseCase .execute (meetingId );
9165
9266
93- GetMidpointResponse response = new GetMidpointResponse (mockMidpoints );
94-
95- return ApiResponse .success (response );
67+ return ApiResponse .success (execute );
9668 }
9769
9870 /**
@@ -102,7 +74,7 @@ public ApiResponse<GetMidpointResponse> getMidpoint(@PathVariable("meetingId") U
10274 * @return 생성된 모임 URL 응답
10375 */
10476 @ MeetingApiDocumentation .ResultMeetingDoc
105- @ GetMapping ("/{meetingId}/result " )
77+ @ GetMapping ("/result/ {meetingId}" )
10678 public ApiResponse <ResultMeetingResponse > resultMeeting (@ PathVariable ("meetingId" ) String meetingId ) {
10779 ResultMeetingResponse response = resultMeetingUseCase .getResultMeetingUrl (meetingId );
10880 return ApiResponse .success (response );
@@ -114,20 +86,19 @@ public ApiResponse<ResultMeetingResponse> resultMeeting(@PathVariable("meetingId
11486 * @param meetingId 모임 UUID
11587 * @param midPlace 중간 지점 장소 (query param)
11688 * @param category 모임 목적 (query param)
89+ * @param page 조회할 페이지 번호 (1부터 시작)
90+ * @param size 조회할 개수 (기본값 10)
11791 * @return 장소 추천 장소들 목록
11892 */
11993 @ MeetingApiDocumentation .GetRecommendDoc
12094 @ GetMapping ("/{meetingId}/recommend" )
121- public ApiResponse <List <RecommendResponse >> getRecommend (@ PathVariable ("meetingId" ) UUID meetingId ,
122- @ RequestParam String midPlace ,
123- @ RequestParam String category ) {
124-
125- List <RecommendResponse > recommendResponses = List .of (
126- new RecommendResponse ("카페1" , "서울 동작구 동작대로..." ),
127- new RecommendResponse ("카페2" , "서울 서초구 방배천로..." )
128- );
129-
130- return ApiResponse .success (recommendResponses );
95+ public ApiResponse <RecommendResponse > getRecommend (@ PathVariable ("meetingId" ) UUID meetingId ,
96+ @ RequestParam String midPlace ,
97+ @ RequestParam String category ,
98+ @ RequestParam (defaultValue = "1" ) int page ,
99+ @ RequestParam (defaultValue = "15" ) int size ) {
100+ RecommendResponse response = recommendPlaceUseCase .execute (midPlace , category , page , size );
101+ return ApiResponse .success (response );
131102 }
132103
133104 /**
@@ -186,5 +157,25 @@ public ApiResponse<UpdateDepartureResponse> updateDeparture(
186157 return ApiResponse .success (response );
187158
188159 }
160+
161+ /**
162+ * 출발역 삭제 API
163+ *
164+ * @return 사용자 닉네임
165+ */
166+ @ MeetingApiDocumentation .DeleteDepartDoc
167+ @ DeleteMapping ("/{meetingId}/departure" )
168+ public ApiResponse <String > updateDeparture (
169+ @ PathVariable ("meetingId" ) UUID meetingId ,
170+ HttpSession session ) {
171+
172+ //세션에서 nickname 가져오기
173+ String nickname = (String ) session .getAttribute (String .valueOf (meetingId ));
174+
175+ String deletedNickname = deleteDepartureUseCase .execute (meetingId , nickname );
176+
177+ return ApiResponse .success (deletedNickname );
178+
179+ }
189180}
190181
0 commit comments