Просмотр исходного кода

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

Wip new methods for cart and service
Arek Wieteska 3 лет назад
Родитель
Сommit
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")
     private Plant plant;
     @JsonIgnore
+    @JoinColumn(name = "app_user_id", referencedColumnName = "id")
     @OneToOne(targetEntity = AppUser.class)
     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 org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Optional;
 
 @Repository
+@Transactional
 public interface CartRepository extends JpaRepository<Cart, Long> {
     Optional<Cart> findByPlantAndAppUser(Plant plant, 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()){
             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);
         cartRepository.save(cart);
     }
@@ -46,4 +50,8 @@ public class CartService {
     private ItemCartDto getDtoFromCart(Cart 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.plant.Plant;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.sun.istack.NotNull;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
@@ -27,7 +28,7 @@ public class ItemOrder {
     @JoinColumn(name = "plant_id", referencedColumnName = "id")
     private Plant plant;
     @ManyToOne
-    @JoinColumn(name = "order_id", referencedColumnName = "id")
+    @JsonIgnore
     private Order order;
     @NotNull
     private Integer quantity;

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

@@ -36,9 +36,9 @@ public class Order {
     private double totalPrice;
     @OneToOne
     @JsonIgnore
-    @JoinColumn(name = "appuser_id", referencedColumnName = "id")
+    @JoinColumn(name = "app_user_id", referencedColumnName = "id")
     private AppUser appUser;
-    @OneToMany
+    @OneToMany(mappedBy = "order")
     private List<ItemOrder> itemsOrders;
     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.cart.CartService;
 import com.example.plantsforyou.dto.PlaceOrderDto;
+import com.example.plantsforyou.exceptions.RejectedRequestException;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 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.ServletRequestAttributes;
 
+import java.util.List;
+
 @Controller
 @RequestMapping("api/v1/order")
 public class OrderController {
@@ -29,11 +30,23 @@ public class OrderController {
     }
 
     @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());
         AppUser appUser = appUserService.getUserFromToken(token);
         orderService.placeOrder(placeOrderDto,appUser);
         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 java.util.List;
+
 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.ItemCartDto;
 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.ItemOrderRepository;
+import com.example.plantsforyou.plant.PlantService;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
@@ -14,17 +16,19 @@ import java.util.List;
 
 @Service
 public class OrderService {
-    private OrderRepository orderRepository;
+    private final OrderRepository orderRepository;
     private final CartService cartService;
     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.cartService = cartService;
         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);
         List<ItemCartDto> itemCartDtos = cartDto.getPlantsInCart();
 
@@ -48,7 +52,18 @@ public class OrderService {
             itemOrder.setQuantity(itemCartDto.getQuantity());
             itemOrder.setOrder(order);
             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",
                     59,
                     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.",
                     PlantTypeOfLight.shadow,
                     PlantCareDifficulty.EASY,

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

@@ -1,6 +1,7 @@
 package com.example.plantsforyou.plant;
 
 import com.example.plantsforyou.exceptions.RejectedRequestException;
+import org.hibernate.FetchNotFoundException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.web.firewall.RequestRejectedException;
@@ -51,5 +52,12 @@ public class PlantService {
             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);
+    }
 
 }