diff --git a/backend/src/main/java/woowacourse/touroot/place/domain/Place.java b/backend/src/main/java/woowacourse/touroot/place/domain/Place.java index 25cb57f9..a263cdbb 100644 --- a/backend/src/main/java/woowacourse/touroot/place/domain/Place.java +++ b/backend/src/main/java/woowacourse/touroot/place/domain/Place.java @@ -19,10 +19,10 @@ public class Place { private String name; @Column(nullable = false) - private Double latitude; + private String latitude; @Column(nullable = false) - private Double longitude; + private String longitude; private String googlePlaceId; } diff --git a/backend/src/main/java/woowacourse/touroot/travelogue/dto/TravelogueResponse.java b/backend/src/main/java/woowacourse/touroot/travelogue/dto/TravelogueResponse.java new file mode 100644 index 00000000..effa2952 --- /dev/null +++ b/backend/src/main/java/woowacourse/touroot/travelogue/dto/TravelogueResponse.java @@ -0,0 +1,7 @@ +package woowacourse.touroot.travelogue.dto; + +import java.util.List; +import woowacourse.touroot.travelogueday.dto.TravelogueDayResponse; + +public record TravelogueResponse(String title, String thumbnail, List days) { +} diff --git a/backend/src/main/java/woowacourse/touroot/travelogue/service/TravelogueService.java b/backend/src/main/java/woowacourse/touroot/travelogue/service/TravelogueService.java new file mode 100644 index 00000000..e4bc95b9 --- /dev/null +++ b/backend/src/main/java/woowacourse/touroot/travelogue/service/TravelogueService.java @@ -0,0 +1,59 @@ +package woowacourse.touroot.travelogue.service; + +import java.util.Comparator; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import woowacourse.touroot.travelogue.domain.Travelogue; +import woowacourse.touroot.travelogue.dto.TravelogueResponse; +import woowacourse.touroot.travelogue.repository.TravelogueRepository; +import woowacourse.touroot.travelogueday.domain.TravelogueDay; +import woowacourse.touroot.travelogueday.dto.TravelogueDayResponse; +import woowacourse.touroot.traveloguephoto.domain.TraveloguePhoto; +import woowacourse.touroot.travelogueplace.domain.TraveloguePlace; +import woowacourse.touroot.travelogueplace.dto.TraveloguePlaceResponse; + +@RequiredArgsConstructor +@Service +public class TravelogueService { + + private final TravelogueRepository travelogueRepository; + + @Transactional(readOnly = true) + public TravelogueResponse findTravelogueById(Long id) { + Travelogue travelogue = travelogueRepository.findById(id).get(); + + return new TravelogueResponse(travelogue.getTitle(), travelogue.getThumbnail(), getDayResponses(travelogue)); + } + + private List getDayResponses(Travelogue travelogue) { + return travelogue.getTravelogueDays() + .stream() + .sorted(Comparator.comparing(TravelogueDay::getOrder)) + .map(travelogueDay -> new TravelogueDayResponse(getPlaceResponses(travelogueDay))) + .toList(); + } + + private List getPlaceResponses(TravelogueDay day) { + return day.getTraveloguePlaces() + .stream() + .sorted(Comparator.comparing(TraveloguePlace::getOrder)) + .map(traveloguePlace -> new TraveloguePlaceResponse( + traveloguePlace.getPlace().getName(), + getPhotoUrls(traveloguePlace), + traveloguePlace.getDescription(), + traveloguePlace.getPlace().getLatitude(), + traveloguePlace.getPlace().getLongitude() + )) + .toList(); + } + + private List getPhotoUrls(TraveloguePlace traveloguePlace) { + return traveloguePlace.getTraveloguePhotos() + .stream() + .sorted(Comparator.comparing(TraveloguePhoto::getOrder)) + .map(TraveloguePhoto::getKey) + .toList(); + } +} diff --git a/backend/src/main/java/woowacourse/touroot/travelogueday/dto/TravelogueDayResponse.java b/backend/src/main/java/woowacourse/touroot/travelogueday/dto/TravelogueDayResponse.java new file mode 100644 index 00000000..69f25f67 --- /dev/null +++ b/backend/src/main/java/woowacourse/touroot/travelogueday/dto/TravelogueDayResponse.java @@ -0,0 +1,7 @@ +package woowacourse.touroot.travelogueday.dto; + +import java.util.List; +import woowacourse.touroot.travelogueplace.dto.TraveloguePlaceResponse; + +public record TravelogueDayResponse(List places) { +} diff --git a/backend/src/main/java/woowacourse/touroot/travelogueplace/dto/TraveloguePlaceResponse.java b/backend/src/main/java/woowacourse/touroot/travelogueplace/dto/TraveloguePlaceResponse.java new file mode 100644 index 00000000..c746c90a --- /dev/null +++ b/backend/src/main/java/woowacourse/touroot/travelogueplace/dto/TraveloguePlaceResponse.java @@ -0,0 +1,12 @@ +package woowacourse.touroot.travelogueplace.dto; + +import java.util.List; + +public record TraveloguePlaceResponse( + String name, + List photoUrls, + String description, + String latitude, + String longitude +) { +}