From a29efd20bde096e442dbf5fd002192034de9e18e Mon Sep 17 00:00:00 2001 From: daeun084 <030804jk@naver.com> Date: Mon, 29 Jul 2024 14:09:43 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=99=88=20=ED=99=94=EB=A9=B4=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20API=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dev/common/status/SuccessStatus.java | 4 +- .../makar/dev/controller/UserController.java | 11 +++++ .../makar/dev/converter/RouteConverter.java | 9 ++++ .../makar/dev/converter/UserConverter.java | 45 +++++++++++++++++++ .../makar/dev/dto/response/RouteResponse.java | 10 +++++ .../makar/dev/dto/response/UserResponse.java | 23 ++++++++++ .../java/makar/dev/service/UserService.java | 37 ++++++++++++--- 7 files changed, 133 insertions(+), 6 deletions(-) diff --git a/src/main/java/makar/dev/common/status/SuccessStatus.java b/src/main/java/makar/dev/common/status/SuccessStatus.java index 4aa8b80..aca891d 100644 --- a/src/main/java/makar/dev/common/status/SuccessStatus.java +++ b/src/main/java/makar/dev/common/status/SuccessStatus.java @@ -29,8 +29,10 @@ public enum SuccessStatus { _MAKAR_NOTI_DELETE(HttpStatus.OK, 200, "막차 알림 삭제가 완료되었습니다."), _GETOFF_NOTI_POST(HttpStatus.OK, 200, "하차 알림 추가가 완료되었습니다."), _GETOFF_NOTI_DELETE(HttpStatus.OK, 200, "하차 알림 삭제가 완료되었습니다."), - _NOTI_LIST_GET(HttpStatus.OK, 200, "알림 리스트 조회가 완료되었습니다."); + _NOTI_LIST_GET(HttpStatus.OK, 200, "알림 리스트 조회가 완료되었습니다."), + // UserController + _HOME_GET(HttpStatus.OK, 200, "홈 화면 조회가 완료되었습니다."); private final HttpStatus httpStatus; private final int code; diff --git a/src/main/java/makar/dev/controller/UserController.java b/src/main/java/makar/dev/controller/UserController.java index 8467670..fe34543 100644 --- a/src/main/java/makar/dev/controller/UserController.java +++ b/src/main/java/makar/dev/controller/UserController.java @@ -3,8 +3,10 @@ import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; import makar.dev.common.response.ApiResponse; +import makar.dev.common.security.dto.TokenDto; import makar.dev.common.status.SuccessStatus; import makar.dev.service.UserService; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; @RestController @@ -23,4 +25,13 @@ public ApiResponse initStation(){ return ApiResponse.SuccessResponse(SuccessStatus._OK); } + @Operation( + summary = "홈 화면 조회", + description = "홈 화면을 조회합니다." + ) + @GetMapping("/home") + public ApiResponse getHome(@AuthenticationPrincipal TokenDto tokenDto){ + return ApiResponse.SuccessResponse(SuccessStatus._HOME_GET, userService.getHome(tokenDto)); + } + } diff --git a/src/main/java/makar/dev/converter/RouteConverter.java b/src/main/java/makar/dev/converter/RouteConverter.java index f4fe686..7a131ac 100644 --- a/src/main/java/makar/dev/converter/RouteConverter.java +++ b/src/main/java/makar/dev/converter/RouteConverter.java @@ -57,6 +57,15 @@ public static RouteResponse.RouteDetailDto toRouteDetailDto(Route route) { .build(); } + public static RouteResponse.BriefRouteDto toBriefRouteDto(Route route){ + return RouteResponse.BriefRouteDto.builder() + .sourceStationName(route.getSourceStation().getStationName()) + .sourceLineNum(route.getSourceStation().getLineNum()) + .destinationStationName(route.getDestinationStation().getStationName()) + .destinationLineNum(route.getDestinationStation().getLineNum()) + .build(); + } + public static SubRoute toSubRoute(RouteSearchResponse.SubPath subPath) { RouteSearchResponse.Lane lane = subPath.getLane().get(0); diff --git a/src/main/java/makar/dev/converter/UserConverter.java b/src/main/java/makar/dev/converter/UserConverter.java index ee3cf72..a3b6894 100644 --- a/src/main/java/makar/dev/converter/UserConverter.java +++ b/src/main/java/makar/dev/converter/UserConverter.java @@ -1,4 +1,49 @@ package makar.dev.converter; +import makar.dev.domain.Noti; +import makar.dev.domain.Route; +import makar.dev.dto.response.NotiResponse; +import makar.dev.dto.response.RouteResponse; +import makar.dev.dto.response.UserResponse; + +import java.util.List; + public class UserConverter { + + public static UserResponse.HomeDto toHomeDto(boolean isRouteSet, List<Noti> notiList, + List<Route> favoriteRouteList, List<Route> recentRouteList){ + List<RouteResponse.BriefRouteDto> favoriteRouteDtoList = favoriteRouteList.stream() + .map(RouteConverter::toBriefRouteDto) + .toList(); + List<RouteResponse.BriefRouteDto> recentRouteDtoList = recentRouteList.stream() + .map(RouteConverter::toBriefRouteDto) + .toList(); + + if (notiList.isEmpty()) + return UserResponse.HomeDto.builder() + .isRouteSet(isRouteSet) + .sourceStationName(null) + .destinationStationName(null) + .makarTime(null) + .getoffTime(null) + .notiList(null) + .favoriteRouteList(favoriteRouteDtoList) + .recentRouteList(recentRouteDtoList) + .build(); + + Route route = notiList.get(0).getRoute(); + List<NotiResponse.NotiDto> notiDtoList = notiList.stream() + .map(NotiConverter::toNotiDto) + .toList(); + return UserResponse.HomeDto.builder() + .isRouteSet(isRouteSet) + .sourceStationName(route.getSourceStation().getStationName()) + .destinationStationName(route.getDestinationStation().getStationName()) + .makarTime(route.getSchedule().getSourceTime()) + .getoffTime(route.getSchedule().getDestinationTime()) + .notiList(notiDtoList) + .favoriteRouteList(favoriteRouteDtoList) + .recentRouteList(recentRouteDtoList) + .build(); + } } diff --git a/src/main/java/makar/dev/dto/response/RouteResponse.java b/src/main/java/makar/dev/dto/response/RouteResponse.java index deb2c45..9d7c84c 100644 --- a/src/main/java/makar/dev/dto/response/RouteResponse.java +++ b/src/main/java/makar/dev/dto/response/RouteResponse.java @@ -42,6 +42,16 @@ public static class RouteDetailDto { private List<SubRouteDetailDto> subRouteDtoList; } + @Data @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class BriefRouteDto { + private String sourceStationName; + private String sourceLineNum; + private String destinationStationName; + private String destinationLineNum; + } + @Data @Builder @NoArgsConstructor diff --git a/src/main/java/makar/dev/dto/response/UserResponse.java b/src/main/java/makar/dev/dto/response/UserResponse.java index 418d459..1aae188 100644 --- a/src/main/java/makar/dev/dto/response/UserResponse.java +++ b/src/main/java/makar/dev/dto/response/UserResponse.java @@ -1,4 +1,27 @@ package makar.dev.dto.response; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import makar.dev.domain.Noti; + +import java.util.List; + public class UserResponse { + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class HomeDto { + private boolean isRouteSet; + private String sourceStationName; + private String destinationStationName; + private String makarTime; + private String getoffTime; + private List<NotiResponse.NotiDto> notiList; + private List<RouteResponse.BriefRouteDto> favoriteRouteList; + private List<RouteResponse.BriefRouteDto> recentRouteList; + } } diff --git a/src/main/java/makar/dev/service/UserService.java b/src/main/java/makar/dev/service/UserService.java index 1d76e60..6771545 100644 --- a/src/main/java/makar/dev/service/UserService.java +++ b/src/main/java/makar/dev/service/UserService.java @@ -1,12 +1,20 @@ package makar.dev.service; import lombok.RequiredArgsConstructor; +import makar.dev.common.exception.GeneralException; +import makar.dev.common.security.dto.TokenDto; +import makar.dev.common.status.ErrorStatus; +import makar.dev.converter.UserConverter; +import makar.dev.domain.Noti; +import makar.dev.domain.Route; import makar.dev.domain.User; +import makar.dev.dto.response.UserResponse; import makar.dev.manager.DataManager; import makar.dev.repository.UserRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; import java.util.Optional; @Service @@ -42,11 +50,6 @@ public void initDatabase(){ // dataManager.saveReverseTransferInfo(); } - public void tmpCreateUser(String userName){ - User user = new User(userName); - userRepository.save(user); - } - public Optional<User> getOptionalUserById(String id) { return userRepository.findById(id); } @@ -64,4 +67,28 @@ public User createUser(String id, String password, String email, String username return user; } + + + // 홈 화면 조회 + public UserResponse.HomeDto getHome(TokenDto tokenDto) { + User user = findUserById(tokenDto.getUserId()); + boolean isRouteSet = isRouteSet(user); + + List<Route> favoriteRouteList = user.getFavoriteRouteList(); + List<Route> recentRouteList = user.getRecentRouteList(); + + return UserConverter.toHomeDto(isRouteSet, user.getNotiList(), favoriteRouteList, recentRouteList); + } + + private User findUserById(Long userId){ + return userRepository.findById(userId) + .orElseThrow(() -> new GeneralException(ErrorStatus.NOT_FOUND_USER)); + } + + private boolean isRouteSet(User user){ + List<Noti> notiList = user.getNotiList(); + return !notiList.isEmpty(); + } + + }