AddToCartServlet.java

package com.popx.presentazione;

import com.popx.modello.ProdottoBean;
import com.popx.modello.UserBean;
import com.popx.persistenza.*;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

@WebServlet("/addToCart")
public class AddToCartServlet extends HttpServlet {

    private DataSource DataSourceSingleton;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String productId = request.getParameter("productId");
        int quantity = Integer.parseInt(request.getParameter("quantity"));

        ProdottoDAO prodottoDAO = new ProdottoDAOImpl();
        HttpSession session = request.getSession();
        String userEmail = (String) session.getAttribute("userEmail");

        // Controllo per utenti loggati
        if (userEmail != null) {
            UserDAO<UserBean> userDAO = new UserDAOImpl();
            try {
                UserBean userBean = userDAO.getUserByEmail(userEmail);

                if (userBean != null && !"User".equals(userBean.getRole())) {
                    response.setContentType("application/json");
                    response.getWriter().write("{\"success\": false, \"message\": \"Accesso negato: solo gli utenti con il ruolo 'User' possono aggiungere prodotti al carrello.\"}");
                    return;
                }
            } catch (SQLException e) {
                e.printStackTrace();
                response.setContentType("application/json");
                response.getWriter().write("{\"success\": false, \"message\": \"Errore interno durante il controllo dei permessi.\"}");
                return;
            }
        }

        // Gestione del carrello per utenti guest e utenti loggati con ruolo 'User'
        List<ProdottoBean> cart = (List<ProdottoBean>) session.getAttribute("cart");
        if (cart == null) {
            cart = new ArrayList<>();
            session.setAttribute("cart", cart);
        }

        // Recupero del prodotto
        ProdottoBean prodotto = prodottoDAO.getProdottoById(productId);

        if (prodotto != null) {
            boolean productExists = false;
            for (ProdottoBean cartItem : cart) {
                if (cartItem.getId().equals(prodotto.getId())) {
                    int currentQty = prodottoDAO.getProductQtyInCart(session, cartItem.getId());
                    if ((currentQty + quantity) <= prodotto.getPiecesInStock()) {
                        prodottoDAO.updateProductQtyInCart(session, cartItem.getId(), currentQty + quantity);
                        productExists = true;
                        break;
                    } else {
                        response.setContentType("application/json");
                        response.getWriter().write("{\"success\": false, \"message\": \"Quantità non disponibile nel magazzino.\"}");
                        return;
                    }
                }
            }

            if (!productExists) {
                cart.add(prodotto);
                prodottoDAO.updateProductQtyInCart(session, prodotto.getId(), quantity);
            }

            response.setContentType("application/json");
            response.getWriter().write("{\"success\": true, \"message\": \"Prodotto aggiunto al carrello!\"}");
        } else {
            response.setContentType("application/json");
            response.getWriter().write("{\"success\": false, \"message\": \"Errore nell'aggiungere il prodotto al carrello.\"}");
        }
    }
}