remove cart items from cart on finalization of shopping transaction

Viewed 38

the question to you dear experts is how I need to delete cart items when finalizing shopping. What I know is that I should not delete cart but only items in it. Therefore how to delete cart items when table cartItems is in many-to-one relation to cart. How do I need to set up hibernate tables so that when deleting cart items I do not delete cart of the customer and retain history of shopping.

@Entity
public class Cart {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private BigDecimal total_amount;

    private Long session_id;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "user_id")
    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
    @Column(nullable = true)
    @OneToMany(mappedBy="cart",cascade=CascadeType.ALL,fetch=FetchType.EAGER)
    private List<CartItem> cartItems;

    @OneToOne(cascade = CascadeType.ALL)
    private Purchase purchase;

    public BigDecimal getTotal_amount() {
        return total_amount;
    }

    public void setTotal_amount(BigDecimal total_amount) {
        this.total_amount = total_amount;
    }

    public Long getSession_id() {
        return session_id;
    }

    public void setSession_id(Long session_id) {
        this.session_id = session_id;
    }

    public List<CartItem> getCartItems() {
        return cartItems;
    }

    public void setCartItems(List<CartItem> cartItems) {
        this.cartItems = cartItems;
    }

    public Purchase getPurchase() {
        return purchase;
    }

    public void setPurchase(Purchase purchase) {
        this.purchase = purchase;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void addProduct(Product product) {
        CartItem item = this.findItemByID(product.getId());

        if (item == null) {
            item = new CartItem();
            item.setQuantity(BigDecimal.valueOf(1));
            item.setProduct(product);
            this.cartItems.add(item);
        }

    }

    private CartItem findItemByID(Long id) {
        CartItem item = null;
        for (int i = 0; i < cartItems.size(); i++) {
            if (cartItems.get(i).getProduct().getId() == id) {
                item = cartItems.get(i);
            }
        }
        return item;
    }
}



@Entity
public class CartItem {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn(name="cartId")
    private Cart cart;

    @ManyToOne
    private Product product;

    private BigDecimal total_price;

    public BigDecimal getTotal_price() {
        return total_price;
    }

    public void setTotal_price(BigDecimal total_price) {
        this.total_price = total_price;
    }

    public Product getProduct() {
        return product;
    }

    public void setProduct(Product product) {
        this.product = product;
    }


    private BigDecimal price;

    private BigDecimal quantity;

    public Cart getCart() {
        return cart;
    }

    public void setCart(Cart cart) {
        this.cart = cart;
    }


    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public BigDecimal getQuantity() {
        return quantity;
    }

    public void setQuantity(BigDecimal quantity) {
        this.quantity = quantity;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}





@GetMapping("/finalization/{cartId}")
public String createOrder(@PathVariable("cartId")Long cartId, Model model,@ModelAttribute("payment")@Valid PaymentMethod paymentMethod, BindingResult bindingResult){
    Purchase purchase = new Purchase();
    Cart cart = cartRepository.getCartById(cartId);
    List<CartItem> cartItemList = cart.getCartItems();
    purchase.setCart(cart);
    User user = cart.getUser();
    purchase.setUser(user);
    purchase.setPaymentMethod(paymentMethod);
    purchaseRepository.save(purchase);
    model.addAttribute("finalization", cartItemList);
    cartItemRepository.deleteAllByCart(cart);
    return "finalPage";
}
0 Answers
Related