22
33import com .example .triptalk .domain .tripPlan .converter .TripPlanConverter ;
44import com .example .triptalk .domain .tripPlan .dto .TripPlanResponse ;
5- import com .example .triptalk .domain .tripPlan .entity .TripPlan ;
5+ import com .example .triptalk .domain .tripPlan .entity .* ;
66import com .example .triptalk .domain .tripPlan .enums .TripStatus ;
77import com .example .triptalk .domain .tripPlan .repository .*;
88import com .example .triptalk .global .apiPayload .code .status .ErrorStatus ;
@@ -25,6 +25,7 @@ public class TripPlanServiceImpl implements TripPlanService {
2525 private final TripAccommodationRepository tripAccommodationRepository ;
2626 private final DailyScheduleRepository dailyScheduleRepository ;
2727 private final TripHighlightRepository tripHighlightRepository ;
28+ private final com .example .triptalk .domain .user .repository .UserRepository userRepository ;
2829
2930 @ Override
3031 public TripPlanResponse .TripPlanDTO getTripPlan (Long tripPlanId , Long userId ) {
@@ -93,4 +94,63 @@ public TripPlanResponse.TripPlanStatusDTO changeTripPlanStatusToTraveled(Long tr
9394
9495 return TripPlanConverter .toTripPlanStatusDTO (tripPlan );
9596 }
97+
98+ @ Override
99+ @ Transactional
100+ public TripPlanResponse .TripPlanDTO createTripPlanFromFastAPI (Long userId , com .example .triptalk .domain .tripPlan .dto .TripPlanRequest .CreateFromFastAPIDTO request ) {
101+ // 1. User 조회
102+ com .example .triptalk .domain .user .entity .User user = userRepository .findById (userId )
103+ .orElseThrow (() -> new ErrorHandler (ErrorStatus .USER_NOT_FOUND ));
104+
105+ // 2. TripPlan 생성 (Converter 사용)
106+ TripPlan tripPlan = TripPlanConverter .toTripPlanEntity (request , user );
107+ tripPlan = tripPlanRepository .save (tripPlan );
108+
109+ TripPlan finalTripPlan = tripPlan ;
110+
111+ // 3. Highlights 저장 (Converter 사용)
112+ java .util .List <TripHighlight > highlights = TripPlanConverter .toTripHighlightEntities (
113+ request .getHighlights (),
114+ finalTripPlan
115+ );
116+ tripHighlightRepository .saveAll (highlights );
117+
118+ // 4. Transportations 저장 (Converter 사용)
119+ TripTransportation outbound = TripPlanConverter .toTripTransportationEntity (
120+ request .getOutboundTransportation (),
121+ finalTripPlan
122+ );
123+ if (outbound != null ) {
124+ tripTransportationRepository .save (outbound );
125+ }
126+
127+ TripTransportation returnTransport = TripPlanConverter .toTripTransportationEntity (
128+ request .getReturnTransportation (),
129+ finalTripPlan
130+ );
131+ if (returnTransport != null ) {
132+ tripTransportationRepository .save (returnTransport );
133+ }
134+
135+ // 5. Accommodations 저장 (Converter 사용)
136+ java .util .List <TripAccommodation > accommodations = TripPlanConverter .toTripAccommodationEntities (
137+ request .getAccommodations (),
138+ finalTripPlan
139+ );
140+ tripAccommodationRepository .saveAll (accommodations );
141+
142+ // 6. DailySchedules 저장 (Converter 사용)
143+ if (request .getDailySchedules () != null ) {
144+ for (com .example .triptalk .domain .tripPlan .dto .TripPlanRequest .DailyScheduleDTO dailyScheduleDTO : request .getDailySchedules ()) {
145+ DailySchedule dailySchedule = TripPlanConverter .toDailyScheduleEntity (
146+ dailyScheduleDTO ,
147+ finalTripPlan
148+ );
149+ dailyScheduleRepository .save (dailySchedule );
150+ }
151+ }
152+
153+ // 7. 저장된 데이터 조회 및 반환
154+ return getTripPlan (finalTripPlan .getId (), userId );
155+ }
96156}
0 commit comments