Преглед изворни кода

Merge pull request #3 from blazejmakul/wip-new-methods-for-cart-and-service

Wip new methods for cart and service
Arek Wieteska пре 3 година
родитељ
комит
3e80e6aa3a

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

@@ -24,6 +24,7 @@ public class Cart {
     @JoinColumn(name = "plant_id", referencedColumnName = "id")
     @JoinColumn(name = "plant_id", referencedColumnName = "id")
     private Plant plant;
     private Plant plant;
     @JsonIgnore
     @JsonIgnore
+    @JoinColumn(name = "app_user_id", referencedColumnName = "id")
     @OneToOne(targetEntity = AppUser.class)
     @OneToOne(targetEntity = AppUser.class)
     private AppUser appUser;
     private AppUser appUser;
 
 

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

@@ -4,12 +4,15 @@ 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);
+    void deleteByAppUser(AppUser appUser);
 }
 }

+ 8 - 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);
     }
     }
@@ -46,4 +50,8 @@ public class CartService {
     private ItemCartDto getDtoFromCart(Cart cart) {
     private ItemCartDto getDtoFromCart(Cart cart) {
         return new ItemCartDto(cart);
         return new ItemCartDto(cart);
     }
     }
+
+    public void deleteItemsFromCart(AppUser appUser){
+         cartRepository.deleteByAppUser(appUser);
+    }
 }
 }

+ 2 - 1
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;
@@ -27,7 +28,7 @@ public class ItemOrder {
     @JoinColumn(name = "plant_id", referencedColumnName = "id")
     @JoinColumn(name = "plant_id", referencedColumnName = "id")
     private Plant plant;
     private Plant plant;
     @ManyToOne
     @ManyToOne
-    @JoinColumn(name = "order_id", referencedColumnName = "id")
+    @JsonIgnore
     private Order order;
     private Order order;
     @NotNull
     @NotNull
     private Integer quantity;
     private Integer quantity;

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

@@ -36,9 +36,9 @@ public class Order {
     private double totalPrice;
     private double totalPrice;
     @OneToOne
     @OneToOne
     @JsonIgnore
     @JsonIgnore
-    @JoinColumn(name = "appuser_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;
 
 

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

@@ -4,15 +4,16 @@ 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;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
 
+import java.util.List;
+
 @Controller
 @Controller
 @RequestMapping("api/v1/order")
 @RequestMapping("api/v1/order")
 public class OrderController {
 public class OrderController {
@@ -29,11 +30,23 @@ 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);
         return new ResponseEntity<>(HttpStatus.CREATED);
         return new ResponseEntity<>(HttpStatus.CREATED);
     }
     }
+    @GetMapping()
+    public ResponseEntity<List<Order>>getAllOrdersFromUser(){
+        String token = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getHeader("Authorization").substring("Bearer ".length());
+        AppUser appUser = appUserService.getUserFromToken(token);
+        return new ResponseEntity<>(orderService.getAllOrdersFromUserId(appUser.getId()), HttpStatus.OK);
+    }
+
+    @GetMapping("/all")
+    public ResponseEntity<List<Order>> getAllOrdersFromBase(){
+        return new ResponseEntity<>(orderService.getAllOrders(), HttpStatus.OK);
+    }
+
 
 
 }
 }

+ 3 - 0
src/main/java/com/example/plantsforyou/order/OrderRepository.java

@@ -2,5 +2,8 @@ package com.example.plantsforyou.order;
 
 
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaRepository;
 
 
+import java.util.List;
+
 public interface OrderRepository extends JpaRepository<Order, Long> {
 public interface OrderRepository extends JpaRepository<Order, Long> {
+    List<Order> findAllByAppUserIdOrderByCreatedDateDesc(Long id);
 }
 }

+ 19 - 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,7 +52,18 @@ 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()));
         }
         }
-        //todo:delete items from cart
+
+        cartService.deleteItemsFromCart(appUser);
+
+    }
+    List<Order> getAllOrdersFromUserId(Long id){
+        return orderRepository.findAllByAppUserIdOrderByCreatedDateDesc(id);
+    }
+
+    public List<Order> getAllOrders() {
+        return orderRepository.findAll();
     }
     }
 }
 }

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

@@ -41,7 +41,7 @@ public class PlantConfig {
                     "Anturium Andrego",
                     "Anturium Andrego",
                     59,
                     59,
                     3,
                     3,
-                    "https://cdn.shopify.com/s/files/1/0150/6262/products/the-sill_red-anthurium_small_kent_white.jpg?v=1652382922",
+                    "https://cdn.shopify.com/s/files/1/0150/6262/products/the-sill_red-anthurium_small_upcycled-saucer_stonewash.jpg?v=1653589431",
                     "Znane także jako kwiat flaminga, Anthurium jest najdłużej kwitnącą rośliną domową na świecie. Rzadko można spotkać ją bez efektownych kwiatów.",
                     "Znane także jako kwiat flaminga, Anthurium jest najdłużej kwitnącą rośliną domową na świecie. Rzadko można spotkać ją bez efektownych kwiatów.",
                     PlantTypeOfLight.shadow,
                     PlantTypeOfLight.shadow,
                     PlantCareDifficulty.EASY,
                     PlantCareDifficulty.EASY,

+ 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);
+    }
 
 
 }
 }