11package org .withtime .be .withtimebe .domain .date .converter ;
22
3+ import lombok .Builder ;
34import org .springframework .data .domain .Page ;
45import org .withtime .be .withtimebe .domain .date .dto .request .DateRequestDTO ;
56import org .withtime .be .withtimebe .domain .date .dto .response .DateResponseDTO ;
6- import org .withtime .be .withtimebe .domain .date .entity .DateCourse ;
7- import org .withtime .be .withtimebe .domain .date .entity .DateCourseBookmark ;
8- import org .withtime .be .withtimebe .domain .date .entity .DatePlace ;
9- import org .withtime .be .withtimebe .domain .date .entity .DatePlaceDateCourse ;
7+ import org .withtime .be .withtimebe .domain .date .entity .*;
108import org .withtime .be .withtimebe .domain .member .entity .Member ;
119
10+ import java .time .LocalDate ;
1211import java .time .LocalDateTime ;
12+ import java .time .LocalTime ;
1313import java .util .Collections ;
1414import java .util .List ;
1515import java .util .Set ;
@@ -40,22 +40,48 @@ public static DateCourse createDateCourse(DateRequestDTO.SaveDateCourse dateCour
4040
4141 // List<DatePlace> -> DateResponseDTO.DateCourseInfo
4242 // 단일 추천 코스를 응답으로 구성(시그니처 포함)
43- public static DateResponseDTO .DateCourse createDateCourseInfo (List <DatePlace > datePlaces , String signature ){
43+ public static DateResponseDTO .DateCourse createDateCourseInfo (List <DatePlace > datePlaces , String signature , DateRequestDTO .CreateDateCourse request ){
44+
4445 List <DateResponseDTO .DatePlace > datePlaceDtos = datePlaces .stream ()
45- .map (dp -> DateConverter .createDatePlace (dp , null , null ))
46+ .map (dp -> {
47+ LocalDateTime startTime = request .startTime ();
48+
49+ int index = datePlaces .indexOf (dp );
50+ LocalDateTime thisStartTime = startTime .plusMinutes (90L * index );
51+ LocalDateTime endTime = thisStartTime .plusMinutes (90 );
52+
53+ return DateConverter .createDatePlace (dp , thisStartTime , endTime );
54+ })
4655 .toList ();
4756
4857 return DateResponseDTO .DateCourse .builder ()
4958 .name (LocalDateTime .now ().toLocalDate ().toString ())
5059 .datePlaces (datePlaceDtos )
60+ .dateCourseSearchCondInfo (toDateCourseSearchCondInfo (request ))
5161 .signature (signature ) // ← 추가
5262 .build ();
5363 }
5464
65+ public static DateResponseDTO .DateCourseSearchCondInfo toDateCourseSearchCondInfo (DateRequestDTO .CreateDateCourse request ) {
66+ return DateResponseDTO .DateCourseSearchCondInfo .builder ()
67+ .budget (request .budget ()) // 예산 구간
68+ .datePlaces (request .datePlaces ()) // 선택한 장소 리스트
69+ .dateDurationTime (request .dateDurationTime ()) // 데이트 소요 시간
70+ .mealTypes (request .mealPlan ()) // 식사 계획
71+ .transportation (request .transportation ()) // 교통 수단
72+ .userPreferredKeywords (request .userPreferredKeywords ()) // 키워드
73+ .build ();
74+ }
75+
5576 // DatePlace -> DateResponseDTO.DatePlace
5677 public static DateResponseDTO .DatePlace createDatePlace (DatePlace datePlace ,
57- LocalDateTime startTime ,
58- LocalDateTime endTime ) {
78+ LocalTime startTime ,
79+ LocalTime endTime ) {
80+ Item item = null ;
81+ if (!datePlace .getItems ().isEmpty ()) {
82+ item = datePlace .getItems ().get (0 );
83+ }
84+
5985 return DateResponseDTO .DatePlace .builder ()
6086 .datePlaceId (datePlace .getId ())
6187 .name (datePlace .getName ())
@@ -70,6 +96,28 @@ public static DateResponseDTO.DatePlace createDatePlace(DatePlace datePlace,
7096 .placeType (datePlace .getPlaceType ())
7197 .startTime (startTime )
7298 .endTime (endTime )
99+ .signatureDish (toSignatureDish (item ))
100+ .build ();
101+ }
102+
103+ public static DateResponseDTO .DatePlace createDatePlace (DatePlace datePlace ,
104+ LocalDateTime startTime ,
105+ LocalDateTime endTime ) {
106+ return DateResponseDTO .DatePlace .builder ()
107+ .datePlaceId (datePlace .getId ())
108+ .name (datePlace .getName ())
109+ .image (datePlace .getImage ())
110+ .tel (datePlace .getTel ())
111+ .averagePrice (datePlace .getAveragePrice ())
112+ .information (datePlace .getInformation ())
113+ .latitude (datePlace .getLatitude ())
114+ .longitude (datePlace .getLongitude ())
115+ .roadNameAddress (datePlace .getRoadNameAddress ())
116+ .lotNumberAddress (datePlace .getLotNumberAddress ())
117+ .placeType (datePlace .getPlaceType ())
118+ .startTime (LocalTime .from (startTime ))
119+ .endTime (LocalTime .from (endTime ))
120+ .signatureDish (toSignatureDish (datePlace .getItems ().isEmpty () ? null : datePlace .getItems ().get (0 )))
73121 .build ();
74122 }
75123
@@ -122,4 +170,16 @@ public static DateResponseDTO.DateCourseList createDateCourseList(Page<DateCours
122170 .build ();
123171 }
124172
173+ @ Builder
174+ public static DateResponseDTO .SignatureDish toSignatureDish (Item item ) {
175+ if (item == null ) return null ;
176+
177+ return DateResponseDTO .SignatureDish .builder ()
178+ .ItemId (item .getId ())
179+ .imageUrl (item .getImage ())
180+ .price (item .getPrice ())
181+ .name (item .getName ())
182+ .build ();
183+ }
184+
125185}
0 commit comments