From d17b14786958d3cabdb3f34bf5f09695bedb4544 Mon Sep 17 00:00:00 2001 From: c-my Date: Wed, 4 Sep 2019 11:10:26 +0800 Subject: [PATCH 1/3] add some shopping cart function --- .../controller/ShoppingCartController.java | 40 +++++++++++++++++-- .../neumall/service/ShoppingCartService.java | 13 ++++++ 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/src/main/java/edu/neu/neumall/controller/ShoppingCartController.java b/src/main/java/edu/neu/neumall/controller/ShoppingCartController.java index 3dab490..c452ed0 100644 --- a/src/main/java/edu/neu/neumall/controller/ShoppingCartController.java +++ b/src/main/java/edu/neu/neumall/controller/ShoppingCartController.java @@ -3,6 +3,8 @@ package edu.neu.neumall.controller; import edu.neu.neumall.entity.Product; import edu.neu.neumall.entity.ShoppingCart; import edu.neu.neumall.entity.User; +import edu.neu.neumall.service.ShoppingCartService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -14,12 +16,20 @@ import java.util.HashSet; @Controller @RequestMapping("/cart") public class ShoppingCartController { + + private ShoppingCartService shoppingCartService; + + @Autowired + public ShoppingCartController(ShoppingCartService shoppingCartService) { + this.shoppingCartService = shoppingCartService; + } + @GetMapping public String shoppingCartPage(@AuthenticationPrincipal User user, Model model) { ArrayList products = new ArrayList<>(); var shoppingCartItems = user.getShoppingCart(); if (shoppingCartItems == null) { - shoppingCartItems = new HashSet(); + shoppingCartItems = new HashSet<>(); } model.addAttribute("productlist", shoppingCartItems); @@ -30,8 +40,32 @@ public class ShoppingCartController { @ResponseBody public String appendShoppingCart(@RequestParam long productID, @RequestParam int count, @AuthenticationPrincipal User user) { - ShoppingCart item = new ShoppingCart(); + var result = shoppingCartService.addShoppingCartItem(productID, count, user); + if (result) { + return "success"; + } + return "false"; + } - return ""; + @PostMapping("/delete") + @ResponseBody + public void removeShoppingCart(@RequestParam("shoppingCartID") long cartID, @AuthenticationPrincipal User user) { + shoppingCartService.deleteCartByID(cartID); + } + + @PostMapping("/update") + @ResponseBody + public String updateShoppingCart(@RequestParam("shoppingCartID") long cartID, + @RequestParam("count") int count, + @AuthenticationPrincipal User user) { + var shoppingCartOptional = shoppingCartService.getByID(cartID); + if (shoppingCartOptional.isEmpty() || !shoppingCartOptional.get().getOwner().equals(user) + || count < 0) { + return "false"; + } + var item = shoppingCartOptional.get(); + item.setCount(count); + shoppingCartService.save(item); + return "true"; } } diff --git a/src/main/java/edu/neu/neumall/service/ShoppingCartService.java b/src/main/java/edu/neu/neumall/service/ShoppingCartService.java index 34ae385..5d1d609 100644 --- a/src/main/java/edu/neu/neumall/service/ShoppingCartService.java +++ b/src/main/java/edu/neu/neumall/service/ShoppingCartService.java @@ -8,6 +8,8 @@ import edu.neu.neumall.repository.ProductRepository; import edu.neu.neumall.repository.ShoppingCartRepository; import org.springframework.stereotype.Service; +import java.util.Optional; + @Service public class ShoppingCartService { private ShoppingCartRepository shoppingCartRepository; @@ -33,4 +35,15 @@ public class ShoppingCartService { return true; } + public void deleteCartByID(long cartID) { + shoppingCartRepository.deleteById(cartID); + } + + public Optional getByID(long cartID) { + return shoppingCartRepository.findById(cartID); + } + + public void save(ShoppingCart cart) { + shoppingCartRepository.save(cart); + } } From 9d0a99d72aa386a43e8ed47ffd52cc1547265a86 Mon Sep 17 00:00:00 2001 From: c-my Date: Wed, 4 Sep 2019 11:15:35 +0800 Subject: [PATCH 2/3] add redirection --- src/main/java/edu/neu/neumall/configure/WebMvcConfig.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/edu/neu/neumall/configure/WebMvcConfig.java b/src/main/java/edu/neu/neumall/configure/WebMvcConfig.java index f41f220..947771d 100644 --- a/src/main/java/edu/neu/neumall/configure/WebMvcConfig.java +++ b/src/main/java/edu/neu/neumall/configure/WebMvcConfig.java @@ -4,6 +4,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.nio.file.Path; @@ -21,6 +22,11 @@ public class WebMvcConfig implements WebMvcConfigurer { registry.addResourceHandler("/img/**").addResourceLocations("file:/" + location.toString() + "\\"); } + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addRedirectViewController("/", "/product"); + } + @Bean public BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); From e8c3dfa48fab928b24008757a18b537209aa960b Mon Sep 17 00:00:00 2001 From: c-my Date: Wed, 4 Sep 2019 15:27:58 +0800 Subject: [PATCH 3/3] enhance shopping-cart logic --- .../neu/neumall/repository/ShoppingCartRepository.java | 3 +++ .../edu/neu/neumall/service/ShoppingCartService.java | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/src/main/java/edu/neu/neumall/repository/ShoppingCartRepository.java b/src/main/java/edu/neu/neumall/repository/ShoppingCartRepository.java index a2ddc31..894071d 100644 --- a/src/main/java/edu/neu/neumall/repository/ShoppingCartRepository.java +++ b/src/main/java/edu/neu/neumall/repository/ShoppingCartRepository.java @@ -5,6 +5,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; @Repository public interface ShoppingCartRepository extends JpaRepository { @@ -12,4 +13,6 @@ public interface ShoppingCartRepository extends JpaRepository findAllByOwner_ID(long id); public List removeByOwner_ID(long id); + + public Optional findByOwnerIDAndProductID(long ownerID, long productID); } diff --git a/src/main/java/edu/neu/neumall/service/ShoppingCartService.java b/src/main/java/edu/neu/neumall/service/ShoppingCartService.java index 5d1d609..8e1615e 100644 --- a/src/main/java/edu/neu/neumall/service/ShoppingCartService.java +++ b/src/main/java/edu/neu/neumall/service/ShoppingCartService.java @@ -26,6 +26,15 @@ public class ShoppingCartService { if (productOptional.isEmpty()) { return false; } + // cart item already exists + var cartExist = shoppingCartRepository.findByOwnerIDAndProductID(user.getID(), productID); + if (cartExist.isPresent()) { + var cart = cartExist.get(); + cart.setCount(cart.getCount() + 1); + shoppingCartRepository.save(cart); + return true; + } + // item not exist, create a new one var product = productOptional.get(); ShoppingCart shoppingCart = new ShoppingCart(); shoppingCart.setCount(count);