Makumbacz 3 лет назад
Родитель
Сommit
dff12db9eb

+ 0 - 3
src/main/java/com/example/plantsforyou/cart/Cart.java

@@ -29,10 +29,7 @@ public class Cart {
 
     private int quantity;
 
-    public Cart(Date createdDate, Plant plant, AppUser appUser, int quantity) {
-        this.createdDate = createdDate;
 
-    }
 
     public Cart(Plant plant, Integer quantity, AppUser appUser) {
         this.plant = plant;

+ 5 - 14
src/main/java/com/example/plantsforyou/cart/CartController.java

@@ -2,20 +2,18 @@ package com.example.plantsforyou.cart;
 
 import com.example.plantsforyou.appuser.AppUser;
 import com.example.plantsforyou.appuser.AppUserService;
-import com.example.plantsforyou.dto.AddToCartDto;
+import com.example.plantsforyou.dto.CartDto;
+import com.example.plantsforyou.dto.ItemCartDto;
 import com.example.plantsforyou.exceptions.RejectedRequestException;
 import com.example.plantsforyou.plant.Plant;
 import com.example.plantsforyou.plant.PlantService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
-import java.util.Optional;
-
 @RestController
 @RequestMapping("api/v1/cart")
 public class CartController {
@@ -31,18 +29,11 @@ public class CartController {
     }
 
     @PostMapping
-    public ResponseEntity<Object> addToCart(@RequestBody AddToCartDto addToCartDto) throws RejectedRequestException {
+    public ResponseEntity<Object> addToCart(@RequestBody ItemCartDto itemCartDto) throws RejectedRequestException {
         String token = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getHeader("Authorization").substring("Bearer ".length());
         AppUser appUser = appUserService.getUserFromToken(token);
-        Plant plant = plantService.findPlantById(addToCartDto.getPlantId());
-        cartService.addToCart(addToCartDto, plant, appUser);
+        Plant plant = plantService.findPlantById(itemCartDto.getId());
+        cartService.addToCart(itemCartDto, plant, appUser);
         return new ResponseEntity<>(HttpStatus.CREATED);
     }
-
-
-
-
-
-
-
 }

+ 5 - 0
src/main/java/com/example/plantsforyou/cart/CartRepository.java

@@ -1,8 +1,13 @@
 package com.example.plantsforyou.cart;
 
+import com.example.plantsforyou.appuser.AppUser;
+import com.example.plantsforyou.plant.Plant;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
+import java.util.Optional;
+
 @Repository
 public interface CartRepository extends JpaRepository<Cart, Long> {
+    Optional<Cart> findByPlantAndAppUser(Plant plant, AppUser appUser);
 }

+ 10 - 5
src/main/java/com/example/plantsforyou/cart/CartService.java

@@ -1,13 +1,14 @@
 package com.example.plantsforyou.cart;
 
 import com.example.plantsforyou.appuser.AppUser;
-import com.example.plantsforyou.dto.AddToCartDto;
+import com.example.plantsforyou.dto.CartDto;
+import com.example.plantsforyou.dto.ItemCartDto;
+import com.example.plantsforyou.exceptions.RejectedRequestException;
 import com.example.plantsforyou.plant.Plant;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
 
-import java.util.Optional;
-
 @Service
 public class CartService {
     private final CartRepository cartRepository;
@@ -17,8 +18,12 @@ public class CartService {
         this.cartRepository = cartRepository;
     }
 
-    public void addToCart(AddToCartDto addToCartDto, Plant plant,AppUser appUser) {
-        Cart cart = new Cart(plant,addToCartDto.getQuantity(),appUser);
+    public void addToCart(ItemCartDto itemCartDto, Plant plant, AppUser appUser) throws RejectedRequestException {
+        if(cartRepository.findByPlantAndAppUser(plant,appUser).isPresent()){
+            throw new RejectedRequestException("Plant is already in a cart", HttpStatus.BAD_REQUEST);
+        }
+        Cart cart = new Cart(plant,itemCartDto.getAmountInBasket(),appUser);
         cartRepository.save(cart);
     }
+
 }

+ 6 - 5
src/main/java/com/example/plantsforyou/dto/AddToCartDto.java → src/main/java/com/example/plantsforyou/dto/CartDto.java

@@ -1,17 +1,18 @@
 package com.example.plantsforyou.dto;
 
-import com.sun.istack.NotNull;
+import com.example.plantsforyou.plant.Plant;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
+import java.util.List;
+
 @NoArgsConstructor
 @Setter
 @Getter
 @AllArgsConstructor
-public class AddToCartDto {
-    Long id;
-    private @NotNull Long plantId;
-    private @NotNull Integer quantity;
+public class CartDto {
+    List<ItemCartDto> plantsInCart;
+    double totalCost;
 }

+ 36 - 0
src/main/java/com/example/plantsforyou/dto/ItemCartDto.java

@@ -0,0 +1,36 @@
+package com.example.plantsforyou.dto;
+
+import com.example.plantsforyou.plant.Plant;
+import com.sun.istack.NotNull;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@NoArgsConstructor
+@Setter
+@Getter
+@AllArgsConstructor
+public class ItemCartDto {
+
+    /*
+    * products: "[{\"id\":1,
+    * \"name\":\"Monstera deliciosa\",
+    * \"price\":25.12,
+    * \"quantity\":3,
+    * \"description\":\"Najbardziej pożądana roślina we wnętrzach ostatnich lat, czule nazwana przez nas Grzegorzem, zawdzięcza swoją popularność nie tylko wyjątkowej urodzie, ale też swojej bezproblemowości. Monstera jest jedną z tych roślin, z którymi będziesz żyć długo i szczęśliwie.\",
+    * \"typeOfLight\":\"diffused\",
+    * \"difficulty\":\"EASY\",
+    * \"size\":\"MEDIUM\",
+    * \"inStock\":true,
+    * \"amountInBasket\":2}]"
+    * */
+    Long Id;
+    private @NotNull Long plantId;
+    private @NotNull Integer amountInBasket;
+
+    public ItemCartDto(Long plantId, Integer amountInBasket) {
+        this.plantId = plantId;
+        this.amountInBasket = amountInBasket;
+    }
+}

+ 5 - 0
src/main/java/com/example/plantsforyou/plant/Plant.java

@@ -3,6 +3,7 @@ package com.example.plantsforyou.plant;
 import com.example.plantsforyou.plant.enums.PlantCareDifficulty;
 import com.example.plantsforyou.plant.enums.PlantSize;
 import com.example.plantsforyou.plant.enums.PlantTypeOfLight;
+import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
@@ -13,6 +14,7 @@ import javax.persistence.*;
 @Setter
 @NoArgsConstructor
 @Entity
+@AllArgsConstructor
 public class Plant {
 
     @Id
@@ -20,6 +22,7 @@ public class Plant {
     private Long id;
     private String name;
     private double price;
+    private int quantity;
     @Column(columnDefinition="TEXT")
     private String description;
     @Enumerated(EnumType.STRING)
@@ -32,12 +35,14 @@ public class Plant {
 
     public Plant(String name,
                  double price,
+                 int quantity,
                  String description,
                  PlantTypeOfLight typeOfLight,
                  PlantCareDifficulty difficulty,
                  PlantSize size, boolean inStock) {
         this.name = name;
         this.price = price;
+        this.quantity = quantity;
         this.description = description;
         this.typeOfLight = typeOfLight;
         this.difficulty = difficulty;

+ 2 - 0
src/main/java/com/example/plantsforyou/plant/PlantConfig.java

@@ -16,6 +16,7 @@ public class PlantConfig {
             Plant plant = new Plant(
                     "Monstera deliciosa",
                     25.12,
+                    3,
                     "Najbardziej pożądana roślina we wnętrzach ostatnich lat, czule nazwana przez nas Grzegorzem, zawdzięcza swoją popularność nie tylko wyjątkowej urodzie, ale też swojej bezproblemowości. Monstera jest jedną z tych roślin, z którymi będziesz żyć długo i szczęśliwie.",
                     PlantTypeOfLight.diffused,
                     PlantCareDifficulty.EASY,
@@ -26,6 +27,7 @@ public class PlantConfig {
             plant = new Plant(
                     "Scindapsus pictus 'Argyraeus'",
                     59.0,
+                    4,
                     "Nie ma wielkich wymagań i zdecydowanie nadaje się dla początkujących opiekunów. Z Agatką łatwo stworzysz wrażenie gęstej dżungli. Wystarczy, że spuścisz jej pnącza kurtyną z wysokiej półki, albo belki pod sufitem.",
                     PlantTypeOfLight.direct,
                     PlantCareDifficulty.MEDIUM,