From f965c9e85e4c380bf75807daca3e20d29fdc4e71 Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Sun, 14 Jul 2024 21:55:16 +0900 Subject: [PATCH 01/22] [feat] make request and response dto --- .../request/StoreDuplicateValidationRequest.java | 7 +++++++ .../service/response/StoreDuplicateValidationResponse.java | 6 ++++++ 2 files changed, 13 insertions(+) create mode 100644 src/main/java/org/hankki/hankkiserver/api/store/controller/request/StoreDuplicateValidationRequest.java create mode 100644 src/main/java/org/hankki/hankkiserver/api/store/service/response/StoreDuplicateValidationResponse.java diff --git a/src/main/java/org/hankki/hankkiserver/api/store/controller/request/StoreDuplicateValidationRequest.java b/src/main/java/org/hankki/hankkiserver/api/store/controller/request/StoreDuplicateValidationRequest.java new file mode 100644 index 00000000..16db2c72 --- /dev/null +++ b/src/main/java/org/hankki/hankkiserver/api/store/controller/request/StoreDuplicateValidationRequest.java @@ -0,0 +1,7 @@ +package org.hankki.hankkiserver.api.store.controller.request; + +public record StoreDuplicateValidationRequest( + Double latitude, + Double longitude +) { +} diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/response/StoreDuplicateValidationResponse.java b/src/main/java/org/hankki/hankkiserver/api/store/service/response/StoreDuplicateValidationResponse.java new file mode 100644 index 00000000..22a54efb --- /dev/null +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/response/StoreDuplicateValidationResponse.java @@ -0,0 +1,6 @@ +package org.hankki.hankkiserver.api.store.service.response; + +public record StoreDuplicateValidationResponse( + Long storeId +) { +} From fb537dff9294cd61af40483ce1d195abf87c7c88 Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Sun, 14 Jul 2024 21:56:23 +0900 Subject: [PATCH 02/22] [feat] logic for validation of adding store --- .../api/store/controller/StoreController.java | 6 ++++++ .../hankkiserver/api/store/service/StoreFinder.java | 6 ++++++ .../hankkiserver/api/store/service/StoreQueryService.java | 8 ++++++++ .../domain/store/repository/StoreRepository.java | 2 ++ 4 files changed, 22 insertions(+) diff --git a/src/main/java/org/hankki/hankkiserver/api/store/controller/StoreController.java b/src/main/java/org/hankki/hankkiserver/api/store/controller/StoreController.java index 09e9e9d5..1297a112 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/controller/StoreController.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/controller/StoreController.java @@ -2,6 +2,7 @@ import lombok.RequiredArgsConstructor; import org.hankki.hankkiserver.api.dto.HankkiResponse; +import org.hankki.hankkiserver.api.store.controller.request.StoreDuplicateValidationRequest; import org.hankki.hankkiserver.api.store.service.StoreQueryService; import org.hankki.hankkiserver.api.store.service.response.*; import org.hankki.hankkiserver.common.code.CommonSuccessCode; @@ -59,4 +60,9 @@ public HankkiResponse createHeartStore(@UserId final Long u public HankkiResponse deleteHeartStore(@UserId final Long userId, @PathVariable final Long id) { return HankkiResponse.success(CommonSuccessCode.OK, heartCommandService.deleteHeart(StoreDeleteCommand.of(userId, id))); } + + @GetMapping("/stores/validate") + public HankkiResponse validateDuplicatedStore(@RequestBody final StoreDuplicateValidationRequest request) { + return HankkiResponse.success(CommonSuccessCode.OK, storeQueryService.validateDuplicatedStore(request)); + } } diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreFinder.java b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreFinder.java index 27710468..8c284c34 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreFinder.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreFinder.java @@ -7,6 +7,8 @@ import org.hankki.hankkiserver.domain.store.repository.StoreRepository; import org.springframework.stereotype.Component; +import java.util.Optional; + @Component @RequiredArgsConstructor public class StoreFinder { @@ -27,4 +29,8 @@ protected Store findByIdWithHeartAndIsDeletedFalse(final Long id) { return storeRepository.findByIdWithHeartAndIsDeletedFalse(id) .orElseThrow(() -> new NotFoundException(StoreErrorCode.STORE_NOT_FOUND)); } + + public Optional findStoreWithLatitudeAndLongitude(Double latitude, Double longitude) { + return storeRepository.findByPoint_LatitudeAndPoint_Longitude(latitude, longitude); + } } diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java index 21ca9ab7..70656e5b 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java @@ -3,6 +3,7 @@ import lombok.RequiredArgsConstructor; import org.hankki.hankkiserver.api.menu.service.MenuFinder; +import org.hankki.hankkiserver.api.store.controller.request.StoreDuplicateValidationRequest; import org.hankki.hankkiserver.api.store.parameter.PriceCategory; import org.hankki.hankkiserver.api.store.parameter.SortOption; import org.hankki.hankkiserver.api.store.service.response.*; @@ -74,4 +75,11 @@ private boolean isLiked(final Long id, final Store store) { private static boolean isLiked(final Long id, final Heart heart) { return heart.getUser().getId().equals(id); } + + public StoreDuplicateValidationResponse validateDuplicatedStore(final StoreDuplicateValidationRequest request) { + Long storeId = storeFinder.findStoreWithLatitudeAndLongitude(request.latitude(), request.longitude()) + .map(Store::getId) + .orElse(null); + return new StoreDuplicateValidationResponse(storeId); + } } diff --git a/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java b/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java index 4fa67e8f..3d51d06c 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java +++ b/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java @@ -12,4 +12,6 @@ public interface StoreRepository extends JpaRepository { @Query("select s from Store s join fetch s.hearts where s.id = :id and s.isDeleted = false") Optional findByIdWithHeartAndIsDeletedFalse(Long id); + + Optional findByPoint_LatitudeAndPoint_Longitude(Double latitude, Double longitude); } From 2c41deb0324398a6351068eabdcc69d1175ab334 Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Sun, 14 Jul 2024 22:36:20 +0900 Subject: [PATCH 03/22] [refac] add missing transational annotation --- .../hankki/hankkiserver/api/store/service/StoreQueryService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java index 70656e5b..bc3756f4 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java @@ -76,6 +76,7 @@ private static boolean isLiked(final Long id, final Heart heart) { return heart.getUser().getId().equals(id); } + @Transactional(readOnly = true) public StoreDuplicateValidationResponse validateDuplicatedStore(final StoreDuplicateValidationRequest request) { Long storeId = storeFinder.findStoreWithLatitudeAndLongitude(request.latitude(), request.longitude()) .map(Store::getId) From d4077e08618fa8f6368a40d67941e1aa6e10c202 Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Mon, 15 Jul 2024 03:08:14 +0900 Subject: [PATCH 04/22] [feat] set two-way association --- .../org/hankki/hankkiserver/domain/store/model/Store.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/org/hankki/hankkiserver/domain/store/model/Store.java b/src/main/java/org/hankki/hankkiserver/domain/store/model/Store.java index f55a714e..ea8e4866 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/store/model/Store.java +++ b/src/main/java/org/hankki/hankkiserver/domain/store/model/Store.java @@ -9,6 +9,7 @@ import org.hankki.hankkiserver.domain.common.BaseTimeEntity; import org.hankki.hankkiserver.domain.common.Point; import org.hankki.hankkiserver.domain.heart.model.Heart; +import org.hankki.hankkiserver.domain.universitystore.model.UniversityStore; import org.hibernate.annotations.BatchSize; @Entity @@ -48,6 +49,9 @@ public class Store extends BaseTimeEntity { @BatchSize(size = 100) private List images = new ArrayList<>(); + @OneToMany(mappedBy = "store") + private List universityStores = new ArrayList<>(); + public String getImage() { if (images.isEmpty()) { return "default.com"; From bf8d8b8ea906000c0c34829b97d6400534839ec0 Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Mon, 15 Jul 2024 03:08:37 +0900 Subject: [PATCH 05/22] [feat] add universityId in request --- .../controller/request/StoreDuplicateValidationRequest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/hankki/hankkiserver/api/store/controller/request/StoreDuplicateValidationRequest.java b/src/main/java/org/hankki/hankkiserver/api/store/controller/request/StoreDuplicateValidationRequest.java index 16db2c72..65ab3acb 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/controller/request/StoreDuplicateValidationRequest.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/controller/request/StoreDuplicateValidationRequest.java @@ -1,6 +1,7 @@ package org.hankki.hankkiserver.api.store.controller.request; public record StoreDuplicateValidationRequest( + Long id, Double latitude, Double longitude ) { From f71b5e5a6607175822bdac1316492d8eef1fbd64 Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Mon, 15 Jul 2024 03:10:03 +0900 Subject: [PATCH 06/22] [feat] add university id condition --- .../api/store/service/StoreQueryService.java | 6 ++++-- .../store/service/UniversityStoreFinder.java | 20 +++++++++++++++++++ .../repository/UniversityStoreRepository.java | 6 ++++++ 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/hankki/hankkiserver/api/store/service/UniversityStoreFinder.java diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java index bc3756f4..51a88019 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java @@ -11,6 +11,7 @@ import org.hankki.hankkiserver.domain.store.model.Store; import org.hankki.hankkiserver.domain.store.model.StoreCategory; import org.hankki.hankkiserver.domain.store.model.StoreImage; +import org.hankki.hankkiserver.domain.universitystore.model.UniversityStore; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +23,7 @@ public class StoreQueryService { private final StoreFinder storeFinder; + private final UniversityStoreFinder universityStoreFinder; private final MenuFinder menuFinder; @Transactional(readOnly = true) @@ -78,8 +80,8 @@ private static boolean isLiked(final Long id, final Heart heart) { @Transactional(readOnly = true) public StoreDuplicateValidationResponse validateDuplicatedStore(final StoreDuplicateValidationRequest request) { - Long storeId = storeFinder.findStoreWithLatitudeAndLongitude(request.latitude(), request.longitude()) - .map(Store::getId) + Long storeId = universityStoreFinder.findUniversityStoreWithLatitudeAndLongitude(request.id(), request.latitude(), request.longitude()) + .map(UniversityStore->UniversityStore.getStore().getId()) .orElse(null); return new StoreDuplicateValidationResponse(storeId); } diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/UniversityStoreFinder.java b/src/main/java/org/hankki/hankkiserver/api/store/service/UniversityStoreFinder.java new file mode 100644 index 00000000..37a16bd5 --- /dev/null +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/UniversityStoreFinder.java @@ -0,0 +1,20 @@ +package org.hankki.hankkiserver.api.store.service; + +import lombok.RequiredArgsConstructor; +import org.hankki.hankkiserver.domain.universitystore.model.UniversityStore; +import org.hankki.hankkiserver.domain.universitystore.repository.UniversityStoreRepository; +import org.springframework.stereotype.Component; + +import java.util.Optional; + +@Component +@RequiredArgsConstructor +public class UniversityStoreFinder { + + private final UniversityStoreRepository universityStoreRepository; + + public Optional findUniversityStoreWithLatitudeAndLongitude(Long id, Double latitude, Double longitude) { + return universityStoreRepository.findUniversityStoreByLatitudeAndLongitude(id, latitude, longitude); + } + +} diff --git a/src/main/java/org/hankki/hankkiserver/domain/universitystore/repository/UniversityStoreRepository.java b/src/main/java/org/hankki/hankkiserver/domain/universitystore/repository/UniversityStoreRepository.java index 339e5b14..4f5e06f4 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/universitystore/repository/UniversityStoreRepository.java +++ b/src/main/java/org/hankki/hankkiserver/domain/universitystore/repository/UniversityStoreRepository.java @@ -2,6 +2,12 @@ import org.hankki.hankkiserver.domain.universitystore.model.UniversityStore; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.Optional; public interface UniversityStoreRepository extends JpaRepository { + + @Query("select us from UniversityStore us join fetch us.store s where us.id = :id and s.point.latitude = :latitude and s.point.longitude = :longitude") + Optional findUniversityStoreByLatitudeAndLongitude(Long id, Double latitude, Double longitude); } From fb713aa8a9052634f84152b34f82193f574bee7f Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Mon, 15 Jul 2024 03:10:34 +0900 Subject: [PATCH 07/22] [feat] delete unnecessary logic --- .../hankki/hankkiserver/api/store/service/StoreFinder.java | 6 ------ .../domain/store/repository/StoreRepository.java | 2 -- 2 files changed, 8 deletions(-) diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreFinder.java b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreFinder.java index 8c284c34..27710468 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreFinder.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreFinder.java @@ -7,8 +7,6 @@ import org.hankki.hankkiserver.domain.store.repository.StoreRepository; import org.springframework.stereotype.Component; -import java.util.Optional; - @Component @RequiredArgsConstructor public class StoreFinder { @@ -29,8 +27,4 @@ protected Store findByIdWithHeartAndIsDeletedFalse(final Long id) { return storeRepository.findByIdWithHeartAndIsDeletedFalse(id) .orElseThrow(() -> new NotFoundException(StoreErrorCode.STORE_NOT_FOUND)); } - - public Optional findStoreWithLatitudeAndLongitude(Double latitude, Double longitude) { - return storeRepository.findByPoint_LatitudeAndPoint_Longitude(latitude, longitude); - } } diff --git a/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java b/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java index 3d51d06c..4fa67e8f 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java +++ b/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java @@ -12,6 +12,4 @@ public interface StoreRepository extends JpaRepository { @Query("select s from Store s join fetch s.hearts where s.id = :id and s.isDeleted = false") Optional findByIdWithHeartAndIsDeletedFalse(Long id); - - Optional findByPoint_LatitudeAndPoint_Longitude(Double latitude, Double longitude); } From 13efe256dc504b98817e41ef25bfe4db6369a39d Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Mon, 15 Jul 2024 03:20:45 +0900 Subject: [PATCH 08/22] [refac] delete unnecessary import --- .../hankkiserver/api/store/service/StoreQueryService.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java index 51a88019..523fc822 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java @@ -1,6 +1,5 @@ package org.hankki.hankkiserver.api.store.service; - import lombok.RequiredArgsConstructor; import org.hankki.hankkiserver.api.menu.service.MenuFinder; import org.hankki.hankkiserver.api.store.controller.request.StoreDuplicateValidationRequest; @@ -11,7 +10,6 @@ import org.hankki.hankkiserver.domain.store.model.Store; import org.hankki.hankkiserver.domain.store.model.StoreCategory; import org.hankki.hankkiserver.domain.store.model.StoreImage; -import org.hankki.hankkiserver.domain.universitystore.model.UniversityStore; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; From 75f870c4ab9623e4d0920f0e51cf42644d2d0fe8 Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Mon, 15 Jul 2024 22:13:22 +0900 Subject: [PATCH 09/22] [feat] dto for response --- .../UserHeartedStoreListResponse.java | 14 +++++++++++ .../UserHeartedStoreViewResponse.java | 23 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreListResponse.java create mode 100644 src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreViewResponse.java diff --git a/src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreListResponse.java b/src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreListResponse.java new file mode 100644 index 00000000..59eb1b5e --- /dev/null +++ b/src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreListResponse.java @@ -0,0 +1,14 @@ +package org.hankki.hankkiserver.api.user.service.response; + +import org.hankki.hankkiserver.domain.heart.model.Heart; + +import java.util.List; + +public record UserHeartedStoreListResponse( + List stores +) { + public static UserHeartedStoreListResponse of(List hearts) { + return new UserHeartedStoreListResponse(hearts.stream() + .map(UserHeartedStoreViewResponse::of).toList()); + } +} diff --git a/src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreViewResponse.java b/src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreViewResponse.java new file mode 100644 index 00000000..cfcde916 --- /dev/null +++ b/src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreViewResponse.java @@ -0,0 +1,23 @@ +package org.hankki.hankkiserver.api.user.service.response; + +import org.hankki.hankkiserver.domain.heart.model.Heart; + +public record UserHeartedStoreViewResponse( + Long id, + String name, + String imageURL, + String category, + int lowestPrice, + int heartCount +) { + public static UserHeartedStoreViewResponse of(Heart heart) { + return new UserHeartedStoreViewResponse( + heart.getStore().getId(), + heart.getStore().getName(), + heart.getStore().getImage(), + heart.getStore().getCategory().getName(), + heart.getStore().getLowestPrice(), + heart.getStore().getHeartCount() + ); + } +} From cce17c98b3892c4c4b0052561cf0a319ed670b20 Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Mon, 15 Jul 2024 22:14:10 +0900 Subject: [PATCH 10/22] [feat] logic for get user hearted stores view --- .../api/store/service/HeartFinder.java | 5 +++++ .../api/store/service/StoreFinder.java | 3 +++ .../api/user/controller/UserController.java | 12 +++++++++--- .../api/user/service/UserQueryService.java | 16 ++++++++++++++-- .../domain/heart/repository/HeartRepository.java | 9 +++++++++ .../domain/store/repository/StoreRepository.java | 1 + 6 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/HeartFinder.java b/src/main/java/org/hankki/hankkiserver/api/store/service/HeartFinder.java index 34a6a9dd..d1795252 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/HeartFinder.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/HeartFinder.java @@ -7,6 +7,7 @@ import org.hankki.hankkiserver.domain.user.model.User; import org.springframework.stereotype.Component; +import java.util.List; import java.util.Optional; @Component @@ -18,4 +19,8 @@ public class HeartFinder { public boolean existsByUserAndStore(final User user, final Store store) { return heartRepository.existsByUserAndStore(user, store); } + + public List findHeartedStoresByUserId(final Long userId) { + return heartRepository.findHeartedStoresByUserId(userId); + } } diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreFinder.java b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreFinder.java index 27710468..cbe6dda4 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreFinder.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreFinder.java @@ -3,10 +3,13 @@ import lombok.RequiredArgsConstructor; import org.hankki.hankkiserver.common.code.StoreErrorCode; import org.hankki.hankkiserver.common.exception.NotFoundException; +import org.hankki.hankkiserver.domain.heart.repository.HeartRepository; import org.hankki.hankkiserver.domain.store.model.Store; import org.hankki.hankkiserver.domain.store.repository.StoreRepository; import org.springframework.stereotype.Component; +import java.util.List; + @Component @RequiredArgsConstructor public class StoreFinder { diff --git a/src/main/java/org/hankki/hankkiserver/api/user/controller/UserController.java b/src/main/java/org/hankki/hankkiserver/api/user/controller/UserController.java index c719af8e..ee851a06 100644 --- a/src/main/java/org/hankki/hankkiserver/api/user/controller/UserController.java +++ b/src/main/java/org/hankki/hankkiserver/api/user/controller/UserController.java @@ -8,6 +8,7 @@ import org.hankki.hankkiserver.api.user.service.UserQueryService; import org.hankki.hankkiserver.api.user.service.command.UserUniversityPostCommand; import org.hankki.hankkiserver.api.user.service.response.UserFavoritesGetResponse; +import org.hankki.hankkiserver.api.user.service.response.UserHeartedStoreListResponse; import org.hankki.hankkiserver.api.user.service.response.UserProfileAndNicknameResponse; import org.hankki.hankkiserver.api.user.service.response.UserUniversityFindResponse; import org.hankki.hankkiserver.auth.UserId; @@ -24,7 +25,7 @@ public class UserController { @PostMapping("/users/me/university") public HankkiResponse postUserUniversity(@UserId final Long userId, - @Valid @RequestBody final UserUniversityPostRequest request) { + @Valid @RequestBody final UserUniversityPostRequest request) { userCommandService.saveUserUniversity(new UserUniversityPostCommand(userId, request)); return HankkiResponse.success(CommonSuccessCode.CREATED); } @@ -36,11 +37,16 @@ public HankkiResponse findUserUniversity(@UserId fin @GetMapping("/users/me") public HankkiResponse getUserProfileAndNickname(@UserId final Long userId) { - return HankkiResponse.success(CommonSuccessCode.OK, userQueryService.getUserProfileAndNickname(userId)); + return HankkiResponse.success(CommonSuccessCode.OK, userQueryService.getUserProfileAndNickname(userId)); } @GetMapping("/users/me/favorites") public HankkiResponse findUserFavorites(@UserId final Long userId) { - return HankkiResponse.success(CommonSuccessCode.OK,userQueryService.findUserFavorites(userId)); + return HankkiResponse.success(CommonSuccessCode.OK, userQueryService.findUserFavorites(userId)); + } + + @GetMapping("/users/me/stores/hearts") + public HankkiResponse getUserHeartedStores(@UserId final Long userId) { + return HankkiResponse.success(CommonSuccessCode.OK, userQueryService.findUserHeartedStoresView(userId)); } } diff --git a/src/main/java/org/hankki/hankkiserver/api/user/service/UserQueryService.java b/src/main/java/org/hankki/hankkiserver/api/user/service/UserQueryService.java index e23807a1..daeebfa1 100644 --- a/src/main/java/org/hankki/hankkiserver/api/user/service/UserQueryService.java +++ b/src/main/java/org/hankki/hankkiserver/api/user/service/UserQueryService.java @@ -3,14 +3,19 @@ import lombok.RequiredArgsConstructor; import org.hankki.hankkiserver.api.auth.service.UserInfoFinder; import org.hankki.hankkiserver.api.favorite.service.FavoriteFinder; +import org.hankki.hankkiserver.api.store.service.HeartFinder; import org.hankki.hankkiserver.api.user.service.response.UserFavoritesGetResponse; import org.hankki.hankkiserver.api.user.service.response.UserProfileAndNicknameResponse; +import org.hankki.hankkiserver.api.user.service.response.UserHeartedStoreListResponse; import org.hankki.hankkiserver.api.user.service.response.UserUniversityFindResponse; import org.hankki.hankkiserver.common.code.UserUniversityErrorCode; import org.hankki.hankkiserver.common.exception.NotFoundException; +import org.hankki.hankkiserver.domain.heart.model.Heart; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + @Service @RequiredArgsConstructor public class UserQueryService { @@ -18,6 +23,7 @@ public class UserQueryService { private final UserUniversityFinder userUniversityFinder; private final FavoriteFinder favoriteFinder; private final UserInfoFinder userInfoFinder; + private final HeartFinder heartFinder; @Transactional(readOnly = true) public UserUniversityFindResponse findUserUniversity(Long userId) { @@ -27,11 +33,17 @@ public UserUniversityFindResponse findUserUniversity(Long userId) { @Transactional(readOnly = true) public UserFavoritesGetResponse findUserFavorites(final Long userId) { - return UserFavoritesGetResponse.of(favoriteFinder.findAllByUserId(userId)); + return UserFavoritesGetResponse.of(favoriteFinder.findAllByUserId(userId)); } @Transactional(readOnly = true) public UserProfileAndNicknameResponse getUserProfileAndNickname(final Long userId) { - return UserProfileAndNicknameResponse.of(userInfoFinder.getUserInfo(userId)); + return UserProfileAndNicknameResponse.of(userInfoFinder.getUserInfo(userId)); + } + + @Transactional(readOnly = true) + public UserHeartedStoreListResponse findUserHeartedStoresView(final Long userId) { + List hearts = heartFinder.findHeartedStoresByUserId(userId); + return UserHeartedStoreListResponse.of(hearts); } } diff --git a/src/main/java/org/hankki/hankkiserver/domain/heart/repository/HeartRepository.java b/src/main/java/org/hankki/hankkiserver/domain/heart/repository/HeartRepository.java index d0e7d5c2..a1117a37 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/heart/repository/HeartRepository.java +++ b/src/main/java/org/hankki/hankkiserver/domain/heart/repository/HeartRepository.java @@ -4,9 +4,18 @@ import org.hankki.hankkiserver.domain.store.model.Store; import org.hankki.hankkiserver.domain.user.model.User; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; public interface HeartRepository extends JpaRepository { boolean existsByUserAndStore(User user, Store store); void deleteByUserAndStore(User user, Store store); + + @Query("SELECT h FROM Heart h " + + "JOIN FETCH h.store s " + + "JOIN FETCH s.images " + + "WHERE h.user.id = :userId AND s.isDeleted = false") + List findHeartedStoresByUserId(Long userId); } diff --git a/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java b/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java index 4fa67e8f..882e5b2b 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java +++ b/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java @@ -4,6 +4,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import java.util.List; import java.util.Optional; public interface StoreRepository extends JpaRepository { From 4fdd9509a30efcdf4c38106f1e209f96e6d7eabd Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Mon, 15 Jul 2024 22:28:59 +0900 Subject: [PATCH 11/22] [refac] rename field of dto --- .../api/user/service/response/UserHeartedStoreViewResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreViewResponse.java b/src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreViewResponse.java index cfcde916..db06dfee 100644 --- a/src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreViewResponse.java +++ b/src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreViewResponse.java @@ -5,7 +5,7 @@ public record UserHeartedStoreViewResponse( Long id, String name, - String imageURL, + String imageUrl, String category, int lowestPrice, int heartCount From f0239f6858db47f78d034a515a57786b0ba14c37 Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Mon, 15 Jul 2024 22:32:22 +0900 Subject: [PATCH 12/22] [refac] add validation and fix typing missing --- .../hankkiserver/api/auth/controller/AuthController.java | 3 ++- .../api/auth/controller/request/UserLoginRequest.java | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/hankki/hankkiserver/api/auth/controller/AuthController.java b/src/main/java/org/hankki/hankkiserver/api/auth/controller/AuthController.java index 10fa22cf..309e22f0 100644 --- a/src/main/java/org/hankki/hankkiserver/api/auth/controller/AuthController.java +++ b/src/main/java/org/hankki/hankkiserver/api/auth/controller/AuthController.java @@ -1,6 +1,7 @@ package org.hankki.hankkiserver.api.auth.controller; import jakarta.annotation.Nullable; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.hankki.hankkiserver.auth.UserId; import org.hankki.hankkiserver.api.dto.HankkiResponse; @@ -22,7 +23,7 @@ public class AuthController { @PostMapping("/auth/login") public HankkiResponse login( @RequestHeader(HttpHeaders.AUTHORIZATION) final String token, - @RequestBody final UserLoginRequest request) { + @Valid @RequestBody final UserLoginRequest request) { final UserLoginResponse response = authService.login(token, request); return HankkiResponse.success(CommonSuccessCode.OK, response); } diff --git a/src/main/java/org/hankki/hankkiserver/api/auth/controller/request/UserLoginRequest.java b/src/main/java/org/hankki/hankkiserver/api/auth/controller/request/UserLoginRequest.java index 7caafcc1..27310e49 100644 --- a/src/main/java/org/hankki/hankkiserver/api/auth/controller/request/UserLoginRequest.java +++ b/src/main/java/org/hankki/hankkiserver/api/auth/controller/request/UserLoginRequest.java @@ -1,10 +1,12 @@ package org.hankki.hankkiserver.api.auth.controller.request; import jakarta.annotation.Nullable; +import jakarta.validation.constraints.NotNull; public record UserLoginRequest( @Nullable String name, + @NotNull String platform ) { } From fffb250ddf623b515001049c7ba501c81a7f881e Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Mon, 15 Jul 2024 22:51:50 +0900 Subject: [PATCH 13/22] [feat] reflect sorting order --- .../domain/heart/repository/HeartRepository.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/hankki/hankkiserver/domain/heart/repository/HeartRepository.java b/src/main/java/org/hankki/hankkiserver/domain/heart/repository/HeartRepository.java index a1117a37..6102ee57 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/heart/repository/HeartRepository.java +++ b/src/main/java/org/hankki/hankkiserver/domain/heart/repository/HeartRepository.java @@ -13,9 +13,7 @@ public interface HeartRepository extends JpaRepository { boolean existsByUserAndStore(User user, Store store); void deleteByUserAndStore(User user, Store store); - @Query("SELECT h FROM Heart h " + - "JOIN FETCH h.store s " + - "JOIN FETCH s.images " + - "WHERE h.user.id = :userId AND s.isDeleted = false") + @Query("select h from Heart h join fetch h.store s join fetch s.storeImages " + + "where h.user.id = :userId and s.isDeleted = false order by h.id desc") List findHeartedStoresByUserId(Long userId); } From 9c6bbc97048242362b144e70103ae1b8182e8e2a Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Mon, 15 Jul 2024 22:57:40 +0900 Subject: [PATCH 14/22] [refac] delete unnecessary blank and imports --- .../hankkiserver/api/store/controller/StoreController.java | 1 - .../java/org/hankki/hankkiserver/domain/heart/model/Heart.java | 1 - .../hankki/hankkiserver/domain/store/model/StoreCategory.java | 2 -- .../hankkiserver/domain/store/repository/StoreRepository.java | 1 - .../org/hankki/hankkiserver/domain/user/model/UserInfo.java | 1 - .../hankkiserver/domain/user/repository/UserInfoRepository.java | 1 - 6 files changed, 7 deletions(-) diff --git a/src/main/java/org/hankki/hankkiserver/api/store/controller/StoreController.java b/src/main/java/org/hankki/hankkiserver/api/store/controller/StoreController.java index 1297a112..70f6c2ad 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/controller/StoreController.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/controller/StoreController.java @@ -17,7 +17,6 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; - @RestController @RequiredArgsConstructor @RequestMapping("/api/v1") diff --git a/src/main/java/org/hankki/hankkiserver/domain/heart/model/Heart.java b/src/main/java/org/hankki/hankkiserver/domain/heart/model/Heart.java index fef0fc65..879e91fa 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/heart/model/Heart.java +++ b/src/main/java/org/hankki/hankkiserver/domain/heart/model/Heart.java @@ -38,5 +38,4 @@ public static final Heart createHeart(User user, Store store) { .store(store) .build(); } - } diff --git a/src/main/java/org/hankki/hankkiserver/domain/store/model/StoreCategory.java b/src/main/java/org/hankki/hankkiserver/domain/store/model/StoreCategory.java index c1860158..e05bac81 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/store/model/StoreCategory.java +++ b/src/main/java/org/hankki/hankkiserver/domain/store/model/StoreCategory.java @@ -1,9 +1,7 @@ package org.hankki.hankkiserver.domain.store.model; -import lombok.AllArgsConstructor; import lombok.Getter; import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Value; @Getter @RequiredArgsConstructor diff --git a/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java b/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java index 882e5b2b..4fa67e8f 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java +++ b/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java @@ -4,7 +4,6 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; -import java.util.List; import java.util.Optional; public interface StoreRepository extends JpaRepository { diff --git a/src/main/java/org/hankki/hankkiserver/domain/user/model/UserInfo.java b/src/main/java/org/hankki/hankkiserver/domain/user/model/UserInfo.java index 9cd87f34..cd0ca008 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/user/model/UserInfo.java +++ b/src/main/java/org/hankki/hankkiserver/domain/user/model/UserInfo.java @@ -1,6 +1,5 @@ package org.hankki.hankkiserver.domain.user.model; - import jakarta.persistence.*; import lombok.*; diff --git a/src/main/java/org/hankki/hankkiserver/domain/user/repository/UserInfoRepository.java b/src/main/java/org/hankki/hankkiserver/domain/user/repository/UserInfoRepository.java index a238ea15..91aa6b33 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/user/repository/UserInfoRepository.java +++ b/src/main/java/org/hankki/hankkiserver/domain/user/repository/UserInfoRepository.java @@ -1,6 +1,5 @@ package org.hankki.hankkiserver.domain.user.repository; - import org.hankki.hankkiserver.domain.user.model.UserInfo; import org.springframework.data.jpa.repository.JpaRepository; From db0e3d48235123e4d75d0f6b2216023bd0b3b01a Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Mon, 15 Jul 2024 23:21:06 +0900 Subject: [PATCH 15/22] [feat] logic for validate registered store --- .../api/store/service/HeartFinder.java | 8 ------- .../api/user/controller/UserController.java | 6 ----- .../api/user/service/UserQueryService.java | 10 -------- .../UserHeartedStoreListResponse.java | 14 ----------- .../UserHeartedStoreViewResponse.java | 23 ------------------- .../heart/repository/HeartRepository.java | 7 ------ 6 files changed, 68 deletions(-) delete mode 100644 src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreListResponse.java delete mode 100644 src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreViewResponse.java diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/HeartFinder.java b/src/main/java/org/hankki/hankkiserver/api/store/service/HeartFinder.java index d1795252..95c4feca 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/HeartFinder.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/HeartFinder.java @@ -1,15 +1,11 @@ package org.hankki.hankkiserver.api.store.service; import lombok.RequiredArgsConstructor; -import org.hankki.hankkiserver.domain.heart.model.Heart; import org.hankki.hankkiserver.domain.heart.repository.HeartRepository; import org.hankki.hankkiserver.domain.store.model.Store; import org.hankki.hankkiserver.domain.user.model.User; import org.springframework.stereotype.Component; -import java.util.List; -import java.util.Optional; - @Component @RequiredArgsConstructor public class HeartFinder { @@ -19,8 +15,4 @@ public class HeartFinder { public boolean existsByUserAndStore(final User user, final Store store) { return heartRepository.existsByUserAndStore(user, store); } - - public List findHeartedStoresByUserId(final Long userId) { - return heartRepository.findHeartedStoresByUserId(userId); - } } diff --git a/src/main/java/org/hankki/hankkiserver/api/user/controller/UserController.java b/src/main/java/org/hankki/hankkiserver/api/user/controller/UserController.java index ee851a06..e00ac83c 100644 --- a/src/main/java/org/hankki/hankkiserver/api/user/controller/UserController.java +++ b/src/main/java/org/hankki/hankkiserver/api/user/controller/UserController.java @@ -8,7 +8,6 @@ import org.hankki.hankkiserver.api.user.service.UserQueryService; import org.hankki.hankkiserver.api.user.service.command.UserUniversityPostCommand; import org.hankki.hankkiserver.api.user.service.response.UserFavoritesGetResponse; -import org.hankki.hankkiserver.api.user.service.response.UserHeartedStoreListResponse; import org.hankki.hankkiserver.api.user.service.response.UserProfileAndNicknameResponse; import org.hankki.hankkiserver.api.user.service.response.UserUniversityFindResponse; import org.hankki.hankkiserver.auth.UserId; @@ -44,9 +43,4 @@ public HankkiResponse getUserProfileAndNickname( public HankkiResponse findUserFavorites(@UserId final Long userId) { return HankkiResponse.success(CommonSuccessCode.OK, userQueryService.findUserFavorites(userId)); } - - @GetMapping("/users/me/stores/hearts") - public HankkiResponse getUserHeartedStores(@UserId final Long userId) { - return HankkiResponse.success(CommonSuccessCode.OK, userQueryService.findUserHeartedStoresView(userId)); - } } diff --git a/src/main/java/org/hankki/hankkiserver/api/user/service/UserQueryService.java b/src/main/java/org/hankki/hankkiserver/api/user/service/UserQueryService.java index daeebfa1..41da7934 100644 --- a/src/main/java/org/hankki/hankkiserver/api/user/service/UserQueryService.java +++ b/src/main/java/org/hankki/hankkiserver/api/user/service/UserQueryService.java @@ -6,16 +6,12 @@ import org.hankki.hankkiserver.api.store.service.HeartFinder; import org.hankki.hankkiserver.api.user.service.response.UserFavoritesGetResponse; import org.hankki.hankkiserver.api.user.service.response.UserProfileAndNicknameResponse; -import org.hankki.hankkiserver.api.user.service.response.UserHeartedStoreListResponse; import org.hankki.hankkiserver.api.user.service.response.UserUniversityFindResponse; import org.hankki.hankkiserver.common.code.UserUniversityErrorCode; import org.hankki.hankkiserver.common.exception.NotFoundException; -import org.hankki.hankkiserver.domain.heart.model.Heart; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.List; - @Service @RequiredArgsConstructor public class UserQueryService { @@ -40,10 +36,4 @@ public UserFavoritesGetResponse findUserFavorites(final Long userId) { public UserProfileAndNicknameResponse getUserProfileAndNickname(final Long userId) { return UserProfileAndNicknameResponse.of(userInfoFinder.getUserInfo(userId)); } - - @Transactional(readOnly = true) - public UserHeartedStoreListResponse findUserHeartedStoresView(final Long userId) { - List hearts = heartFinder.findHeartedStoresByUserId(userId); - return UserHeartedStoreListResponse.of(hearts); - } } diff --git a/src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreListResponse.java b/src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreListResponse.java deleted file mode 100644 index 59eb1b5e..00000000 --- a/src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreListResponse.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.hankki.hankkiserver.api.user.service.response; - -import org.hankki.hankkiserver.domain.heart.model.Heart; - -import java.util.List; - -public record UserHeartedStoreListResponse( - List stores -) { - public static UserHeartedStoreListResponse of(List hearts) { - return new UserHeartedStoreListResponse(hearts.stream() - .map(UserHeartedStoreViewResponse::of).toList()); - } -} diff --git a/src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreViewResponse.java b/src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreViewResponse.java deleted file mode 100644 index db06dfee..00000000 --- a/src/main/java/org/hankki/hankkiserver/api/user/service/response/UserHeartedStoreViewResponse.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.hankki.hankkiserver.api.user.service.response; - -import org.hankki.hankkiserver.domain.heart.model.Heart; - -public record UserHeartedStoreViewResponse( - Long id, - String name, - String imageUrl, - String category, - int lowestPrice, - int heartCount -) { - public static UserHeartedStoreViewResponse of(Heart heart) { - return new UserHeartedStoreViewResponse( - heart.getStore().getId(), - heart.getStore().getName(), - heart.getStore().getImage(), - heart.getStore().getCategory().getName(), - heart.getStore().getLowestPrice(), - heart.getStore().getHeartCount() - ); - } -} diff --git a/src/main/java/org/hankki/hankkiserver/domain/heart/repository/HeartRepository.java b/src/main/java/org/hankki/hankkiserver/domain/heart/repository/HeartRepository.java index 6102ee57..d0e7d5c2 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/heart/repository/HeartRepository.java +++ b/src/main/java/org/hankki/hankkiserver/domain/heart/repository/HeartRepository.java @@ -4,16 +4,9 @@ import org.hankki.hankkiserver.domain.store.model.Store; import org.hankki.hankkiserver.domain.user.model.User; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; - -import java.util.List; public interface HeartRepository extends JpaRepository { boolean existsByUserAndStore(User user, Store store); void deleteByUserAndStore(User user, Store store); - - @Query("select h from Heart h join fetch h.store s join fetch s.storeImages " + - "where h.user.id = :userId and s.isDeleted = false order by h.id desc") - List findHeartedStoresByUserId(Long userId); } From 26e785258088aae281e2f2ba733847926ecb4162 Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Tue, 16 Jul 2024 14:29:07 +0900 Subject: [PATCH 16/22] [feat] logic for validate already registered store --- .../api/store/controller/StoreController.java | 19 +++++++---------- .../StoreDuplicateValidationRequest.java | 6 +++--- .../api/store/service/StoreFinder.java | 7 +++++-- .../api/store/service/StoreQueryService.java | 21 +++++++++++++------ .../store/service/UniversityStoreFinder.java | 6 +++--- .../command/StoreValidationCommand.java | 13 ++++++++++++ .../common/code/StoreErrorCode.java | 3 ++- .../store/repository/StoreRepository.java | 5 +++++ .../model/UniversityStore.java | 1 - .../repository/UniversityStoreRepository.java | 5 ++--- 10 files changed, 56 insertions(+), 30 deletions(-) create mode 100644 src/main/java/org/hankki/hankkiserver/api/store/service/command/StoreValidationCommand.java diff --git a/src/main/java/org/hankki/hankkiserver/api/store/controller/StoreController.java b/src/main/java/org/hankki/hankkiserver/api/store/controller/StoreController.java index 70f6c2ad..c52b2665 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/controller/StoreController.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/controller/StoreController.java @@ -3,18 +3,14 @@ import lombok.RequiredArgsConstructor; import org.hankki.hankkiserver.api.dto.HankkiResponse; import org.hankki.hankkiserver.api.store.controller.request.StoreDuplicateValidationRequest; -import org.hankki.hankkiserver.api.store.service.StoreQueryService; -import org.hankki.hankkiserver.api.store.service.response.*; -import org.hankki.hankkiserver.common.code.CommonSuccessCode; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.hankki.hankkiserver.auth.UserId; import org.hankki.hankkiserver.api.store.service.HeartCommandService; +import org.hankki.hankkiserver.api.store.service.StoreQueryService; import org.hankki.hankkiserver.api.store.service.command.StoreDeleteCommand; import org.hankki.hankkiserver.api.store.service.command.StorePostCommand; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.hankki.hankkiserver.api.store.service.command.StoreValidationCommand; +import org.hankki.hankkiserver.api.store.service.response.*; +import org.hankki.hankkiserver.auth.UserId; +import org.hankki.hankkiserver.common.code.CommonSuccessCode; import org.springframework.web.bind.annotation.*; @RestController @@ -61,7 +57,8 @@ public HankkiResponse deleteHeartStore(@UserId final Long u } @GetMapping("/stores/validate") - public HankkiResponse validateDuplicatedStore(@RequestBody final StoreDuplicateValidationRequest request) { - return HankkiResponse.success(CommonSuccessCode.OK, storeQueryService.validateDuplicatedStore(request)); + public HankkiResponse validateDuplicatedStore(@RequestBody final StoreDuplicateValidationRequest request) { + storeQueryService.validateDuplicatedStore(StoreValidationCommand.of(request)); + return HankkiResponse.success(CommonSuccessCode.OK); } } diff --git a/src/main/java/org/hankki/hankkiserver/api/store/controller/request/StoreDuplicateValidationRequest.java b/src/main/java/org/hankki/hankkiserver/api/store/controller/request/StoreDuplicateValidationRequest.java index 65ab3acb..2e310c42 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/controller/request/StoreDuplicateValidationRequest.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/controller/request/StoreDuplicateValidationRequest.java @@ -1,8 +1,8 @@ package org.hankki.hankkiserver.api.store.controller.request; public record StoreDuplicateValidationRequest( - Long id, - Double latitude, - Double longitude + long universityId, + double latitude, + double longitude ) { } diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreFinder.java b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreFinder.java index cbe6dda4..bc38aca8 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreFinder.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreFinder.java @@ -3,12 +3,11 @@ import lombok.RequiredArgsConstructor; import org.hankki.hankkiserver.common.code.StoreErrorCode; import org.hankki.hankkiserver.common.exception.NotFoundException; -import org.hankki.hankkiserver.domain.heart.repository.HeartRepository; import org.hankki.hankkiserver.domain.store.model.Store; import org.hankki.hankkiserver.domain.store.repository.StoreRepository; import org.springframework.stereotype.Component; -import java.util.List; +import java.util.Optional; @Component @RequiredArgsConstructor @@ -30,4 +29,8 @@ protected Store findByIdWithHeartAndIsDeletedFalse(final Long id) { return storeRepository.findByIdWithHeartAndIsDeletedFalse(id) .orElseThrow(() -> new NotFoundException(StoreErrorCode.STORE_NOT_FOUND)); } + + protected Optional findByLatitudeAndLongitude(final double latitude, final double longitude) { + return storeRepository.findByPoint_LatitudeAndPoint_Longitude(latitude, longitude); + } } diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java index 523fc822..33a1b6bd 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java @@ -1,11 +1,14 @@ package org.hankki.hankkiserver.api.store.service; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.hankki.hankkiserver.api.menu.service.MenuFinder; -import org.hankki.hankkiserver.api.store.controller.request.StoreDuplicateValidationRequest; import org.hankki.hankkiserver.api.store.parameter.PriceCategory; import org.hankki.hankkiserver.api.store.parameter.SortOption; +import org.hankki.hankkiserver.api.store.service.command.StoreValidationCommand; import org.hankki.hankkiserver.api.store.service.response.*; +import org.hankki.hankkiserver.common.code.StoreErrorCode; +import org.hankki.hankkiserver.common.exception.ConflictException; import org.hankki.hankkiserver.domain.heart.model.Heart; import org.hankki.hankkiserver.domain.store.model.Store; import org.hankki.hankkiserver.domain.store.model.StoreCategory; @@ -18,6 +21,7 @@ @Service @RequiredArgsConstructor +@Slf4j public class StoreQueryService { private final StoreFinder storeFinder; @@ -77,10 +81,15 @@ private static boolean isLiked(final Long id, final Heart heart) { } @Transactional(readOnly = true) - public StoreDuplicateValidationResponse validateDuplicatedStore(final StoreDuplicateValidationRequest request) { - Long storeId = universityStoreFinder.findUniversityStoreWithLatitudeAndLongitude(request.id(), request.latitude(), request.longitude()) - .map(UniversityStore->UniversityStore.getStore().getId()) - .orElse(null); - return new StoreDuplicateValidationResponse(storeId); + public void validateDuplicatedStore(final StoreValidationCommand command) { + storeFinder.findByLatitudeAndLongitude(command.latitude(), command.longitude()) + .ifPresent(store -> findUniversityStore(command.universityId(), store)); + } + + private void findUniversityStore(final Long universityId, final Store store) { + universityStoreFinder.findByUniversityIdAndStore(universityId, store) + .ifPresent(universityStore -> { + throw new ConflictException(StoreErrorCode.STORE_ALREADY_REGISTERED); + }); } } diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/UniversityStoreFinder.java b/src/main/java/org/hankki/hankkiserver/api/store/service/UniversityStoreFinder.java index 37a16bd5..280e68a8 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/UniversityStoreFinder.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/UniversityStoreFinder.java @@ -1,6 +1,7 @@ package org.hankki.hankkiserver.api.store.service; import lombok.RequiredArgsConstructor; +import org.hankki.hankkiserver.domain.store.model.Store; import org.hankki.hankkiserver.domain.universitystore.model.UniversityStore; import org.hankki.hankkiserver.domain.universitystore.repository.UniversityStoreRepository; import org.springframework.stereotype.Component; @@ -13,8 +14,7 @@ public class UniversityStoreFinder { private final UniversityStoreRepository universityStoreRepository; - public Optional findUniversityStoreWithLatitudeAndLongitude(Long id, Double latitude, Double longitude) { - return universityStoreRepository.findUniversityStoreByLatitudeAndLongitude(id, latitude, longitude); + protected Optional findByUniversityIdAndStore(final Long universityId, final Store store) { + return universityStoreRepository.findByUniversityIdAndStore(universityId, store); } - } diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/command/StoreValidationCommand.java b/src/main/java/org/hankki/hankkiserver/api/store/service/command/StoreValidationCommand.java new file mode 100644 index 00000000..6159d1c1 --- /dev/null +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/command/StoreValidationCommand.java @@ -0,0 +1,13 @@ +package org.hankki.hankkiserver.api.store.service.command; + +import org.hankki.hankkiserver.api.store.controller.request.StoreDuplicateValidationRequest; + +public record StoreValidationCommand ( + long universityId, + double latitude, + double longitude +) { + public static StoreValidationCommand of(StoreDuplicateValidationRequest request) { + return new StoreValidationCommand(request.universityId(), request.latitude(), request.longitude()); + } +} diff --git a/src/main/java/org/hankki/hankkiserver/common/code/StoreErrorCode.java b/src/main/java/org/hankki/hankkiserver/common/code/StoreErrorCode.java index d88b16f9..16dc03de 100644 --- a/src/main/java/org/hankki/hankkiserver/common/code/StoreErrorCode.java +++ b/src/main/java/org/hankki/hankkiserver/common/code/StoreErrorCode.java @@ -8,7 +8,8 @@ @RequiredArgsConstructor public enum StoreErrorCode implements ErrorCode { - STORE_NOT_FOUND(HttpStatus.NOT_FOUND, "가게를 찾을 수 없습니다."); + STORE_NOT_FOUND(HttpStatus.NOT_FOUND, "가게를 찾을 수 없습니다."), + STORE_ALREADY_REGISTERED(HttpStatus.CONFLICT, "이미 등록된 가게입니다."); private final HttpStatus httpStatus; private final String message; diff --git a/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java b/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java index 4fa67e8f..788c0765 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java +++ b/src/main/java/org/hankki/hankkiserver/domain/store/repository/StoreRepository.java @@ -12,4 +12,9 @@ public interface StoreRepository extends JpaRepository { @Query("select s from Store s join fetch s.hearts where s.id = :id and s.isDeleted = false") Optional findByIdWithHeartAndIsDeletedFalse(Long id); + + @Query("select s from Store s where s.point.latitude = :latitude and s.point.longitude = :longitude") + Optional findByPoint_LatitudeAndPoint_Longitude(double latitude, double longitude); + + Optional findByName(String name); } diff --git a/src/main/java/org/hankki/hankkiserver/domain/universitystore/model/UniversityStore.java b/src/main/java/org/hankki/hankkiserver/domain/universitystore/model/UniversityStore.java index 71625a11..be6147f2 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/universitystore/model/UniversityStore.java +++ b/src/main/java/org/hankki/hankkiserver/domain/universitystore/model/UniversityStore.java @@ -24,5 +24,4 @@ public class UniversityStore { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "store_id") private Store store; - } diff --git a/src/main/java/org/hankki/hankkiserver/domain/universitystore/repository/UniversityStoreRepository.java b/src/main/java/org/hankki/hankkiserver/domain/universitystore/repository/UniversityStoreRepository.java index 4f5e06f4..6d1b7efa 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/universitystore/repository/UniversityStoreRepository.java +++ b/src/main/java/org/hankki/hankkiserver/domain/universitystore/repository/UniversityStoreRepository.java @@ -1,13 +1,12 @@ package org.hankki.hankkiserver.domain.universitystore.repository; +import org.hankki.hankkiserver.domain.store.model.Store; import org.hankki.hankkiserver.domain.universitystore.model.UniversityStore; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; import java.util.Optional; public interface UniversityStoreRepository extends JpaRepository { - @Query("select us from UniversityStore us join fetch us.store s where us.id = :id and s.point.latitude = :latitude and s.point.longitude = :longitude") - Optional findUniversityStoreByLatitudeAndLongitude(Long id, Double latitude, Double longitude); + Optional findByUniversityIdAndStore(Long universityId, Store store); } From adac9257fb38b178ee79efb9d16e62af69550ff9 Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Tue, 16 Jul 2024 14:29:58 +0900 Subject: [PATCH 17/22] [feat] update server-yml --- server-yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server-yml b/server-yml index 7271745f..3e46404d 160000 --- a/server-yml +++ b/server-yml @@ -1 +1 @@ -Subproject commit 7271745fce0c694f42ab8e5d7fe3655b3fa18e4a +Subproject commit 3e46404da87abd369a875ff5e2b95b2131b18647 From d5e0c7d4db9e3a371256312052c598570d49beae Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Tue, 16 Jul 2024 15:35:47 +0900 Subject: [PATCH 18/22] [feat] logic for creat fail response --- server-yml | 2 +- .../hankkiserver/api/advice/GlobalExceptionHandler.java | 5 ++--- .../org/hankki/hankkiserver/api/dto/HankkiResponse.java | 4 ++++ .../hankkiserver/api/store/service/StoreQueryService.java | 2 +- .../hankkiserver/common/exception/ConflictException.java | 7 +++++++ 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/server-yml b/server-yml index 3e46404d..7271745f 160000 --- a/server-yml +++ b/server-yml @@ -1 +1 @@ -Subproject commit 3e46404da87abd369a875ff5e2b95b2131b18647 +Subproject commit 7271745fce0c694f42ab8e5d7fe3655b3fa18e4a diff --git a/src/main/java/org/hankki/hankkiserver/api/advice/GlobalExceptionHandler.java b/src/main/java/org/hankki/hankkiserver/api/advice/GlobalExceptionHandler.java index 44e6cad8..9b41dfff 100644 --- a/src/main/java/org/hankki/hankkiserver/api/advice/GlobalExceptionHandler.java +++ b/src/main/java/org/hankki/hankkiserver/api/advice/GlobalExceptionHandler.java @@ -7,7 +7,6 @@ import org.hankki.hankkiserver.common.exception.ConflictException; import org.hankki.hankkiserver.common.exception.NotFoundException; import org.hankki.hankkiserver.common.exception.UnauthorizedException; - import org.springframework.web.bind.MissingServletRequestParameterException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @@ -35,9 +34,9 @@ public HankkiResponse handleEntityNotFoundException(NotFoundException e) { } @ExceptionHandler(ConflictException.class) - public HankkiResponse handleConflictException(ConflictException e) { + public HankkiResponse handleConflictException(ConflictException e) { log.error("handleConflictException() in GlobalExceptionHandler throw ConflictException : {}", e.getMessage()); - return HankkiResponse.fail(e.getErrorCode()); + return HankkiResponse.fail(e.getErrorCode(), e.getData()); } @ExceptionHandler(MissingServletRequestParameterException.class) diff --git a/src/main/java/org/hankki/hankkiserver/api/dto/HankkiResponse.java b/src/main/java/org/hankki/hankkiserver/api/dto/HankkiResponse.java index 4e2d6b00..46e548e9 100644 --- a/src/main/java/org/hankki/hankkiserver/api/dto/HankkiResponse.java +++ b/src/main/java/org/hankki/hankkiserver/api/dto/HankkiResponse.java @@ -27,4 +27,8 @@ public static HankkiResponse success(SuccessCode success, T data) { public static HankkiResponse fail(ErrorCode error) { return new HankkiResponse<>(error.getHttpStatus().value(), error.getMessage()); } + + public static HankkiResponse fail(ErrorCode error, T data) { + return new HankkiResponse<>(error.getHttpStatus().value(), error.getMessage(), data); + } } diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java index 33a1b6bd..74f4164e 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java @@ -89,7 +89,7 @@ public void validateDuplicatedStore(final StoreValidationCommand command) { private void findUniversityStore(final Long universityId, final Store store) { universityStoreFinder.findByUniversityIdAndStore(universityId, store) .ifPresent(universityStore -> { - throw new ConflictException(StoreErrorCode.STORE_ALREADY_REGISTERED); + throw new ConflictException(StoreErrorCode.STORE_ALREADY_REGISTERED, new StoreDuplicateValidationResponse(store.getId())); }); } } diff --git a/src/main/java/org/hankki/hankkiserver/common/exception/ConflictException.java b/src/main/java/org/hankki/hankkiserver/common/exception/ConflictException.java index aa2d9182..b55fa18e 100644 --- a/src/main/java/org/hankki/hankkiserver/common/exception/ConflictException.java +++ b/src/main/java/org/hankki/hankkiserver/common/exception/ConflictException.java @@ -6,9 +6,16 @@ @Getter public class ConflictException extends RuntimeException { private final ErrorCode errorCode; + private Object data; public ConflictException(ErrorCode errorCode) { super(errorCode.getMessage()); this.errorCode = errorCode; } + + public ConflictException(ErrorCode errorCode, Object data) { + super(errorCode.getMessage()); + this.errorCode = errorCode; + this.data = data; + } } From 245c8adb7218dd8d9f9c00833cb2d9e2276cab0f Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Tue, 16 Jul 2024 16:18:59 +0900 Subject: [PATCH 19/22] [refac] change the optional return value to boolean --- .../hankkiserver/api/store/service/StoreQueryService.java | 7 +++---- .../api/store/service/UniversityStoreFinder.java | 7 ++----- .../repository/UniversityStoreRepository.java | 4 +--- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java index 74f4164e..fee68be5 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java @@ -87,9 +87,8 @@ public void validateDuplicatedStore(final StoreValidationCommand command) { } private void findUniversityStore(final Long universityId, final Store store) { - universityStoreFinder.findByUniversityIdAndStore(universityId, store) - .ifPresent(universityStore -> { - throw new ConflictException(StoreErrorCode.STORE_ALREADY_REGISTERED, new StoreDuplicateValidationResponse(store.getId())); - }); + if (universityStoreFinder.findByUniversityIdAndStore(universityId, store)) { + throw new ConflictException(StoreErrorCode.STORE_ALREADY_REGISTERED, new StoreDuplicateValidationResponse(store.getId())); + } } } diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/UniversityStoreFinder.java b/src/main/java/org/hankki/hankkiserver/api/store/service/UniversityStoreFinder.java index 280e68a8..318a896e 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/UniversityStoreFinder.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/UniversityStoreFinder.java @@ -2,19 +2,16 @@ import lombok.RequiredArgsConstructor; import org.hankki.hankkiserver.domain.store.model.Store; -import org.hankki.hankkiserver.domain.universitystore.model.UniversityStore; import org.hankki.hankkiserver.domain.universitystore.repository.UniversityStoreRepository; import org.springframework.stereotype.Component; -import java.util.Optional; - @Component @RequiredArgsConstructor public class UniversityStoreFinder { private final UniversityStoreRepository universityStoreRepository; - protected Optional findByUniversityIdAndStore(final Long universityId, final Store store) { - return universityStoreRepository.findByUniversityIdAndStore(universityId, store); + protected boolean findByUniversityIdAndStore(final Long universityId, final Store store) { + return universityStoreRepository.existsByUniversityIdAndStore(universityId, store); } } diff --git a/src/main/java/org/hankki/hankkiserver/domain/universitystore/repository/UniversityStoreRepository.java b/src/main/java/org/hankki/hankkiserver/domain/universitystore/repository/UniversityStoreRepository.java index 6d1b7efa..f4653170 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/universitystore/repository/UniversityStoreRepository.java +++ b/src/main/java/org/hankki/hankkiserver/domain/universitystore/repository/UniversityStoreRepository.java @@ -4,9 +4,7 @@ import org.hankki.hankkiserver.domain.universitystore.model.UniversityStore; import org.springframework.data.jpa.repository.JpaRepository; -import java.util.Optional; - public interface UniversityStoreRepository extends JpaRepository { - Optional findByUniversityIdAndStore(Long universityId, Store store); + boolean existsByUniversityIdAndStore(Long universityId, Store store); } From 759192ea259cb54c5eb52587aa6ac91ebb768493 Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Tue, 16 Jul 2024 17:15:08 +0900 Subject: [PATCH 20/22] [refac] reaname response dto --- .../hankkiserver/api/store/service/StoreQueryService.java | 3 ++- ...alidationResponse.java => StoreDuplicateErrorResponse.java} | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) rename src/main/java/org/hankki/hankkiserver/api/store/service/response/{StoreDuplicateValidationResponse.java => StoreDuplicateErrorResponse.java} (64%) diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java index fee68be5..6cd4649e 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java @@ -84,11 +84,12 @@ private static boolean isLiked(final Long id, final Heart heart) { public void validateDuplicatedStore(final StoreValidationCommand command) { storeFinder.findByLatitudeAndLongitude(command.latitude(), command.longitude()) .ifPresent(store -> findUniversityStore(command.universityId(), store)); + } private void findUniversityStore(final Long universityId, final Store store) { if (universityStoreFinder.findByUniversityIdAndStore(universityId, store)) { - throw new ConflictException(StoreErrorCode.STORE_ALREADY_REGISTERED, new StoreDuplicateValidationResponse(store.getId())); + throw new ConflictException(StoreErrorCode.STORE_ALREADY_REGISTERED, new StoreDuplicateErrorResponse(store.getId())); } } } diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/response/StoreDuplicateValidationResponse.java b/src/main/java/org/hankki/hankkiserver/api/store/service/response/StoreDuplicateErrorResponse.java similarity index 64% rename from src/main/java/org/hankki/hankkiserver/api/store/service/response/StoreDuplicateValidationResponse.java rename to src/main/java/org/hankki/hankkiserver/api/store/service/response/StoreDuplicateErrorResponse.java index 22a54efb..79bd5d6e 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/response/StoreDuplicateValidationResponse.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/response/StoreDuplicateErrorResponse.java @@ -1,6 +1,6 @@ package org.hankki.hankkiserver.api.store.service.response; -public record StoreDuplicateValidationResponse( +public record StoreDuplicateErrorResponse( Long storeId ) { } From b0478ba8ce45f1c694b543a0a4797e3457d0f24e Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Tue, 16 Jul 2024 19:01:17 +0900 Subject: [PATCH 21/22] [refac] modify exception situation response --- .../hankkiserver/api/advice/GlobalExceptionHandler.java | 4 ++-- .../org/hankki/hankkiserver/api/dto/HankkiResponse.java | 4 ---- .../hankkiserver/api/store/service/StoreQueryService.java | 2 +- .../hankkiserver/common/exception/ConflictException.java | 7 ------- 4 files changed, 3 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/hankki/hankkiserver/api/advice/GlobalExceptionHandler.java b/src/main/java/org/hankki/hankkiserver/api/advice/GlobalExceptionHandler.java index 9b41dfff..79484a6d 100644 --- a/src/main/java/org/hankki/hankkiserver/api/advice/GlobalExceptionHandler.java +++ b/src/main/java/org/hankki/hankkiserver/api/advice/GlobalExceptionHandler.java @@ -34,9 +34,9 @@ public HankkiResponse handleEntityNotFoundException(NotFoundException e) { } @ExceptionHandler(ConflictException.class) - public HankkiResponse handleConflictException(ConflictException e) { + public HankkiResponse handleConflictException(ConflictException e) { log.error("handleConflictException() in GlobalExceptionHandler throw ConflictException : {}", e.getMessage()); - return HankkiResponse.fail(e.getErrorCode(), e.getData()); + return HankkiResponse.fail(e.getErrorCode()); } @ExceptionHandler(MissingServletRequestParameterException.class) diff --git a/src/main/java/org/hankki/hankkiserver/api/dto/HankkiResponse.java b/src/main/java/org/hankki/hankkiserver/api/dto/HankkiResponse.java index 46e548e9..4e2d6b00 100644 --- a/src/main/java/org/hankki/hankkiserver/api/dto/HankkiResponse.java +++ b/src/main/java/org/hankki/hankkiserver/api/dto/HankkiResponse.java @@ -27,8 +27,4 @@ public static HankkiResponse success(SuccessCode success, T data) { public static HankkiResponse fail(ErrorCode error) { return new HankkiResponse<>(error.getHttpStatus().value(), error.getMessage()); } - - public static HankkiResponse fail(ErrorCode error, T data) { - return new HankkiResponse<>(error.getHttpStatus().value(), error.getMessage(), data); - } } diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java index 6cd4649e..4cf9ff5e 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java @@ -89,7 +89,7 @@ public void validateDuplicatedStore(final StoreValidationCommand command) { private void findUniversityStore(final Long universityId, final Store store) { if (universityStoreFinder.findByUniversityIdAndStore(universityId, store)) { - throw new ConflictException(StoreErrorCode.STORE_ALREADY_REGISTERED, new StoreDuplicateErrorResponse(store.getId())); + throw new ConflictException(StoreErrorCode.STORE_ALREADY_REGISTERED); } } } diff --git a/src/main/java/org/hankki/hankkiserver/common/exception/ConflictException.java b/src/main/java/org/hankki/hankkiserver/common/exception/ConflictException.java index b55fa18e..aa2d9182 100644 --- a/src/main/java/org/hankki/hankkiserver/common/exception/ConflictException.java +++ b/src/main/java/org/hankki/hankkiserver/common/exception/ConflictException.java @@ -6,16 +6,9 @@ @Getter public class ConflictException extends RuntimeException { private final ErrorCode errorCode; - private Object data; public ConflictException(ErrorCode errorCode) { super(errorCode.getMessage()); this.errorCode = errorCode; } - - public ConflictException(ErrorCode errorCode, Object data) { - super(errorCode.getMessage()); - this.errorCode = errorCode; - this.data = data; - } } From 120b83b963fb896b91e1d26f2222f167960fc0d3 Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Wed, 17 Jul 2024 00:09:08 +0900 Subject: [PATCH 22/22] [refac] divide method --- .../hankkiserver/api/store/service/StoreQueryService.java | 6 +++++- .../api/store/service/UniversityStoreFinder.java | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java index 4cf9ff5e..be4e8fbf 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/StoreQueryService.java @@ -88,8 +88,12 @@ public void validateDuplicatedStore(final StoreValidationCommand command) { } private void findUniversityStore(final Long universityId, final Store store) { - if (universityStoreFinder.findByUniversityIdAndStore(universityId, store)) { + if (isExistedUniversityStore(universityId, store)) { throw new ConflictException(StoreErrorCode.STORE_ALREADY_REGISTERED); } } + + private boolean isExistedUniversityStore(final Long universityId, final Store store) { + return universityStoreFinder.existsByUniversityIdAndStore(universityId, store); + } } diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/UniversityStoreFinder.java b/src/main/java/org/hankki/hankkiserver/api/store/service/UniversityStoreFinder.java index 318a896e..0e6c4328 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/UniversityStoreFinder.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/UniversityStoreFinder.java @@ -11,7 +11,7 @@ public class UniversityStoreFinder { private final UniversityStoreRepository universityStoreRepository; - protected boolean findByUniversityIdAndStore(final Long universityId, final Store store) { + protected boolean existsByUniversityIdAndStore(final Long universityId, final Store store) { return universityStoreRepository.existsByUniversityIdAndStore(universityId, store); } }