Skip to content

Commit d5ec488

Browse files
committed
🐛 fix: 데이트 코스 null 값 리
1 parent 8a6049f commit d5ec488

File tree

4 files changed

+88
-11
lines changed

4 files changed

+88
-11
lines changed

src/main/java/org/withtime/be/withtimebe/domain/date/controller/command/DateCommandController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public DefaultResponse<DateResponseDTO.DateCourse> createDateCourse(
3434
@RequestBody DateRequestDTO.CreateDateCourse request
3535
){
3636
RecommendedCourseResult datePlaces = dateCommandService.createDateCourse(request);
37-
DateResponseDTO.DateCourse dateCourse = DateConverter.createDateCourseInfo(datePlaces.places(), datePlaces.signature());
37+
DateResponseDTO.DateCourse dateCourse = DateConverter.createDateCourseInfo(datePlaces.places(), datePlaces.signature(), request);
3838
return DefaultResponse.created(dateCourse);
3939
}
4040

src/main/java/org/withtime/be/withtimebe/domain/date/converter/DateConverter.java

Lines changed: 68 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
package org.withtime.be.withtimebe.domain.date.converter;
22

3+
import lombok.Builder;
34
import org.springframework.data.domain.Page;
45
import org.withtime.be.withtimebe.domain.date.dto.request.DateRequestDTO;
56
import 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.*;
108
import org.withtime.be.withtimebe.domain.member.entity.Member;
119

10+
import java.time.LocalDate;
1211
import java.time.LocalDateTime;
12+
import java.time.LocalTime;
1313
import java.util.Collections;
1414
import java.util.List;
1515
import 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
}

src/main/java/org/withtime/be/withtimebe/domain/date/dto/response/DateResponseDTO.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import lombok.Builder;
44
import org.withtime.be.withtimebe.domain.date.entity.enums.*;
55

6+
import java.time.LocalDate;
67
import java.time.LocalDateTime;
8+
import java.time.LocalTime;
79
import java.util.List;
810

911
public record DateResponseDTO() {
@@ -26,8 +28,9 @@ public record DatePlace(
2628
String roadNameAddress,
2729
String lotNumberAddress,
2830
PlaceType placeType,
29-
LocalDateTime startTime,
30-
LocalDateTime endTime
31+
LocalTime startTime,
32+
LocalTime endTime,
33+
SignatureDish signatureDish
3134
){}
3235

3336
@Builder
@@ -58,4 +61,12 @@ public record DateCourseSearchCondInfo(
5861
Transportation transportation,
5962
List<String> userPreferredKeywords
6063
){}
64+
65+
@Builder
66+
public record SignatureDish(
67+
Long ItemId,
68+
String imageUrl,
69+
String name,
70+
String price
71+
){}
6172
}

src/main/java/org/withtime/be/withtimebe/domain/date/entity/DatePlace.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,10 @@ public class DatePlace extends BaseEntity {
5454

5555
@OneToMany(mappedBy = "datePlace", cascade = CascadeType.ALL)
5656
private List<DatePlacePlaceCategory> placeCategories;
57+
58+
@OneToMany(mappedBy = "datePlace", cascade = CascadeType.ALL)
59+
private List<Item> items;
60+
61+
@OneToMany(mappedBy = "datePlace", cascade = CascadeType.ALL)
62+
private List<BusinessTime> businessTimes;
5763
}

0 commit comments

Comments
 (0)