// Path: src/main/java/com/efoodstore/dao/CartItemDao.java
// public interface CartItemDao {
// 
//     void addCartItem(CartItem cartItem);
// 
//     void removeCartItem(CartItem cartItem);
// 
//     void removeAllCartItems(Cart cart);
// 
//     CartItem getCartItemByProductId (int productId);
// 
// }
// 
// Path: src/main/java/com/efoodstore/model/Cart.java
// @Entity
// public class Cart implements Serializable {
// 
//     private static final long serialVersionUID = 3940548625296145582L;
// 
//     @Id
//     @GeneratedValue
//     private int cartId;
// 
//     @OneToMany(mappedBy = "cart", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
//     private List<CartItem> cartItems;
// 
//     @OneToOne
//     @JoinColumn(name = "customerId")
//     @JsonIgnore
//     private Customer customer;
// 
//     private double grandTotal;
// 
//     public int getCartId() {
//         return cartId;
//     }
// 
//     public void setCartId(int cartId) {
//         this.cartId = cartId;
//     }
// 
//     public List<CartItem> getCartItems() {
//         return cartItems;
//     }
// 
//     public void setCartItems(List<CartItem> cartItems) {
//         this.cartItems = cartItems;
//     }
// 
//     public Customer getCustomer() {
//         return customer;
//     }
// 
//     public void setCustomer(Customer customer) {
//         this.customer = customer;
//     }
// 
//     public double getGrandTotal() {
//         return grandTotal;
//     }
// 
//     public void setGrandTotal(double grandTotal) {
//         this.grandTotal = grandTotal;
//     }
// }
// 
// Path: src/main/java/com/efoodstore/model/CartItem.java
// @Entity
// public class CartItem implements Serializable{
// 
//     private static final long serialVersionUID = -904360230041854157L;
// 
//     @Id
//     @GeneratedValue
//     private int cartItemId;
// 
//     @ManyToOne
//     @JoinColumn(name = "cartId")
//     @JsonIgnore
//     private Cart cart;
// 
//     @ManyToOne
//     @JoinColumn(name = "productId")
//     private Product product;
// 
//     private int quantity;
//     private double totalPrice;
// 
//     public int getCartItemId() {
//         return cartItemId;
//     }
// 
//     public void setCartItemId(int cartItemId) {
//         this.cartItemId = cartItemId;
//     }
// 
//     public Cart getCart() {
//         return cart;
//     }
// 
//     public void setCart(Cart cart) {
//         this.cart = cart;
//     }
// 
//     public Product getProduct() {
//         return product;
//     }
// 
//     public void setProduct(Product product) {
//         this.product = product;
//     }
// 
//     public int getQuantity() {
//         return quantity;
//     }
// 
//     public void setQuantity(int quantity) {
//         this.quantity = quantity;
//     }
// 
//     public double getTotalPrice() {
//         return totalPrice;
//     }
// 
//     public void setTotalPrice(double totalPrice) {
//         this.totalPrice = totalPrice;
//     }
// }


import com.efoodstore.dao.CartItemDao;
import com.efoodstore.model.Cart;
import com.efoodstore.model.CartItem;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
package com.efoodstore.dao.impl;




@Repository
@Transactional
public class CartItemDaoImpl implements CartItemDao{

    @Autowired
    private SessionFactory sessionFactory;

    public void addCartItem(CartItem cartItem) {
        Session session = sessionFactory.getCurrentSession();
        session.saveOrUpdate(cartItem);
        session.flush();
    }

    public void removeCartItem (CartItem cartItem) {
        Session session = sessionFactory.getCurrentSession();
// Path: src/main/java/com/efoodstore/dao/CartItemDao.java
// public interface CartItemDao {
// 
//     void addCartItem(CartItem cartItem);
// 
//     void removeCartItem(CartItem cartItem);
// 
//     void removeAllCartItems(Cart cart);
// 
//     CartItem getCartItemByProductId (int productId);
// 
// }
// 
// Path: src/main/java/com/efoodstore/model/Cart.java
// @Entity
// public class Cart implements Serializable {
// 
//     private static final long serialVersionUID = 3940548625296145582L;
// 
//     @Id
//     @GeneratedValue
//     private int cartId;
// 
//     @OneToMany(mappedBy = "cart", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
//     private List<CartItem> cartItems;
// 
//     @OneToOne
//     @JoinColumn(name = "customerId")
//     @JsonIgnore
//     private Customer customer;
// 
//     private double grandTotal;
// 
//     public int getCartId() {
//         return cartId;
//     }
// 
//     public void setCartId(int cartId) {
//         this.cartId = cartId;
//     }
// 
//     public List<CartItem> getCartItems() {
//         return cartItems;
//     }
// 
//     public void setCartItems(List<CartItem> cartItems) {
//         this.cartItems = cartItems;
//     }
// 
//     public Customer getCustomer() {
//         return customer;
//     }
// 
//     public void setCustomer(Customer customer) {
//         this.customer = customer;
//     }
// 
//     public double getGrandTotal() {
//         return grandTotal;
//     }
// 
//     public void setGrandTotal(double grandTotal) {
//         this.grandTotal = grandTotal;
//     }
// }
// 
// Path: src/main/java/com/efoodstore/model/CartItem.java
// @Entity
// public class CartItem implements Serializable{
// 
//     private static final long serialVersionUID = -904360230041854157L;
// 
//     @Id
//     @GeneratedValue
//     private int cartItemId;
// 
//     @ManyToOne
//     @JoinColumn(name = "cartId")
//     @JsonIgnore
//     private Cart cart;
// 
//     @ManyToOne
//     @JoinColumn(name = "productId")
//     private Product product;
// 
//     private int quantity;
//     private double totalPrice;
// 
//     public int getCartItemId() {
//         return cartItemId;
//     }
// 
//     public void setCartItemId(int cartItemId) {
//         this.cartItemId = cartItemId;
//     }
// 
//     public Cart getCart() {
//         return cart;
//     }
// 
//     public void setCart(Cart cart) {
//         this.cart = cart;
//     }
// 
//     public Product getProduct() {
//         return product;
//     }
// 
//     public void setProduct(Product product) {
//         this.product = product;
//     }
// 
//     public int getQuantity() {
//         return quantity;
//     }
// 
//     public void setQuantity(int quantity) {
//         this.quantity = quantity;
//     }
// 
//     public double getTotalPrice() {
//         return totalPrice;
//     }
// 
//     public void setTotalPrice(double totalPrice) {
//         this.totalPrice = totalPrice;
//     }
// }


// Path: src/main/java/com/efoodstore/dao/impl/CartItemDaoImpl.java
import com.efoodstore.dao.CartItemDao;
import com.efoodstore.model.Cart;
import com.efoodstore.model.CartItem;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;

package com.efoodstore.dao.impl;




@Repository
@Transactional
public class CartItemDaoImpl implements CartItemDao{

    @Autowired
    private SessionFactory sessionFactory;

    public void addCartItem(CartItem cartItem) {
        Session session = sessionFactory.getCurrentSession();
        session.saveOrUpdate(cartItem);
        session.flush();
    }

    public void removeCartItem (CartItem cartItem) {
        Session session = sessionFactory.getCurrentSession();
        session.delete(cartItem);