From 2aa59ba46563a01d2412f98d50ab686fab5ef43c Mon Sep 17 00:00:00 2001
From: Gwendal Margely <gwendal.margely.etu@univ-lille.fr>
Date: Thu, 14 Mar 2024 15:55:42 +0100
Subject: [PATCH] Adding the first state of Ingredient WebServlet

---
 ...DAOIngredients.java => IngredientDAO.java} |   5 +-
 WEB-INF/src/Servlets/IngredientServlet.java   | 128 ++++++++++++++++++
 2 files changed, 132 insertions(+), 1 deletion(-)
 rename WEB-INF/src/DAO/{DAOIngredients.java => IngredientDAO.java} (97%)
 create mode 100644 WEB-INF/src/Servlets/IngredientServlet.java

diff --git a/WEB-INF/src/DAO/DAOIngredients.java b/WEB-INF/src/DAO/IngredientDAO.java
similarity index 97%
rename from WEB-INF/src/DAO/DAOIngredients.java
rename to WEB-INF/src/DAO/IngredientDAO.java
index 2a42631..da9dc87 100644
--- a/WEB-INF/src/DAO/DAOIngredients.java
+++ b/WEB-INF/src/DAO/IngredientDAO.java
@@ -5,7 +5,7 @@ import java.sql.*;
 import java.util.ArrayList;
 import java.util.List;
 
-public class DAOIngredients {
+public class IngredientDAO {
     // JDBC URL, username, and password of PostgresSQL server
     private static final String url = "jdbc:postgresql://"; //CHANGE URL
     private static final String user = "gwendalmargelyetu";
@@ -85,4 +85,7 @@ public class DAOIngredients {
         close();
         return ingredient;
     }
+
+    public void deleteIngredient(int id) {
+    }
 }
diff --git a/WEB-INF/src/Servlets/IngredientServlet.java b/WEB-INF/src/Servlets/IngredientServlet.java
new file mode 100644
index 0000000..0df5ab9
--- /dev/null
+++ b/WEB-INF/src/Servlets/IngredientServlet.java
@@ -0,0 +1,128 @@
+package Servlets;
+
+
+
+import DAO.IngredientDAO;
+import POJO.Ingredient;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+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 java.io.IOException;
+import java.util.List;
+
+@WebServlet("/ingredients/*")
+public class IngredientServlet extends HttpServlet {
+    private IngredientDAO ingredientDAO;
+    private ObjectMapper objectMapper;
+
+    @Override
+    public void init() throws ServletException {
+        ingredientDAO = new IngredientDAO();
+        objectMapper = new ObjectMapper();
+    }
+
+    @Override
+    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+        String pathInfo = req.getPathInfo();
+        if (pathInfo == null || pathInfo.equals("/")) {
+            // Get all ingredients
+            try {
+                List<Ingredient> ingredients = ingredientDAO.getAllIngredients();
+                resp.setContentType("application/json");
+                resp.getWriter().write(objectMapper.writeValueAsString(ingredients));
+            } catch (Exception e) {
+                resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+                resp.getWriter().write("Error fetching ingredients: " + e.getMessage());
+            }
+        } else {
+            String[] pathParts = pathInfo.split("/");
+            if (pathParts.length == 2) {
+                // Get ingredient by id
+                try {
+                    int id = Integer.parseInt(pathParts[1]);
+                    Ingredient ingredient = ingredientDAO.getIngredient(id);
+                    if (ingredient != null) {
+                        resp.setContentType("application/json");
+                        resp.getWriter().write(objectMapper.writeValueAsString(ingredient));
+                    } else {
+                        resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
+                        resp.getWriter().write("Ingredient not found with id: " + id);
+                    }
+                } catch (NumberFormatException e) {
+                    resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+                    resp.getWriter().write("Invalid ingredient id: " + pathParts[1]);
+                } catch (Exception e) {
+                    resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+                    resp.getWriter().write("Error fetching ingredient: " + e.getMessage());
+                }
+            } else if (pathParts.length == 3 && pathParts[2].equals("name")) {
+                // Get ingredient name by id
+                try {
+                    int id = Integer.parseInt(pathParts[1]);
+                    Ingredient ingredient = ingredientDAO.getIngredient(id);
+                    if (ingredient != null) {
+                        resp.setContentType("application/json");
+                        resp.getWriter().write(objectMapper.writeValueAsString(ingredient.getName()));
+                    } else {
+                        resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
+                        resp.getWriter().write("Ingredient not found with id: " + id);
+                    }
+                } catch (NumberFormatException e) {
+                    resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+                    resp.getWriter().write("Invalid ingredient id: " + pathParts[1]);
+                } catch (Exception e) {
+                    resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+                    resp.getWriter().write("Error fetching ingredient name: " + e.getMessage());
+                }
+            } else {
+                resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+                resp.getWriter().write("Invalid endpoint");
+            }
+        }
+    }
+
+    @Override
+    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+        // Add new ingredient
+        try {
+            Ingredient ingredient = objectMapper.readValue(req.getInputStream(), Ingredient.class);
+            IngredientDAO.insertIngredient(ingredient);
+            resp.setStatus(HttpServletResponse.SC_CREATED);
+        } catch (Exception e) {
+            resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+            resp.getWriter().write("Error adding ingredient: " + e.getMessage());
+        }
+    }
+
+    @Override
+    protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+        String pathInfo = req.getPathInfo();
+        if (pathInfo != null && !pathInfo.equals("/")) {
+            String[] pathParts = pathInfo.split("/");
+            if (pathParts.length == 2) {
+                // Delete ingredient by id
+                try {
+                    int id = Integer.parseInt(pathParts[1]);
+                    ingredientDAO.deleteIngredient(id); // Create this method
+                    resp.setStatus(HttpServletResponse.SC_OK);
+                } catch (NumberFormatException e) {
+                    resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+                    resp.getWriter().write("Invalid ingredient id: " + pathParts[1]);
+                } catch (Exception e) {
+                    resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+                    resp.getWriter().write("Error deleting ingredient: " + e.getMessage());
+                }
+            } else {
+                resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+                resp.getWriter().write("Invalid endpoint");
+            }
+        } else {
+            resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+            resp.getWriter().write("Invalid endpoint");
+        }
+    }
+}
-- 
GitLab