From f4712a3d6912567cb5ba70a4b121cb67e0ceec04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=88=EC=A0=95=ED=9B=84?= Date: Wed, 24 Jul 2024 13:57:48 +0900 Subject: [PATCH] fix: cart error-fix api-module --- .../cart/application/CartFindUseCase.java | 1 + .../cart/application/CartSaveUseCase.java | 29 +++++++++++++-- .../likelion/apimodule/cart/dto/CartInfo.java | 1 + .../apimodule/cart/dto/CartUpdateReq.java | 7 ++++ .../cart/presentation/CartController.java | 20 +++++++++++ .../home/application/HomeFindUseCase.java | 4 +++ .../home/presentation/HomeController.java | 36 +++++++++++++++++++ 7 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 api-module/src/main/java/com/likelion/apimodule/cart/dto/CartUpdateReq.java create mode 100644 api-module/src/main/java/com/likelion/apimodule/home/application/HomeFindUseCase.java create mode 100644 api-module/src/main/java/com/likelion/apimodule/home/presentation/HomeController.java diff --git a/api-module/src/main/java/com/likelion/apimodule/cart/application/CartFindUseCase.java b/api-module/src/main/java/com/likelion/apimodule/cart/application/CartFindUseCase.java index 2245c34..f362b94 100644 --- a/api-module/src/main/java/com/likelion/apimodule/cart/application/CartFindUseCase.java +++ b/api-module/src/main/java/com/likelion/apimodule/cart/application/CartFindUseCase.java @@ -40,6 +40,7 @@ public List findAllCarts(String accessToken) { Store store = storeQueryService.findStoreById(menu.getStore().getId()); CartInfo cartInfo = new CartInfo( + cart.getId(), store.getName(), menu.getName(), menu.getPrice(), diff --git a/api-module/src/main/java/com/likelion/apimodule/cart/application/CartSaveUseCase.java b/api-module/src/main/java/com/likelion/apimodule/cart/application/CartSaveUseCase.java index 1222000..0dfd467 100644 --- a/api-module/src/main/java/com/likelion/apimodule/cart/application/CartSaveUseCase.java +++ b/api-module/src/main/java/com/likelion/apimodule/cart/application/CartSaveUseCase.java @@ -1,8 +1,11 @@ package com.likelion.apimodule.cart.application; import com.likelion.apimodule.cart.dto.CartSaveReq; +import com.likelion.apimodule.cart.dto.CartUpdateReq; import com.likelion.apimodule.security.util.JwtUtil; import com.likelion.coremodule.cart.domain.Cart; +import com.likelion.coremodule.cart.exception.CartErrorCode; +import com.likelion.coremodule.cart.exception.CartException; import com.likelion.coremodule.cart.service.CartQueryService; import com.likelion.coremodule.menu.domain.Menu; import com.likelion.coremodule.menu.service.MenuQueryService; @@ -12,6 +15,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + @Service @RequiredArgsConstructor @Transactional @@ -22,6 +27,10 @@ public class CartSaveUseCase { private final UserQueryService userQueryService; private final MenuQueryService menuQueryService; + public Integer findMyCartCount(Long userId, Long menuId) { + return cartQueryService.findCartByUserIdAndMenuId(userId, menuId); + } + public void saveMyCart(String accessToken, CartSaveReq saveReq) { String email = jwtUtil.getEmail(accessToken); @@ -29,8 +38,24 @@ public void saveMyCart(String accessToken, CartSaveReq saveReq) { Menu menu = menuQueryService.findMenuById(saveReq.menuId()); - final Cart cart = Cart.builder().user(user).menu(menu).quantity(saveReq.quantity()).build(); - cartQueryService.saveCart(cart); + if (findMyCartCount(user.getUserId(), menu.getId()) >= 1) { + throw new CartException(CartErrorCode.NO_CART_INFO); + } else { + final Cart cart = Cart.builder().user(user).menu(menu).quantity(saveReq.quantity()).build(); + cartQueryService.saveCart(cart); + } + } + + public void updateMyCart(String accessToken, List updateReqs) { + + String email = jwtUtil.getEmail(accessToken); + User user = userQueryService.findByEmail(email); + + for (CartUpdateReq req : updateReqs) { + + Cart cart = cartQueryService.findCartByUserIdAndCartId(user.getUserId(), req.cartId()); + cart.setCartQuantity(req.quantity()); + } } public void deleteMyCart(String accessToken, Long cartId) { diff --git a/api-module/src/main/java/com/likelion/apimodule/cart/dto/CartInfo.java b/api-module/src/main/java/com/likelion/apimodule/cart/dto/CartInfo.java index a3d4c02..d50ff6b 100644 --- a/api-module/src/main/java/com/likelion/apimodule/cart/dto/CartInfo.java +++ b/api-module/src/main/java/com/likelion/apimodule/cart/dto/CartInfo.java @@ -1,6 +1,7 @@ package com.likelion.apimodule.cart.dto; public record CartInfo( + Long cartid, // cart String storeName, // store String menuName, // menu Integer price, // menu diff --git a/api-module/src/main/java/com/likelion/apimodule/cart/dto/CartUpdateReq.java b/api-module/src/main/java/com/likelion/apimodule/cart/dto/CartUpdateReq.java new file mode 100644 index 0000000..9cf32bd --- /dev/null +++ b/api-module/src/main/java/com/likelion/apimodule/cart/dto/CartUpdateReq.java @@ -0,0 +1,7 @@ +package com.likelion.apimodule.cart.dto; + +public record CartUpdateReq( + Long cartId, + Integer quantity +) { +} diff --git a/api-module/src/main/java/com/likelion/apimodule/cart/presentation/CartController.java b/api-module/src/main/java/com/likelion/apimodule/cart/presentation/CartController.java index 4e24955..c0cf181 100644 --- a/api-module/src/main/java/com/likelion/apimodule/cart/presentation/CartController.java +++ b/api-module/src/main/java/com/likelion/apimodule/cart/presentation/CartController.java @@ -4,6 +4,7 @@ import com.likelion.apimodule.cart.application.CartSaveUseCase; import com.likelion.apimodule.cart.dto.CartInfo; import com.likelion.apimodule.cart.dto.CartSaveReq; +import com.likelion.apimodule.cart.dto.CartUpdateReq; import com.likelion.commonmodule.exception.common.ApplicationResponse; import com.likelion.commonmodule.security.util.AuthConsts; import io.swagger.v3.oas.annotations.Operation; @@ -64,6 +65,25 @@ public ApplicationResponse saveMyCart(@RequestHeader(AuthConsts.ACCESS_T return ApplicationResponse.ok("장바구니 저장 완료"); } + // 장바구니 추가 + @PutMapping + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "나의 장바구니 추가 성공", + useReturnTypeSchema = true + ) + } + ) + @Operation(summary = "나의 장바구니 추가 API", description = "나의 장바구니 추가 API 입니다.") + public ApplicationResponse updateMyCart(@RequestHeader(AuthConsts.ACCESS_TOKEN_HEADER) String accessToken, + @RequestBody List updateReqs) { + + cartSaveUseCase.updateMyCart(accessToken, updateReqs); + return ApplicationResponse.ok("장바구니 수량 수정 완료"); + } + // 장바구니 삭제 @DeleteMapping("{cartId}/delete") @ApiResponses( diff --git a/api-module/src/main/java/com/likelion/apimodule/home/application/HomeFindUseCase.java b/api-module/src/main/java/com/likelion/apimodule/home/application/HomeFindUseCase.java new file mode 100644 index 0000000..c87486e --- /dev/null +++ b/api-module/src/main/java/com/likelion/apimodule/home/application/HomeFindUseCase.java @@ -0,0 +1,4 @@ +package com.likelion.apimodule.home.application; + +public class HomeFindUseCase { +} diff --git a/api-module/src/main/java/com/likelion/apimodule/home/presentation/HomeController.java b/api-module/src/main/java/com/likelion/apimodule/home/presentation/HomeController.java new file mode 100644 index 0000000..aae53a2 --- /dev/null +++ b/api-module/src/main/java/com/likelion/apimodule/home/presentation/HomeController.java @@ -0,0 +1,36 @@ +package com.likelion.apimodule.home.presentation; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RequiredArgsConstructor +@RestController +@RequestMapping("/v1/home") +@Validated +@Tag(name = "Home", description = "Home 관련 API") +public class HomeController { + + // qr 시 시장 조회수 증가 +// @GetMapping("/{marketId}/info") +// @ApiResponses( +// value = { +// @ApiResponse( +// responseCode = "200", +// description = "시장 정보 확인 성공", +// useReturnTypeSchema = true +// ) +// } +// ) +// @Operation(summary = "시장 정보 확인 API", description = "시장 정보 확인 API 입니다.") + + // 시장 리스트 검색 + + // 시장 리스트 나열 +}