Procházet zdrojové kódy

added some validation and fixed problem with infinite json

Makumbacz před 3 roky
rodič
revize
dd7459cb32

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

@@ -4,11 +4,13 @@ import com.example.plantsforyou.appuser.AppUser;
 import com.example.plantsforyou.plant.Plant;
 import com.example.plantsforyou.plant.Plant;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
 
 
 import java.util.List;
 import java.util.List;
 import java.util.Optional;
 import java.util.Optional;
 
 
 @Repository
 @Repository
+@Transactional
 public interface CartRepository extends JpaRepository<Cart, Long> {
 public interface CartRepository extends JpaRepository<Cart, Long> {
     Optional<Cart> findByPlantAndAppUser(Plant plant, AppUser appUser);
     Optional<Cart> findByPlantAndAppUser(Plant plant, AppUser appUser);
     List<Cart> findAllByAppUserOrderByCreatedDate(AppUser appUser);
     List<Cart> findAllByAppUserOrderByCreatedDate(AppUser appUser);

+ 4 - 0
src/main/java/com/example/plantsforyou/cart/CartService.java

@@ -26,6 +26,10 @@ public class CartService {
         if(cartRepository.findByPlantAndAppUser(plant,appUser).isPresent()){
         if(cartRepository.findByPlantAndAppUser(plant,appUser).isPresent()){
             throw new RejectedRequestException("Plant is already in a cart", HttpStatus.BAD_REQUEST);
             throw new RejectedRequestException("Plant is already in a cart", HttpStatus.BAD_REQUEST);
         }
         }
+        if(addToCartDto.getAmountInBasket() > plant.getQuantity()){
+            throw new RejectedRequestException("You can not order more plants than we have in stock", HttpStatus.BAD_REQUEST);
+
+        }
         Cart cart = new Cart(plant,addToCartDto.getAmountInBasket(),appUser);
         Cart cart = new Cart(plant,addToCartDto.getAmountInBasket(),appUser);
         cartRepository.save(cart);
         cartRepository.save(cart);
     }
     }

+ 3 - 2
src/main/java/com/example/plantsforyou/items_order/ItemOrder.java

@@ -3,6 +3,7 @@ package com.example.plantsforyou.items_order;
 
 
 import com.example.plantsforyou.order.Order;
 import com.example.plantsforyou.order.Order;
 import com.example.plantsforyou.plant.Plant;
 import com.example.plantsforyou.plant.Plant;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.sun.istack.NotNull;
 import com.sun.istack.NotNull;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.NoArgsConstructor;
@@ -26,8 +27,8 @@ public class ItemOrder {
     @OneToOne
     @OneToOne
     @JoinColumn(name = "plant_id", referencedColumnName = "id")
     @JoinColumn(name = "plant_id", referencedColumnName = "id")
     private Plant plant;
     private Plant plant;
-    @OneToOne
-    @JoinColumn(name = "order_id", referencedColumnName = "id")
+    @ManyToOne
+    @JsonIgnore
     private Order order;
     private Order order;
     @NotNull
     @NotNull
     private Integer quantity;
     private Integer quantity;

+ 1 - 1
src/main/java/com/example/plantsforyou/order/Order.java

@@ -38,7 +38,7 @@ public class Order {
     @JsonIgnore
     @JsonIgnore
     @JoinColumn(name = "app_user_id", referencedColumnName = "id")
     @JoinColumn(name = "app_user_id", referencedColumnName = "id")
     private AppUser appUser;
     private AppUser appUser;
-    @OneToMany
+    @OneToMany(mappedBy = "order")
     private List<ItemOrder> itemsOrders;
     private List<ItemOrder> itemsOrders;
     private String status;
     private String status;
 
 

+ 4 - 3
src/main/java/com/example/plantsforyou/order/OrderController.java

@@ -4,6 +4,7 @@ import com.example.plantsforyou.appuser.AppUser;
 import com.example.plantsforyou.appuser.AppUserService;
 import com.example.plantsforyou.appuser.AppUserService;
 import com.example.plantsforyou.cart.CartService;
 import com.example.plantsforyou.cart.CartService;
 import com.example.plantsforyou.dto.PlaceOrderDto;
 import com.example.plantsforyou.dto.PlaceOrderDto;
+import com.example.plantsforyou.exceptions.RejectedRequestException;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.stereotype.Controller;
@@ -29,7 +30,7 @@ public class OrderController {
     }
     }
 
 
     @PostMapping()
     @PostMapping()
-    public ResponseEntity<Object>placeOrder(@RequestBody PlaceOrderDto placeOrderDto){
+    public ResponseEntity<Object>placeOrder(@RequestBody PlaceOrderDto placeOrderDto) throws RejectedRequestException {
         String token = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getHeader("Authorization").substring("Bearer ".length());
         String token = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getHeader("Authorization").substring("Bearer ".length());
         AppUser appUser = appUserService.getUserFromToken(token);
         AppUser appUser = appUserService.getUserFromToken(token);
         orderService.placeOrder(placeOrderDto,appUser);
         orderService.placeOrder(placeOrderDto,appUser);
@@ -43,8 +44,8 @@ public class OrderController {
     }
     }
 
 
     @GetMapping("/all")
     @GetMapping("/all")
-    public List<Order> getAllOrdersFromBase(){
-        return orderService.getAllOrders();
+    public ResponseEntity<List<Order>> getAllOrdersFromBase(){
+        return new ResponseEntity<>(orderService.getAllOrders(), HttpStatus.OK);
     }
     }
 
 
 
 

+ 10 - 4
src/main/java/com/example/plantsforyou/order/OrderService.java

@@ -5,8 +5,10 @@ import com.example.plantsforyou.cart.CartService;
 import com.example.plantsforyou.dto.CartDto;
 import com.example.plantsforyou.dto.CartDto;
 import com.example.plantsforyou.dto.ItemCartDto;
 import com.example.plantsforyou.dto.ItemCartDto;
 import com.example.plantsforyou.dto.PlaceOrderDto;
 import com.example.plantsforyou.dto.PlaceOrderDto;
+import com.example.plantsforyou.exceptions.RejectedRequestException;
 import com.example.plantsforyou.items_order.ItemOrder;
 import com.example.plantsforyou.items_order.ItemOrder;
 import com.example.plantsforyou.items_order.ItemOrderRepository;
 import com.example.plantsforyou.items_order.ItemOrderRepository;
+import com.example.plantsforyou.plant.PlantService;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.util.Date;
 import java.util.Date;
@@ -14,17 +16,19 @@ import java.util.List;
 
 
 @Service
 @Service
 public class OrderService {
 public class OrderService {
-    private OrderRepository orderRepository;
+    private final OrderRepository orderRepository;
     private final CartService cartService;
     private final CartService cartService;
     private final ItemOrderRepository itemOrderRepository;
     private final ItemOrderRepository itemOrderRepository;
+    private final PlantService plantService;
 
 
-    public OrderService(OrderRepository orderRepository, CartService cartService, ItemOrderRepository itemOrderRepository) {
+    public OrderService(OrderRepository orderRepository, CartService cartService, ItemOrderRepository itemOrderRepository, PlantService plantService) {
         this.orderRepository = orderRepository;
         this.orderRepository = orderRepository;
         this.cartService = cartService;
         this.cartService = cartService;
         this.itemOrderRepository = itemOrderRepository;
         this.itemOrderRepository = itemOrderRepository;
+        this.plantService = plantService;
     }
     }
 
 
-    public void placeOrder(PlaceOrderDto placeOrderDto, AppUser appUser) {
+    public void placeOrder(PlaceOrderDto placeOrderDto, AppUser appUser) throws RejectedRequestException {
         CartDto cartDto = cartService.getAllItemsFromCart(appUser);
         CartDto cartDto = cartService.getAllItemsFromCart(appUser);
         List<ItemCartDto> itemCartDtos = cartDto.getPlantsInCart();
         List<ItemCartDto> itemCartDtos = cartDto.getPlantsInCart();
 
 
@@ -48,9 +52,11 @@ public class OrderService {
             itemOrder.setQuantity(itemCartDto.getQuantity());
             itemOrder.setQuantity(itemCartDto.getQuantity());
             itemOrder.setOrder(order);
             itemOrder.setOrder(order);
             itemOrderRepository.save(itemOrder);
             itemOrderRepository.save(itemOrder);
+
+            plantService.updateQuantity(itemCartDto.getPlant().getId(),-(itemCartDto.getQuantity()));
         }
         }
 
 
-  //      cartService.deleteItemsFromCart(appUser);
+        cartService.deleteItemsFromCart(appUser);
 
 
     }
     }
     List<Order> getAllOrdersFromUserId(Long id){
     List<Order> getAllOrdersFromUserId(Long id){

+ 8 - 0
src/main/java/com/example/plantsforyou/plant/PlantService.java

@@ -1,6 +1,7 @@
 package com.example.plantsforyou.plant;
 package com.example.plantsforyou.plant;
 
 
 import com.example.plantsforyou.exceptions.RejectedRequestException;
 import com.example.plantsforyou.exceptions.RejectedRequestException;
+import org.hibernate.FetchNotFoundException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.web.firewall.RequestRejectedException;
 import org.springframework.security.web.firewall.RequestRejectedException;
@@ -51,5 +52,12 @@ public class PlantService {
             plantRepository.save(toUpdate);
             plantRepository.save(toUpdate);
         }
         }
     }
     }
+    public void updateQuantity(Long plantId, int quantity) throws RejectedRequestException {
+        Plant plant = plantRepository.findById(plantId).orElseThrow(
+                () -> new RejectedRequestException("Plant does not exist",HttpStatus.BAD_REQUEST)
+        );
+        plant.setQuantity(plant.getQuantity() + quantity);
+        plantRepository.save(plant);
+    }
 
 
 }
 }