From 30dbd9e23b3fff9b1add3a59f5631ea54419a7a3 Mon Sep 17 00:00:00 2001 From: msk226 Date: Mon, 7 Apr 2025 12:59:21 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[FEATURE]=20=EC=B6=94=EC=B2=9C=20=EC=97=AC?= =?UTF-8?q?=ED=96=89=20=EC=A0=95=EB=B3=B4=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C?= =?UTF-8?q?,=20=EC=A3=BC=EC=86=8C=EB=8F=84=20=ED=95=A8=EA=BB=98=20?= =?UTF-8?q?=EC=9D=91=EB=8B=B5=20=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../response/attraction/AttractionListResponseDTO.java | 3 ++- .../tripPlan/response/attraction/AttractionResponseDTO.java | 6 +++--- .../tripPlan/response/restaurant/RestaurantResponseDTO.java | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/hyu/erica/capstone/web/dto/tripPlan/response/attraction/AttractionListResponseDTO.java b/src/main/java/hyu/erica/capstone/web/dto/tripPlan/response/attraction/AttractionListResponseDTO.java index 142a685..c6da087 100644 --- a/src/main/java/hyu/erica/capstone/web/dto/tripPlan/response/attraction/AttractionListResponseDTO.java +++ b/src/main/java/hyu/erica/capstone/web/dto/tripPlan/response/attraction/AttractionListResponseDTO.java @@ -7,7 +7,8 @@ public record AttractionListResponseDTO(List attractions, public static AttractionListResponseDTO of(List attractions) { List responseDTOS = attractions.stream() - .map(attraction -> new AttractionResponseDTO(attraction.getContentId(), attraction.getContentName(), attraction.getImageUrl())) + .map(attraction -> new AttractionResponseDTO(attraction.getContentId(), attraction.getContentName(), attraction.getImageUrl(), + attraction.getAddress())) .toList(); return new AttractionListResponseDTO(responseDTOS, attractions.size()); } diff --git a/src/main/java/hyu/erica/capstone/web/dto/tripPlan/response/attraction/AttractionResponseDTO.java b/src/main/java/hyu/erica/capstone/web/dto/tripPlan/response/attraction/AttractionResponseDTO.java index 0dc28d2..eaf4eae 100644 --- a/src/main/java/hyu/erica/capstone/web/dto/tripPlan/response/attraction/AttractionResponseDTO.java +++ b/src/main/java/hyu/erica/capstone/web/dto/tripPlan/response/attraction/AttractionResponseDTO.java @@ -1,8 +1,8 @@ package hyu.erica.capstone.web.dto.tripPlan.response.attraction; -public record AttractionResponseDTO(Long attractionId, String name, String imageUrl) { +public record AttractionResponseDTO(Long attractionId, String name, String imageUrl, String address) { - public static AttractionResponseDTO of(Long attractionId, String name, String imageUrl) { - return new AttractionResponseDTO(attractionId, name, imageUrl); + public static AttractionResponseDTO of(Long attractionId, String name, String imageUrl, String address) { + return new AttractionResponseDTO(attractionId, name, imageUrl, address); } } diff --git a/src/main/java/hyu/erica/capstone/web/dto/tripPlan/response/restaurant/RestaurantResponseDTO.java b/src/main/java/hyu/erica/capstone/web/dto/tripPlan/response/restaurant/RestaurantResponseDTO.java index 95aeb84..b752316 100644 --- a/src/main/java/hyu/erica/capstone/web/dto/tripPlan/response/restaurant/RestaurantResponseDTO.java +++ b/src/main/java/hyu/erica/capstone/web/dto/tripPlan/response/restaurant/RestaurantResponseDTO.java @@ -2,9 +2,9 @@ import hyu.erica.capstone.domain.Restaurant; -public record RestaurantResponseDTO(Long restaurantId, String name, String imageUrl) { +public record RestaurantResponseDTO(Long restaurantId, String name, String imageUrl, String address) { public static RestaurantResponseDTO of(Restaurant restaurant) { - return new RestaurantResponseDTO(restaurant.getId(), restaurant.getRestaurantName(), "추후 작업 예정"); + return new RestaurantResponseDTO(restaurant.getId(), restaurant.getRestaurantName(), "추후 작업 예정", restaurant.getRoadAddress()); } } From a370dc02b5bf10bf02a1ed0a207b27fcc4291405 Mon Sep 17 00:00:00 2001 From: msk226 Date: Mon, 7 Apr 2025 13:11:14 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[FEATURE]=20=EB=82=B4=20=EC=97=AC=ED=96=89?= =?UTF-8?q?=20=EA=B3=84=ED=9A=8D=20=EC=A1=B0=ED=9A=8C=20API=20=EC=8B=9C?= =?UTF-8?q?=EA=B7=B8=EB=8B=88=EC=B2=98=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/UserController.java | 10 +++++ .../dto/user/response/MyTripPlanResponse.java | 37 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 src/main/java/hyu/erica/capstone/web/dto/user/response/MyTripPlanResponse.java diff --git a/src/main/java/hyu/erica/capstone/web/controller/UserController.java b/src/main/java/hyu/erica/capstone/web/controller/UserController.java index c470522..14f8f53 100644 --- a/src/main/java/hyu/erica/capstone/web/controller/UserController.java +++ b/src/main/java/hyu/erica/capstone/web/controller/UserController.java @@ -114,4 +114,14 @@ public ApiResponse editProfile( return ApiResponse.onSuccess(SuccessStatus._OK); } + // 마이페이지 - 내 여행 계획 조회 + @Operation(summary = "[회원 관련] 내 여행 계획 조회", description = """ + ### 내 여행 계획을 조회합니다. + """) + @GetMapping("/trip-plans") + public ApiResponse myTripPlans() { + return ApiResponse.onSuccess(SuccessStatus._OK, userCommandService.getMyTripPlans(SecurityUtils.getCurrentUserId())); + } + + } diff --git a/src/main/java/hyu/erica/capstone/web/dto/user/response/MyTripPlanResponse.java b/src/main/java/hyu/erica/capstone/web/dto/user/response/MyTripPlanResponse.java new file mode 100644 index 0000000..febe505 --- /dev/null +++ b/src/main/java/hyu/erica/capstone/web/dto/user/response/MyTripPlanResponse.java @@ -0,0 +1,37 @@ +package hyu.erica.capstone.web.dto.user.response; + +import hyu.erica.capstone.domain.TripPlan; +import hyu.erica.capstone.domain.enums.TripPlanStatus; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +public record MyTripPlanResponse (List tripPlans, int totalElements) { + + public static MyTripPlanResponse of(List tripPlans) { + List tripPlanDetails = tripPlans.stream() + .map(tripPlan -> TripDetail.of( + tripPlan.getId(), + tripPlan.getTitle(), + tripPlan.getTripPlanStatus(), + tripPlan.getStartDate(), + tripPlan.getEndDate(), + tripPlan.getProfileImage(), + tripPlan.getDescription(), + "부산")) + .toList(); + return new MyTripPlanResponse(tripPlanDetails, tripPlans.size()); + } + + private record TripDetail(Long tripPlanId, String tripPlanName, TripPlanStatus tripPlanStatus, LocalDate startDate, LocalDate endDate, Integer dayDiff, String imageUrl, String memo, String city) { + public static TripDetail of( + Long tripPlanId, String tripPlanName, TripPlanStatus tripPlanStatus, LocalDate startDate, LocalDate endDate, + String imageUrl, String memo, String city) { + + // dayDiff 오늘부터 여행 종료일 까지의 일수 + int dayDiff = (int) (LocalDate.now().toEpochDay() - endDate.toEpochDay()); + + return new TripDetail(tripPlanId, tripPlanName, tripPlanStatus, startDate, endDate, dayDiff ,imageUrl, memo, city); + } + } +} From 821aa3c9edea2a0495ffcff5ea9cde84b619985b Mon Sep 17 00:00:00 2001 From: msk226 Date: Mon, 7 Apr 2025 13:11:22 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[FEATURE]=20=EB=82=B4=20=EC=97=AC=ED=96=89?= =?UTF-8?q?=20=EA=B3=84=ED=9A=8D=20=EC=A1=B0=ED=9A=8C=20=EC=9C=84=ED=95=9C?= =?UTF-8?q?=20=EC=84=B8=EB=B6=80=20=EB=B9=84=EC=A6=88=EB=8B=88=EC=8A=A4=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../capstone/repository/TripPlanRepository.java | 3 +++ .../service/user/UserCommandService.java | 3 +++ .../user/impl/UserCommandServiceImpl.java | 17 +++++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/src/main/java/hyu/erica/capstone/repository/TripPlanRepository.java b/src/main/java/hyu/erica/capstone/repository/TripPlanRepository.java index 7a192aa..35893a1 100644 --- a/src/main/java/hyu/erica/capstone/repository/TripPlanRepository.java +++ b/src/main/java/hyu/erica/capstone/repository/TripPlanRepository.java @@ -1,9 +1,12 @@ package hyu.erica.capstone.repository; import hyu.erica.capstone.domain.TripPlan; +import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface TripPlanRepository extends JpaRepository { + + List findAllByUser_Id(Long userId); } diff --git a/src/main/java/hyu/erica/capstone/service/user/UserCommandService.java b/src/main/java/hyu/erica/capstone/service/user/UserCommandService.java index c1eec78..ea84cad 100644 --- a/src/main/java/hyu/erica/capstone/service/user/UserCommandService.java +++ b/src/main/java/hyu/erica/capstone/service/user/UserCommandService.java @@ -3,6 +3,7 @@ import hyu.erica.capstone.web.dto.user.request.SignInRequestDTO; import hyu.erica.capstone.web.dto.user.request.SignUpRequestDTO; import hyu.erica.capstone.web.dto.user.request.UpdateInfoRequestDTO; +import hyu.erica.capstone.web.dto.user.response.MyTripPlanResponse; public interface UserCommandService { @@ -14,5 +15,7 @@ public interface UserCommandService { void updateInfo(Long userId, UpdateInfoRequestDTO request); + MyTripPlanResponse getMyTripPlans(Long userId); + void reissueToken(String refreshToken); } diff --git a/src/main/java/hyu/erica/capstone/service/user/impl/UserCommandServiceImpl.java b/src/main/java/hyu/erica/capstone/service/user/impl/UserCommandServiceImpl.java index a011e06..c3a279f 100644 --- a/src/main/java/hyu/erica/capstone/service/user/impl/UserCommandServiceImpl.java +++ b/src/main/java/hyu/erica/capstone/service/user/impl/UserCommandServiceImpl.java @@ -2,24 +2,31 @@ import hyu.erica.capstone.api.code.status.ErrorStatus; import hyu.erica.capstone.api.exception.GeneralException; +import hyu.erica.capstone.domain.TripPlan; import hyu.erica.capstone.domain.User; +import hyu.erica.capstone.repository.TripPlanRepository; import hyu.erica.capstone.repository.UserRepository; import hyu.erica.capstone.security.JwtTokenProvider; import hyu.erica.capstone.service.user.UserCommandService; import hyu.erica.capstone.web.dto.user.request.SignInRequestDTO; import hyu.erica.capstone.web.dto.user.request.SignUpRequestDTO; import hyu.erica.capstone.web.dto.user.request.UpdateInfoRequestDTO; +import hyu.erica.capstone.web.dto.user.response.MyTripPlanResponse; +import java.util.List; import java.util.Objects; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +@Slf4j @Service @Transactional @RequiredArgsConstructor public class UserCommandServiceImpl implements UserCommandService { private final UserRepository userRepository; + private final TripPlanRepository tripPlanRepository; private final JwtTokenProvider jwtTokenProvider; @@ -71,6 +78,16 @@ public void updateInfo(Long userId, UpdateInfoRequestDTO request) { user.updateInfo(request.nickname(), request.phoneNumber(), request.profileImage()); } + @Override + public MyTripPlanResponse getMyTripPlans(Long userId) { + log.info(userId.toString()); + if (!userRepository.existsById(userId)){ + throw new GeneralException(ErrorStatus._USER_NOT_FOUND); + } + List allByUserId = tripPlanRepository.findAllByUser_Id(userId); + return MyTripPlanResponse.of(allByUserId); + } + @Override public void reissueToken(String refreshToken) {