Skip to content

Commit 5af21ef

Browse files
authored
♻️refractor: 데이트 코스별 생성 시, searchCond 나오게끔 수정 (#119)
2 parents fae0e55 + fa668d9 commit 5af21ef

File tree

9 files changed

+100
-30
lines changed

9 files changed

+100
-30
lines changed

src/main/java/org/withtime/be/withtimebe/domain/date/controller/query/DateQueryController.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
import org.withtime.be.withtimebe.global.annotation.SwaggerPageable;
2929
import org.withtime.be.withtimebe.global.security.annotation.AuthenticatedMember;
3030

31+
import java.util.List;
32+
3133
@RestController
3234
@RequiredArgsConstructor
3335
@RequestMapping("/api/v1/date-courses")
@@ -63,9 +65,15 @@ public class DateQueryController {
6365
@GetMapping
6466
public DefaultResponse<DateResponseDTO.DateCourseList> findDateCourses(
6567
@PageableDefault(page = 0, size = 10) Pageable pageable,
66-
@ModelAttribute @ParameterObject DateRequestDTO.DateCourseSearchCond dateCourseSearchCond,
68+
@RequestParam(required = false) DatePriceRange datePriceRange,
69+
@RequestParam(required = false) List<String> datePlaces,
70+
@RequestParam(required = false) DateTime dateDurationTime,
71+
@RequestParam(required = false) List<MealType> mealTypes,
72+
@RequestParam(required = false) Transportation transportation,
73+
@RequestParam(required = false) List<String> userPreferredKeywords,
6774
@AuthenticatedMember Member member
6875
) {
76+
DateRequestDTO.DateCourseSearchCond dateCourseSearchCond = DateConverter.createSearchCondFromParam(datePriceRange, datePlaces, dateDurationTime, mealTypes, transportation, userPreferredKeywords);
6977
DateResponseDTO.DateCourseList response = dateQueryService.findDateCourses(dateCourseSearchCond, pageable, member);
7078
return DefaultResponse.ok(response);
7179
}
@@ -98,11 +106,17 @@ public DefaultResponse<DateResponseDTO.DateCourseList> findDateCourses(
98106
@GetMapping("/bookmarks/search")
99107
public DefaultResponse<DateResponseDTO.DateCourseList> findDateCourseBookmark(
100108
@PageableDefault(page = 0, size = 10) Pageable pageable,
101-
@ModelAttribute @ParameterObject DateRequestDTO.DateCourseSearchCond dateCourseSearchCond,
109+
@RequestParam(required = false) DatePriceRange datePriceRange,
110+
@RequestParam(required = false) List<String> datePlaces,
111+
@RequestParam(required = false) DateTime dateDurationTime,
112+
@RequestParam(required = false) List<MealType> mealTypes,
113+
@RequestParam(required = false) Transportation transportation,
114+
@RequestParam(required = false) List<String> userPreferredKeywords,
102115
@AuthenticatedMember Member member
103116
){
117+
DateRequestDTO.DateCourseSearchCond dateCourseSearchCond = DateConverter.createSearchCondFromParam(datePriceRange, datePlaces, dateDurationTime, mealTypes, transportation, userPreferredKeywords);
104118
Page<DateCourse> bookmarkedDateCourses = dateQueryService.findDateCourseBookmarks(dateCourseSearchCond, pageable, member);
105-
DateResponseDTO.DateCourseList response = DateConverter.createDateCourseList(bookmarkedDateCourses, null, dateCourseSearchCond);
119+
DateResponseDTO.DateCourseList response = DateConverter.createDateCourseList(bookmarkedDateCourses, null);
106120
return DefaultResponse.ok(response);
107121
}
108122
}

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

Lines changed: 49 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
import org.withtime.be.withtimebe.domain.date.dto.request.DateRequestDTO;
66
import org.withtime.be.withtimebe.domain.date.dto.response.DateResponseDTO;
77
import org.withtime.be.withtimebe.domain.date.entity.*;
8+
import org.withtime.be.withtimebe.domain.date.entity.enums.DatePriceRange;
9+
import org.withtime.be.withtimebe.domain.date.entity.enums.DateTime;
10+
import org.withtime.be.withtimebe.domain.date.entity.enums.MealType;
11+
import org.withtime.be.withtimebe.domain.date.entity.enums.Transportation;
812
import org.withtime.be.withtimebe.domain.member.entity.Member;
913

1014
import java.time.LocalDateTime;
@@ -34,6 +38,11 @@ public static DateResponseDTO.DateCourseBookmark createDateCourseBookmarkRespons
3438
public static DateCourse createDateCourse(DateRequestDTO.SaveDateCourse dateCourse){
3539
return DateCourse.builder()
3640
.name(dateCourse.name())
41+
.datePriceRange(dateCourse.dateCourseSearchCond().datePriceRange())
42+
.datePlaces(dateCourse.dateCourseSearchCond().datePlaces())
43+
.dateTime(dateCourse.dateCourseSearchCond().dateDurationTime())
44+
.mealTypes(dateCourse.dateCourseSearchCond().mealTypes())
45+
.transportation(dateCourse.dateCourseSearchCond().transportation())
3746
.build();
3847
}
3948

@@ -68,7 +77,7 @@ public static DateResponseDTO.DateCourseSearchCondInfo toDateCourseSearchCondInf
6877
.dateDurationTime(request.dateDurationTime()) // 데이트 소요 시간
6978
.mealTypes(request.mealPlan()) // 식사 계획
7079
.transportation(request.transportation()) // 교통 수단
71-
.userPreferredKeywords(request.userPreferredKeywords()) // 키워드
80+
.dateCoursePlaceCategories(request.userPreferredKeywords()) // 키워드
7281
.build();
7382
}
7483

@@ -132,10 +141,12 @@ public static DateResponseDTO.DatePlace createDatePlace(DatePlace datePlace,
132141

133142
// DateResponseDTO.DateCourse -> DateResponseDTO.DateCourse
134143
public static DateResponseDTO.DateCourse createDateCourse(DateCourse dateCourse,
135-
Set<Long> bookmarkedIds,
136-
DateRequestDTO.DateCourseSearchCond cond){
137-
Boolean bookmarked = null;
138-
if (bookmarkedIds != null && !bookmarkedIds.isEmpty()) bookmarked = bookmarkedIds.contains(dateCourse.getId());
144+
Set<Long> bookmarkedIds){
145+
Boolean bookmarked = (bookmarkedIds == null)? null
146+
: (dateCourse.getId() != null && bookmarkedIds.contains(dateCourse.getId()));
147+
if (dateCourse.getId() != null) System.out.println("test1");
148+
if (bookmarkedIds.contains(dateCourse.getId())) System.out.println("test2");
149+
139150
List<DateResponseDTO.DatePlace> datePlaces = dateCourse.getDatePlaceDateCourses().stream()
140151
.map(dc -> DateConverter.createDatePlace(dc.getDatePlace(), dc.getStartTime(), dc.getEndTime()))
141152
.toList();
@@ -145,28 +156,31 @@ public static DateResponseDTO.DateCourse createDateCourse(DateCourse dateCourse,
145156
.name(dateCourse.getName())
146157
.datePlaces(datePlaces)
147158
.isBookmarked(bookmarked)
148-
.dateCourseSearchCondInfo(createSearchCond(cond))
159+
.dateCourseSearchCondInfo(createSearchCond(dateCourse))
149160
.build();
150161
}
151162

152-
public static DateResponseDTO.DateCourseSearchCondInfo createSearchCond(DateRequestDTO.DateCourseSearchCond cond){
163+
public static DateResponseDTO.DateCourseSearchCondInfo createSearchCond(DateCourse dateCourse){
164+
List<String> dateCoursePlaceCategories = dateCourse.getDateCoursePlaceCategories().stream()
165+
.map(dcpc -> dcpc.getPlaceCategory().getLabel())
166+
.toList();
167+
153168
return DateResponseDTO.DateCourseSearchCondInfo.builder()
154-
.budget(cond.datePriceRange())
155-
.datePlaces(cond.datePlaces())
156-
.mealTypes(cond.mealTypes())
157-
.transportation(cond.transportation())
158-
.dateDurationTime(cond.dateDurationTime())
159-
.userPreferredKeywords(cond.userPreferredKeywords())
169+
.budget(dateCourse.getDatePriceRange())
170+
.datePlaces(dateCourse.getDatePlaces())
171+
.mealTypes(dateCourse.getMealTypes())
172+
.transportation(dateCourse.getTransportation())
173+
.dateDurationTime(dateCourse.getDateTime())
174+
.dateCoursePlaceCategories(dateCoursePlaceCategories)
160175
.build();
161176
}
162177

163178
// Page<DateCourse> -> DateRequestDTO.DateCourseList
164-
public static DateResponseDTO.DateCourseList createDateCourseList(Page<DateCourse> dateCourses, Set<Long> bookmarkedIds,
165-
DateRequestDTO.DateCourseSearchCond cond){
179+
public static DateResponseDTO.DateCourseList createDateCourseList(Page<DateCourse> dateCourses, Set<Long> bookmarkedIds){
166180
List<DateResponseDTO.DateCourse> dateCourseList = dateCourses.stream()
167181
.map(dc ->{
168-
if (bookmarkedIds != null) return createDateCourse(dc, bookmarkedIds, cond);
169-
return createDateCourse(dc, Collections.emptySet(), cond);
182+
if (bookmarkedIds != null) return createDateCourse(dc, bookmarkedIds);
183+
return createDateCourse(dc, Collections.emptySet());
170184
})
171185
.toList();
172186

@@ -192,4 +206,22 @@ public static DateResponseDTO.SignatureDish toSignatureDish(Item item) {
192206
.build();
193207
}
194208

209+
public static DateRequestDTO.DateCourseSearchCond createSearchCondFromParam(
210+
DatePriceRange datePriceRange,
211+
List<String> datePlaces,
212+
DateTime dateDurationTime,
213+
List<MealType> mealTypes,
214+
Transportation transportation,
215+
List<String> userPreferredKeywords
216+
){
217+
return DateRequestDTO.DateCourseSearchCond.builder()
218+
.datePriceRange(datePriceRange)
219+
.datePlaces(datePlaces)
220+
.dateDurationTime(dateDurationTime)
221+
.mealTypes(mealTypes)
222+
.transportation(transportation)
223+
.userPreferredKeywords(userPreferredKeywords)
224+
.build();
225+
}
226+
195227
}

src/main/java/org/withtime/be/withtimebe/domain/date/dto/request/DateRequestDTO.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import jakarta.validation.constraints.NotNull;
77
import jakarta.validation.constraints.Pattern;
88
import jakarta.validation.constraints.Size;
9+
import lombok.Builder;
910
import org.withtime.be.withtimebe.domain.date.entity.enums.DatePriceRange;
1011
import org.withtime.be.withtimebe.domain.date.entity.enums.DateTime;
1112
import org.withtime.be.withtimebe.domain.date.entity.enums.MealType;
@@ -60,9 +61,11 @@ public record CreateDateCourse(
6061

6162
public record SaveDateCourse(
6263
List<Long> datePlaceIds,
63-
String name
64+
String name,
65+
DateCourseSearchCond dateCourseSearchCond
6466
){}
6567

68+
@Builder
6669
public record DateCourseSearchCond(
6770
DatePriceRange datePriceRange,
6871
List<String> datePlaces,

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
import lombok.Builder;
44
import org.withtime.be.withtimebe.domain.date.entity.enums.*;
55

6-
import java.time.LocalDate;
7-
import java.time.LocalDateTime;
86
import java.time.LocalTime;
97
import java.util.List;
108

@@ -69,7 +67,7 @@ public record DateCourseSearchCondInfo(
6967
DateTime dateDurationTime,
7068
List<MealType> mealTypes,
7169
Transportation transportation,
72-
List<String> userPreferredKeywords
70+
List<String> dateCoursePlaceCategories
7371
){}
7472

7573
@Builder

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public class DateCourse extends BaseEntity {
5959

6060
@Builder.Default
6161
@OneToMany(mappedBy = "dateCourse", cascade = CascadeType.ALL, orphanRemoval = true)
62-
private List<DateCoursePlaceCategory> DateCoursePlaceCategory = new ArrayList<>();
62+
private List<DateCoursePlaceCategory> dateCoursePlaceCategories = new ArrayList<>();
6363

6464
@Builder.Default
6565
@OneToMany(mappedBy = "dateCourse", cascade = CascadeType.ALL, orphanRemoval = true)
@@ -73,4 +73,14 @@ public void addDatePlaceDateCourses(List<DatePlaceDateCourse> datePlaceDateCours
7373
}
7474
datePlaceDateCourses.addAll(datePlaceDateCourseList);
7575
}
76+
77+
public void addDateCoursePlaceCategory(List<DateCoursePlaceCategory> dateCoursePlaceCategoryList) {
78+
if (dateCoursePlaceCategoryList == null || dateCoursePlaceCategoryList.isEmpty()) return;
79+
for (DateCoursePlaceCategory dateCoursePlaceCategory : dateCoursePlaceCategoryList) {
80+
dateCoursePlaceCategory.setDateCourse(this);
81+
}
82+
dateCoursePlaceCategories.addAll(dateCoursePlaceCategoryList);
83+
}
84+
85+
7686
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public class DateCoursePlaceCategory {
1818

1919
@ManyToOne(fetch = FetchType.LAZY)
2020
@JoinColumn(name = "date_course_id", nullable = false)
21+
@Setter
2122
private DateCourse dateCourse;
2223

2324
@ManyToOne(fetch = FetchType.LAZY)

src/main/java/org/withtime/be/withtimebe/domain/date/repository/PlaceCategoryRepository.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,9 @@
33
import org.springframework.data.jpa.repository.JpaRepository;
44
import org.withtime.be.withtimebe.domain.date.entity.PlaceCategory;
55

6+
import java.util.Collection;
7+
import java.util.List;
8+
69
public interface PlaceCategoryRepository extends JpaRepository<PlaceCategory, Long> {
10+
List<PlaceCategory> findAllByLabelIn(List<String> labels);
711
}

src/main/java/org/withtime/be/withtimebe/domain/date/service/command/DateCommandServiceImpl.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@
55
import org.springframework.transaction.annotation.Transactional;
66
import org.withtime.be.withtimebe.domain.date.converter.DateConverter;
77
import org.withtime.be.withtimebe.domain.date.dto.request.DateRequestDTO;
8-
import org.withtime.be.withtimebe.domain.date.entity.DateCourse;
9-
import org.withtime.be.withtimebe.domain.date.entity.DateCourseBookmark;
10-
import org.withtime.be.withtimebe.domain.date.entity.DatePlace;
11-
import org.withtime.be.withtimebe.domain.date.entity.DatePlaceDateCourse;
8+
import org.withtime.be.withtimebe.domain.date.entity.*;
129
import org.withtime.be.withtimebe.domain.date.entity.enums.BudgetLevel;
1310
import org.withtime.be.withtimebe.domain.date.entity.enums.KeywordForBudget;
1411
import org.withtime.be.withtimebe.domain.date.entity.enums.MealType;
@@ -18,6 +15,7 @@
1815
import org.withtime.be.withtimebe.domain.date.repository.DateCourseBookmarkRepository;
1916
import org.withtime.be.withtimebe.domain.date.repository.DateCourseRepository;
2017
import org.withtime.be.withtimebe.domain.date.repository.DatePlaceRepository;
18+
import org.withtime.be.withtimebe.domain.date.repository.PlaceCategoryRepository;
2119
import org.withtime.be.withtimebe.domain.date.service.command.dto.RecommendedCourseResult;
2220
import org.withtime.be.withtimebe.domain.member.annotation.GetPoint;
2321
import org.withtime.be.withtimebe.domain.member.annotation.enums.PointAction;
@@ -38,6 +36,7 @@ public class DateCommandServiceImpl implements DateCommandService{
3836
private final DateCourseBookmarkRepository dateCourseBookmarkRepository;
3937
private final DateCourseRepository dateCourseRepository;
4038
private final DatePlaceRepository datePlaceRepository;
39+
private final PlaceCategoryRepository placeCategoryRepository;
4140

4241
/** 단일 코스 생성 (저장/북마크/attemptCount 없음, excludedCourseSignatures로 중복 제외) */
4342
@Transactional(readOnly = true)
@@ -296,10 +295,19 @@ public DateCourseBookmark createDateCourseBookmarkWithGeneratedCourse(
296295
){
297296
DateCourse dateCourse = DateConverter.createDateCourse(request);
298297
List<DatePlace> datePlaces = datePlaceRepository.findAllById(request.datePlaceIds());
298+
List<PlaceCategory> placeCategories = placeCategoryRepository.findAllByLabelIn(request.dateCourseSearchCond().userPreferredKeywords());
299+
299300
List<DatePlaceDateCourse> datePlaceDateCourses = datePlaces.stream()
300301
.map(datePlace -> DatePlaceDateCourse.builder().datePlace(datePlace).build())
301302
.toList();
302303
dateCourse.addDatePlaceDateCourses(datePlaceDateCourses);
304+
305+
List<DateCoursePlaceCategory> dateCoursePlaceCategories = placeCategories.stream()
306+
.map(dcpc -> DateCoursePlaceCategory.builder()
307+
.placeCategory(dcpc)
308+
.build())
309+
.toList();
310+
dateCourse.addDateCoursePlaceCategory(dateCoursePlaceCategories);
303311
dateCourseRepository.save(dateCourse);
304312

305313
DateCourseBookmark dateCourseBookmark = DateConverter.createDateCourseBookmark(dateCourse, member);

src/main/java/org/withtime/be/withtimebe/domain/date/service/query/DateQueryServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public DateResponseDTO.DateCourseList findDateCourses(DateRequestDTO.DateCourseS
3737
? new HashSet<>(dateCourseBookmarkRepository.findBookmarkedCourseIds(member.getId(), ids))
3838
: java.util.Collections.emptySet();
3939

40-
return DateConverter.createDateCourseList(dateCourses, bookmarkedIds, dateCourseSearchCond);
40+
return DateConverter.createDateCourseList(dateCourses, bookmarkedIds);
4141
}
4242

4343
@LogPlaceCategory

0 commit comments

Comments
 (0)