diff --git a/workspace/src/main/java/com/microsoft/shinyay/ai/controller/ShoppingCartController.java b/workspace/src/main/java/com/microsoft/shinyay/ai/controller/ShoppingCartController.java new file mode 100644 index 0000000..d1eda49 --- /dev/null +++ b/workspace/src/main/java/com/microsoft/shinyay/ai/controller/ShoppingCartController.java @@ -0,0 +1,37 @@ +package com.microsoft.shinyay.ai.controller; + +import com.microsoft.shinyay.ai.model.CartItem; +import com.microsoft.shinyay.ai.model.Product; +import com.microsoft.shinyay.ai.service.ShoppingCartService; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/cart") +public class ShoppingCartController { + + private final ShoppingCartService shoppingCartService; + + public ShoppingCartController(ShoppingCartService shoppingCartService) { + this.shoppingCartService = shoppingCartService; + } + + @PostMapping("/add") + public ResponseEntity addItemToCart(@RequestBody Product product, @RequestParam int quantity) { + shoppingCartService.addItemToCart(product, quantity); + return ResponseEntity.ok().build(); + } + + @GetMapping("/items") + public ResponseEntity> viewCartItems() { + return ResponseEntity.ok(shoppingCartService.getCartItems()); + } + + @DeleteMapping("/clear") + public ResponseEntity clearCart() { + shoppingCartService.clearCart(); + return ResponseEntity.ok().build(); + } +} diff --git a/workspace/src/main/java/com/microsoft/shinyay/ai/model/CartItem.java b/workspace/src/main/java/com/microsoft/shinyay/ai/model/CartItem.java new file mode 100644 index 0000000..302f872 --- /dev/null +++ b/workspace/src/main/java/com/microsoft/shinyay/ai/model/CartItem.java @@ -0,0 +1,25 @@ +package com.microsoft.shinyay.ai.model; + +public class CartItem { + private Product product; + private int quantity; + + public CartItem() { + } + + public Product getProduct() { + return product; + } + + public void setProduct(Product product) { + this.product = product; + } + + public int getQuantity() { + return quantity; + } + + public void setQuantity(int quantity) { + this.quantity = quantity; + } +} diff --git a/workspace/src/main/java/com/microsoft/shinyay/ai/model/Product.java b/workspace/src/main/java/com/microsoft/shinyay/ai/model/Product.java new file mode 100644 index 0000000..6037c32 --- /dev/null +++ b/workspace/src/main/java/com/microsoft/shinyay/ai/model/Product.java @@ -0,0 +1,43 @@ +package com.microsoft.shinyay.ai.model; + +public class Product { + private Long id; + private String name; + private String description; + private double price; + + public Product() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public double getPrice() { + return price; + } + + public void setPrice(double price) { + this.price = price; + } +} diff --git a/workspace/src/main/java/com/microsoft/shinyay/ai/service/ShoppingCartService.java b/workspace/src/main/java/com/microsoft/shinyay/ai/service/ShoppingCartService.java new file mode 100644 index 0000000..7093608 --- /dev/null +++ b/workspace/src/main/java/com/microsoft/shinyay/ai/service/ShoppingCartService.java @@ -0,0 +1,38 @@ +package com.microsoft.shinyay.ai.service; + +import com.microsoft.shinyay.ai.model.CartItem; +import com.microsoft.shinyay.ai.model.Product; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +@Service +public class ShoppingCartService { + + private final List cartItems = new ArrayList<>(); + + public void addItemToCart(Product product, int quantity) { + Optional existingItem = cartItems.stream() + .filter(item -> item.getProduct().getId().equals(product.getId())) + .findFirst(); + + existingItem.ifPresentOrElse(item -> item.setQuantity(item.getQuantity() + quantity), + () -> cartItems.add(new CartItem(product, quantity))); + } + + public List getCartItems() { + return cartItems; + } + + public double calculateTotalPrice() { + return cartItems.stream() + .mapToDouble(item -> item.getProduct().getPrice() * item.getQuantity()) + .sum(); + } + + public void clearCart() { + cartItems.clear(); + } +} diff --git a/workspace/src/main/resources/static/css/cart.css b/workspace/src/main/resources/static/css/cart.css new file mode 100644 index 0000000..d16fff2 --- /dev/null +++ b/workspace/src/main/resources/static/css/cart.css @@ -0,0 +1,49 @@ +/* Basic styling for the shopping cart page */ +.cart-container { + display: flex; + flex-direction: column; + align-items: center; + padding: 20px; +} + +.cart-header { + font-size: 24px; + margin-bottom: 20px; +} + +.cart-items { + width: 100%; + border-collapse: collapse; +} + +.cart-items th, .cart-items td { + text-align: left; + padding: 8px; + border-bottom: 1px solid #ddd; +} + +.cart-summary { + margin-top: 20px; + align-self: flex-end; +} + +.cart-summary h3 { + margin: 0; +} + +.cart-actions { + margin-top: 20px; +} + +.cart-actions button { + background-color: #4CAF50; + color: white; + padding: 10px 20px; + margin-right: 10px; + border: none; + cursor: pointer; +} + +.cart-actions button:hover { + background-color: #45a049; +} diff --git a/workspace/src/main/resources/templates/cart.html b/workspace/src/main/resources/templates/cart.html new file mode 100644 index 0000000..0f251ad --- /dev/null +++ b/workspace/src/main/resources/templates/cart.html @@ -0,0 +1,44 @@ + + + + + Shopping Cart + + + +
+

Shopping Cart

+
+ + + + + + + + + + + + + + + + + +
ProductPriceQuantityTotal
Product NameProduct PriceQuantityTotal
+
+

Total: Total Price

+
+
+
+

Your cart is empty.

+
+
+
+ +
+
+
+ +