diff --git a/customer-vue/src/api/store.js b/customer-vue/src/api/store.js index 90062da..e67e52f 100644 --- a/customer-vue/src/api/store.js +++ b/customer-vue/src/api/store.js @@ -41,5 +41,12 @@ export default { }, requestStore(storeId) { return axios.get(process.env.VUE_APP_CUSTOMER_SERVICE_BASEURL + "/store-service/store/" + storeId); + }, + getFavoriteStoreByStoreId(storeId) { + return axios.get(process.env.VUE_APP_CUSTOMER_SERVICE_BASEURL + "/store-service/api/customer/favoriteStore/" + storeId); + }, + markStar(storeId) { + return axios.patch(process.env.VUE_APP_CUSTOMER_SERVICE_BASEURL + "/store-service/api/customer/favoriteStore/" + storeId); } + } \ No newline at end of file diff --git a/customer-vue/src/components/StoreNavigation.vue b/customer-vue/src/components/StoreNavigation.vue index b6e22a7..62f9164 100644 --- a/customer-vue/src/components/StoreNavigation.vue +++ b/customer-vue/src/components/StoreNavigation.vue @@ -15,16 +15,69 @@ {{store.name}} - - mdi-magnify + + {{ favoriteStore.icon }} diff --git a/customer-vue/src/views/ItemDetail.vue b/customer-vue/src/views/ItemDetail.vue index 440397c..1bd15b1 100644 --- a/customer-vue/src/views/ItemDetail.vue +++ b/customer-vue/src/views/ItemDetail.vue @@ -36,6 +36,7 @@ =0? this.setItem.count+v: 0; + this.setItem.count+v >=1? this.setItem.count+v: 1; }, addItem: function(){ + if(!this.validItem()) + return; + orderApi.addItemToBasket(this.setItem) .then(response=>{ console.log(response) @@ -156,7 +160,16 @@ export default { .catch(error=>{ console.log(error.response) }) + }, + validItem(){ + if(this.setItem.count <= 0 || isNaN(this.setItem.count)){ + alert("수량이 잘못되었습니다.") + this.setItem.count =1 + return false + } + } + }, } diff --git a/customer-vue/src/views/OrderPage.vue b/customer-vue/src/views/OrderPage.vue index be4fc9c..b756c9c 100644 --- a/customer-vue/src/views/OrderPage.vue +++ b/customer-vue/src/views/OrderPage.vue @@ -56,11 +56,6 @@ @click="saveOrder" color="primary" >주문하기 - - - - - @@ -90,6 +85,7 @@ export default { orderApi.saveOrder() .then(()=>{ + this.$emit('plusCount') alert('주문되었습니다.') this.$router.push("/history") }) diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/dto/GetFavoriteStoreByStoreIdDto.java b/store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/dto/GetFavoriteStoreByStoreIdDto.java new file mode 100644 index 0000000..c3b1290 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/dto/GetFavoriteStoreByStoreIdDto.java @@ -0,0 +1,14 @@ +package com.justpickup.storeservice.domain.favoritestore.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class GetFavoriteStoreByStoreIdDto { + + private Long userId; + private Long storeId; + private boolean isExist; + +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/repository/FavoriteStoreRepository.java b/store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/repository/FavoriteStoreRepository.java index 1fe08b7..845fe30 100644 --- a/store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/repository/FavoriteStoreRepository.java +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/repository/FavoriteStoreRepository.java @@ -1,7 +1,12 @@ package com.justpickup.storeservice.domain.favoritestore.repository; import com.justpickup.storeservice.domain.favoritestore.entity.FavoriteStore; +import com.justpickup.storeservice.domain.store.entity.Store; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; + public interface FavoriteStoreRepository extends JpaRepository { + + Optional findByUserIdAndStore(Long userId, Store store); } diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/service/FavoriteStoreService.java b/store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/service/FavoriteStoreService.java new file mode 100644 index 0000000..51ec173 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/service/FavoriteStoreService.java @@ -0,0 +1,55 @@ +package com.justpickup.storeservice.domain.favoritestore.service; + +import com.justpickup.storeservice.domain.favoritestore.dto.GetFavoriteStoreByStoreIdDto; +import com.justpickup.storeservice.domain.favoritestore.entity.FavoriteStore; +import com.justpickup.storeservice.domain.favoritestore.repository.FavoriteStoreRepository; +import com.justpickup.storeservice.domain.store.entity.Store; +import com.justpickup.storeservice.domain.store.exception.NotExistStoreException; +import com.justpickup.storeservice.domain.store.repository.StoreRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; +import java.util.concurrent.atomic.AtomicReference; + +@Slf4j +@RequiredArgsConstructor +@Service +public class FavoriteStoreService { + + private final FavoriteStoreRepository favoriteStoreRepository; + private final StoreRepository storeRepository; + + @Transactional + public void patchFavoriteStore(Long userId, Long storeId){ + Store store = storeRepository.findById(storeId) + .orElseThrow(()-> new NotExistStoreException("매장이 존재하지않습니다.")); + + favoriteStoreRepository + .findByUserIdAndStore(userId, store) + .ifPresentOrElse( + favoriteStoreRepository::delete, + ()->favoriteStoreRepository.save(FavoriteStore.of(userId, store)) + ); + + } + + @Transactional + public GetFavoriteStoreByStoreIdDto getFavoriteStoreByStoreId(Long userId, Long storeId){ + Store store = storeRepository.findById(storeId) + .orElseThrow(()-> new NotExistStoreException("매장이 존재하지않습니다.")); + + Optional byUserIdAndStore = favoriteStoreRepository + .findByUserIdAndStore(userId, store); + + if(byUserIdAndStore.isPresent()){ + return new GetFavoriteStoreByStoreIdDto(userId,storeId, true); + }else { + return new GetFavoriteStoreByStoreIdDto(userId,storeId, false); + } + + } + +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/web/FavoriteStoreCustomerApiController.java b/store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/web/FavoriteStoreCustomerApiController.java new file mode 100644 index 0000000..f9b1918 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/web/FavoriteStoreCustomerApiController.java @@ -0,0 +1,40 @@ +package com.justpickup.storeservice.domain.favoritestore.web; + +import com.justpickup.storeservice.domain.favoritestore.dto.GetFavoriteStoreByStoreIdDto; +import com.justpickup.storeservice.domain.favoritestore.service.FavoriteStoreService; +import com.justpickup.storeservice.global.dto.Result; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@Slf4j +@RequiredArgsConstructor +@RequestMapping("/api/customer/favoriteStore") +public class FavoriteStoreCustomerApiController { + + private final FavoriteStoreService favoriteStoreService; + + @GetMapping("/{storeId}") + public ResponseEntity getFavoriteStoreByStoreId(@RequestHeader(value = "user-id") String userId, @PathVariable Long storeId){ + + GetFavoriteStoreByStoreIdDto favoriteStoreByStoreId = favoriteStoreService.getFavoriteStoreByStoreId(Long.parseLong(userId), storeId); + + return ResponseEntity + .status(HttpStatus.OK) + .body(Result.createSuccessResult(favoriteStoreByStoreId)); + } + + + @PatchMapping("/{storeId}") + public ResponseEntity patchFavoriteStore(@RequestHeader(value = "user-id") String userId, @PathVariable Long storeId){ + + favoriteStoreService.patchFavoriteStore(Long.parseLong(userId),storeId); + + return ResponseEntity + .status(HttpStatus.NO_CONTENT) + .body(Result.success()); + } +}