Skip to content

Commit cb6630c

Browse files
committed
feat: TransportRoute 객체 JSON 변환
1 parent 97d1c56 commit cb6630c

2 files changed

Lines changed: 61 additions & 3 deletions

File tree

src/main/java/com/back/web7_9_codecrete_be/domain/plans/entity/Schedule.java

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.back.web7_9_codecrete_be.domain.plans.entity;
22

3+
import com.back.web7_9_codecrete_be.domain.plans.dto.TransportRoute;
4+
import com.fasterxml.jackson.core.JsonProcessingException;
5+
import com.fasterxml.jackson.databind.ObjectMapper;
36
import jakarta.persistence.*;
47
import lombok.*;
58
import org.hibernate.annotations.CreationTimestamp;
@@ -74,6 +77,10 @@ public class Schedule {
7477
@Column(name = "transport_type")
7578
private TransportType transportType;
7679

80+
// 교통 경로 상세 정보 (JSON 형태로 저장)
81+
@Column(name = "transport_route", columnDefinition = "TEXT")
82+
private String transportRoute;
83+
7784
@CreationTimestamp
7885
@Column(name = "created_date", nullable = false, updatable = false)
7986
private LocalDateTime createdDate;
@@ -100,7 +107,7 @@ public Schedule(Plan plan, ScheduleType scheduleType, String title,
100107
Double startPlaceLat, Double startPlaceLon,
101108
Double endPlaceLat, Double endPlaceLon,
102109
Integer distance, TransportType transportType,
103-
Boolean isMainEvent) {
110+
String transportRoute, Boolean isMainEvent) {
104111
this.plan = plan;
105112
this.scheduleType = scheduleType;
106113
this.title = title;
@@ -117,6 +124,7 @@ public Schedule(Plan plan, ScheduleType scheduleType, String title,
117124
this.endPlaceLon = endPlaceLon;
118125
this.distance = distance;
119126
this.transportType = transportType;
127+
this.transportRoute = transportRoute;
120128
this.isMainEvent = isMainEvent != null ? isMainEvent : false;
121129
}
122130

@@ -126,7 +134,8 @@ public void update(ScheduleType scheduleType, String title,
126134
Integer estimatedCost, String details,
127135
Double startPlaceLat, Double startPlaceLon,
128136
Double endPlaceLat, Double endPlaceLon,
129-
Integer distance, TransportType transportType) {
137+
Integer distance, TransportType transportType,
138+
String transportRoute) {
130139
this.scheduleType = scheduleType;
131140
this.title = title;
132141
this.startAt = startAt;
@@ -142,6 +151,38 @@ public void update(ScheduleType scheduleType, String title,
142151
this.endPlaceLon = endPlaceLon;
143152
this.distance = distance;
144153
this.transportType = transportType;
154+
this.transportRoute = transportRoute;
155+
}
156+
157+
/**
158+
* TransportRoute 객체를 JSON 문자열로 변환하여 저장
159+
*/
160+
public void setTransportRoute(TransportRoute transportRoute) {
161+
if (transportRoute == null) {
162+
this.transportRoute = null;
163+
return;
164+
}
165+
try {
166+
ObjectMapper objectMapper = new ObjectMapper();
167+
this.transportRoute = objectMapper.writeValueAsString(transportRoute);
168+
} catch (JsonProcessingException e) {
169+
throw new RuntimeException("Failed to serialize transportRoute", e);
170+
}
171+
}
172+
173+
/**
174+
* JSON 문자열을 TransportRoute 객체로 변환하여 반환
175+
*/
176+
public TransportRoute getTransportRouteAsObject() {
177+
if (transportRoute == null || transportRoute.isEmpty()) {
178+
return null;
179+
}
180+
try {
181+
ObjectMapper objectMapper = new ObjectMapper();
182+
return objectMapper.readValue(transportRoute, TransportRoute.class);
183+
} catch (JsonProcessingException e) {
184+
throw new RuntimeException("Failed to deserialize transportRoute", e);
185+
}
145186
}
146187

147188
public enum ScheduleType {

src/main/java/com/back/web7_9_codecrete_be/domain/plans/service/PlanService.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ private PlanDetailResponse buildPlanDetailResponse(Plan plan) {
163163
.endPlaceLon(item.getEndPlaceLon())
164164
.distance(item.getDistance())
165165
.transportType(item.getTransportType())
166+
.transportRoute(item.getTransportRouteAsObject())
166167
.isMainEvent(item.getIsMainEvent())
167168
.createdDate(item.getCreatedDate())
168169
.modifiedDate(item.getModifiedDate());
@@ -293,6 +294,11 @@ public ScheduleResponse addSchedule(Long planId, User user, ScheduleAddRequest r
293294
.transportType(request.getTransportType())
294295
.build();
295296

297+
// transportRoute 설정 (JSON 문자열로 변환)
298+
if (request.getTransportRoute() != null) {
299+
schedule.setTransportRoute(request.getTransportRoute());
300+
}
301+
296302
plan.addSchedule(schedule);
297303
// cascade 설정으로 인해 plan 저장 시 schedule도 함께 저장됨
298304
planRepository.save(plan);
@@ -661,6 +667,15 @@ private void validateScheduleUpdate(ScheduleUpdateRequest request, Schedule sche
661667
*/
662668
private void updateScheduleFields(Schedule schedule, ScheduleUpdateRequest request,
663669
Schedule.ScheduleType newScheduleType) {
670+
// transportRoute는 별도로 처리 (null이 아닌 경우에만 업데이트)
671+
String transportRouteJson = null;
672+
if (request.getTransportRoute() != null) {
673+
schedule.setTransportRoute(request.getTransportRoute());
674+
transportRouteJson = schedule.getTransportRoute(); // 변환된 JSON 문자열 가져오기
675+
} else {
676+
transportRouteJson = schedule.getTransportRoute(); // 기존 값 유지
677+
}
678+
664679
schedule.update(
665680
newScheduleType,
666681
request.getTitle() != null ? request.getTitle() : schedule.getTitle(),
@@ -676,7 +691,8 @@ private void updateScheduleFields(Schedule schedule, ScheduleUpdateRequest reque
676691
request.getEndPlaceLat() != null ? request.getEndPlaceLat() : schedule.getEndPlaceLat(),
677692
request.getEndPlaceLon() != null ? request.getEndPlaceLon() : schedule.getEndPlaceLon(),
678693
request.getDistance() != null ? request.getDistance() : schedule.getDistance(),
679-
request.getTransportType() != null ? request.getTransportType() : schedule.getTransportType()
694+
request.getTransportType() != null ? request.getTransportType() : schedule.getTransportType(),
695+
transportRouteJson
680696
);
681697
}
682698

@@ -787,6 +803,7 @@ private ScheduleResponse toScheduleResponse(Schedule schedule) {
787803
.endPlaceLon(schedule.getEndPlaceLon())
788804
.distance(schedule.getDistance())
789805
.transportType(schedule.getTransportType())
806+
.transportRoute(schedule.getTransportRouteAsObject())
790807
.isMainEvent(schedule.getIsMainEvent())
791808
.createdDate(schedule.getCreatedDate())
792809
.modifiedDate(schedule.getModifiedDate());

0 commit comments

Comments
 (0)