From 5e7eebc3fb5a715a382c94029c785653fa20638d Mon Sep 17 00:00:00 2001 From: xFractu Date: Fri, 24 May 2024 08:01:19 -0600 Subject: [PATCH] =?UTF-8?q?Funcionalidad=20de=20rese=C3=B1as=20y=20boton?= =?UTF-8?q?=20de=20eliminar=20pedido?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/java/mx/uv/App.java | 130 ++++++++++++++++ backend/src/main/java/mx/uv/Conexion.java | 6 +- backend/src/main/java/mx/uv/DAO.java | 160 ++++++++++++++++++++ backend/src/main/java/mx/uv/Reseñas.java | 67 ++++++++ backend/target/classes/mx/uv/App.class | Bin 15023 -> 18395 bytes backend/target/classes/mx/uv/Conexion.class | Bin 1575 -> 1565 bytes backend/target/classes/mx/uv/DAO.class | Bin 14130 -> 18648 bytes backend/target/classes/mx/uv/Reseñas.class | Bin 0 -> 1990 bytes 8 files changed, 360 insertions(+), 3 deletions(-) create mode 100644 backend/src/main/java/mx/uv/Reseñas.java create mode 100644 backend/target/classes/mx/uv/Reseñas.class diff --git a/backend/src/main/java/mx/uv/App.java b/backend/src/main/java/mx/uv/App.java index 7624279..2eb85ea 100644 --- a/backend/src/main/java/mx/uv/App.java +++ b/backend/src/main/java/mx/uv/App.java @@ -448,7 +448,47 @@ public class App return responseJson.toString(); }); + post("/frontend/eliminarPedido", (request, response) -> { + response.type("application/json"); + String payload = request.body(); + JsonElement jsonElement = JsonParser.parseString(payload); + JsonObject jsonObject = jsonElement.getAsJsonObject(); + String idPedido = jsonObject.get("datosId").getAsJsonObject().get("idPedido").getAsString(); + + // Lógica para eliminar el pedido usando el ID + boolean eliminado = DAO.eliminarPedido(idPedido); + + JsonObject respuesta = new JsonObject(); + if (eliminado) { + respuesta.addProperty("msj", "Pedido eliminado exitosamente."); + } else { + respuesta.addProperty("msj", "No se encontró ningún pedido con el ID especificado."); + } + + return respuesta.toString(); + }); + post("/frontend/actualizarEstatusPedido", (request, response) -> { + response.type("application/json"); + String payload = request.body(); + JsonElement jsonElement = JsonParser.parseString(payload); + JsonObject jsonObject = jsonElement.getAsJsonObject(); + String idPedido = jsonObject.get("datosId").getAsJsonObject().get("idPedido").getAsString(); + String nuevoEstatus = jsonObject.get("datosId").getAsJsonObject().get("nuevoEstatus").getAsString(); + + // Lógica para actualizar el estatus del pedido usando el ID + boolean actualizado = DAO.actualizarEstatusPedido(idPedido, nuevoEstatus); + + JsonObject respuesta = new JsonObject(); + if (actualizado) { + respuesta.addProperty("msj", "Pedido actualizado exitosamente."); + } else { + respuesta.addProperty("msj", "No se encontró ningún pedido con el ID especificado."); + } + + return respuesta.toString(); + }); + post("/frontend/obtenerPedidosDePastelesAdmin", (request, response) -> { response.type("application/json"); @@ -483,6 +523,96 @@ public class App System.out.println(responseJson); return responseJson.toString(); }); + + post("/frontend/agregarResenia", (request, response) -> { + response.type("application/json"); + String payload = request.body(); + + try { + JsonElement jsonElement = JsonParser.parseString(payload); + JsonObject jsonObject = jsonElement.getAsJsonObject(); + + // Obtener los datos de la reseña del JSON recibido + String nombreUsuario = jsonObject.get("nombreUsuario").getAsString(); + String idPastel = jsonObject.get("idPastel").getAsString(); + String contenido = jsonObject.get("contenido").getAsString(); + int estrellas = jsonObject.get("estrellas").getAsInt(); + + // Crear un nuevo objeto Reseñas y asignar los valores recibidos + Reseñas reseña = new Reseñas(); + reseña.setIdReseña(UUID.randomUUID().toString()); + reseña.setNombreUsuario(nombreUsuario); + reseña.setIdPastel(idPastel); + reseña.setContenido(contenido); + reseña.setEstrellas(estrellas); + + // Puedes realizar acciones adicionales con la información de la reseña + System.out.println("Reseña: " + reseña); + + // Lógica para agregar la reseña en la base de datos + String mensaje = DAO.agregarReseña(reseña); + + // Crear la respuesta + JsonObject respuesta = new JsonObject(); + respuesta.addProperty("msj", mensaje); + + return gson.toJson(respuesta); + } catch (JsonSyntaxException e) { + // Manejar errores de formato JSON + System.out.println("Error en el formato JSON: " + e.getMessage()); + response.status(400); // Bad Request + return gson.toJson("Error en el formato JSON"); + } catch (Exception e) { + // Manejar otros errores + System.out.println("Error al agregar la reseña: " + e.getMessage()); + response.status(500); // Internal Server Error + return gson.toJson("Error al agregar la reseña"); + } + }); + + + post("/frontend/obtenerReseniasPorPastel", (request, response) -> { + response.type("application/json"); + + // Obtener el ID del pastel desde el cuerpo de la solicitud + JsonObject requestBody = new Gson().fromJson(request.body(), JsonObject.class); + String idPastel = requestBody.get("idPastel").getAsString(); + + // Obtener las reseñas para el pastel + List reseñas = DAO.obtenerReseñasPorPastel(idPastel); + + System.out.println("ID del pastel"+idPastel); + + int numeroDeReseñas = reseñas.size(); + + System.out.println("Número de reseñas: " + numeroDeReseñas); + + // Construir un objeto JSON con las reseñas + JsonArray reseñasArray = new JsonArray(); + for (Reseñas reseña : reseñas) { + JsonObject reseñaJson = new JsonObject(); + reseñaJson.addProperty("id_reseña", reseña.getIdReseña()); + reseñaJson.addProperty("nombre_usuario", reseña.getNombreUsuario()); + reseñaJson.addProperty("id_pastel", reseña.getIdPastel()); + reseñaJson.addProperty("contenido", reseña.getContenido()); + reseñaJson.addProperty("estrellas", reseña.getEstrellas()); + reseñasArray.add(reseñaJson); + } + + // Crear el objeto final que contiene todas las reseñas + JsonObject responseJson = new JsonObject(); + responseJson.add("reseñas", reseñasArray); + + System.out.println(responseJson); + return responseJson.toString(); + }); + + + + + + + diff --git a/backend/src/main/java/mx/uv/Conexion.java b/backend/src/main/java/mx/uv/Conexion.java index 806857c..08228ce 100644 --- a/backend/src/main/java/mx/uv/Conexion.java +++ b/backend/src/main/java/mx/uv/Conexion.java @@ -5,10 +5,10 @@ import java.sql.DriverManager; import java.sql.SQLException; public class Conexion { - private static String url = "jdbc:mysql://127.0.0.1:3306/dbpastel"; + private static String url = "jdbc:mysql://127.0.0.1:3306/dbpastel00"; private static String driverName = "com.mysql.cj.jdbc.Driver"; - private static String username = "root"; - private static String password = "cesarin_11"; + private static String username = "pastel00"; + private static String password = "pastel00"; // variable de conexion private static Connection connection = null; diff --git a/backend/src/main/java/mx/uv/DAO.java b/backend/src/main/java/mx/uv/DAO.java index 5c20b33..5492ceb 100644 --- a/backend/src/main/java/mx/uv/DAO.java +++ b/backend/src/main/java/mx/uv/DAO.java @@ -455,6 +455,166 @@ public static List dameTodosLosPedidosDePasteles2() { return resultado; } +public static String agregarReseña(Reseñas reseña) { + PreparedStatement stm = null; + Connection conn = null; + String mensaje = ""; + + conn = Conexion.getConnection(); + try { + String sql = "INSERT INTO reseñas (nombreUsuario, idPastel, contenido, estrellas) VALUES (?,?,?,?)"; + stm = conn.prepareStatement(sql); + stm.setString(1, reseña.getNombreUsuario()); + stm.setString(2, reseña.getIdPastel()); + stm.setString(3, reseña.getContenido()); + stm.setInt(4, reseña.getEstrellas()); + + if (stm.executeUpdate() > 0) + mensaje = "Reseña agregada con éxito"; + else + mensaje = "No se pudo agregar la reseña"; + + } catch (SQLException e) { + System.out.println("Error al ejecutar la consulta: " + e.getMessage()); + } finally { + if (stm != null) { + try { + stm.close(); + } catch (SQLException e) { + System.out.println("Error al cerrar el statement: " + e.getMessage()); + } + } + if (conn != null) { + try { + conn.close(); + } catch (SQLException e) { + System.out.println("Error al cerrar la conexión: " + e.getMessage()); + } + } + } + return mensaje; +} + +public static List obtenerReseñasPorPastel(String idPastel) { + Connection conn = null; + PreparedStatement pstmt = null; + ResultSet rs = null; + List resultado = new ArrayList<>(); + + try { + conn = Conexion.getConnection(); + String sql = "SELECT r.idReseña, r.nombreUsuario, r.idPastel, r.contenido, r.estrellas " + + "FROM reseñas r " + + "WHERE r.idPastel = ?"; + pstmt = conn.prepareStatement(sql); + pstmt.setString(1, idPastel); + rs = pstmt.executeQuery(); + while (rs.next()) { + Reseñas reseña = new Reseñas( + rs.getString("idReseña"), + rs.getString("nombreUsuario"), + rs.getString("idPastel"), + rs.getString("contenido"), + rs.getInt("estrellas") + ); + resultado.add(reseña); + } + } catch (SQLException e) { + e.printStackTrace(); + } finally { + try { + if (rs != null) rs.close(); + if (pstmt != null) pstmt.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return resultado; +} + + +public static boolean eliminarPedido(String idPedido) { + System.out.println("ENTRO AL METODO: eliminarPedido"); + Statement stm = null; + Connection conn = null; + + conn = Conexion.getConnection(); + + try { + String sql = "DELETE FROM pedidos WHERE idPedido = '" + idPedido + "'"; + stm = (Statement) conn.createStatement(); + int filasAfectadas = stm.executeUpdate(sql); + + // Verificamos si se eliminó alguna fila + if (filasAfectadas > 0) { + System.out.println("Pedido eliminado exitosamente."); + return true; + } else { + System.out.println("No se encontró ningún pedido con el ID especificado."); + return false; + } + } catch (SQLException e) { + System.out.println("Error al eliminar el pedido: " + e); + } finally { + // Cierre de recursos + if (stm != null) { + try { + stm.close(); + } catch (SQLException e) { + System.out.println(e); + } + } + } + + return false; +} + + +public static boolean actualizarEstatusPedido(String idPedido, String nuevoEstatus) { + System.out.println("ENTRO AL METODO: actualizarEstatusPedido"); + Statement stm = null; + Connection conn = null; + + conn = Conexion.getConnection(); + + try { + String sql = "UPDATE pedidos SET estatus = '" + nuevoEstatus + "' WHERE idPedido = '" + idPedido + "'"; + stm = (Statement) conn.createStatement(); + int filasAfectadas = stm.executeUpdate(sql); + + // Verificamos si se actualizó alguna fila + if (filasAfectadas > 0) { + System.out.println("Pedido actualizado exitosamente."); + return true; + } else { + System.out.println("No se encontró ningún pedido con el ID especificado."); + return false; + } + } catch (SQLException e) { + System.out.println("Error al actualizar el pedido: " + e); + } finally { + // Cierre de recursos + if (stm != null) { + try { + stm.close(); + } catch (SQLException e) { + System.out.println(e); + } + } + try { + conn.close(); + } catch (SQLException e) { + System.out.println(e); + } + } + + return false; +} + + + + } \ No newline at end of file diff --git a/backend/src/main/java/mx/uv/Reseñas.java b/backend/src/main/java/mx/uv/Reseñas.java new file mode 100644 index 0000000..11e98c1 --- /dev/null +++ b/backend/src/main/java/mx/uv/Reseñas.java @@ -0,0 +1,67 @@ +package mx.uv; + +public class Reseñas { + + String idReseña; + String nombreUsuario; + String idPastel; + String contenido; + int estrellas; + + public String getIdReseña() { + return idReseña; + } + + public void setIdReseña(String idReseña) { + this.idReseña = idReseña; + } + + public String getNombreUsuario() { + return nombreUsuario; + } + + public void setNombreUsuario(String nombreUsuario) { + this.nombreUsuario = nombreUsuario; + } + + public String getIdPastel() { + return idPastel; + } + + public void setIdPastel(String idPastel) { + this.idPastel = idPastel; + } + + public String getContenido() { + return contenido; + } + + public void setContenido(String contenido) { + this.contenido = contenido; + } + + public int getEstrellas() { + return estrellas; + } + + public void setEstrellas(int estrellas) { + this.estrellas = estrellas; + } + + public String toString() { + return "Reseñas [idReseña=" + idReseña + ", nombreUsuario=" + nombreUsuario + ", idPastel=" + idPastel + ", contenido=" + contenido + ", estrellas=" + estrellas + "]"; + } + + public Reseñas(){ + + } + + public Reseñas(String idReseña, String nombreUsuario, String idPastel, String contenido, int estrellas) { + this.idReseña = idReseña; + this.nombreUsuario = nombreUsuario; + this.idPastel = idPastel; + this.contenido = contenido; + this.estrellas = estrellas; + } +} + diff --git a/backend/target/classes/mx/uv/App.class b/backend/target/classes/mx/uv/App.class index f5a5024156af061dbc8d767e1a3a9cc0b65ca5e4..b7bd8796d6cc6465780cda6e3a106c53b8fd0732 100644 GIT binary patch literal 18395 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 literal 15023 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 V(K`g$)?n2%toD<}`;?OK;5T-TbkYC- diff --git a/backend/target/classes/mx/uv/DAO.class b/backend/target/classes/mx/uv/DAO.class index b216164409a3bce902d80aaad0578045cfc625d1..24ef4736a5a66b57b9be67b87a4a3fb706665fa0 100644 GIT binary patch delta 4005 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 diff --git a/backend/target/classes/mx/uv/Reseñas.class b/backend/target/classes/mx/uv/Reseñas.class new file mode 100644 index 0000000000000000000000000000000000000000..a115abc03ca3d6bc6b12225df45fa64b66c1090e GIT binary patch literal 1990 zcma)-+fEZv6o&r|EtE0{RKTKD2L)|Qp{RH))B}Rn5HzAB#&|K%2@WZ(X{W{q@iDy6 z#A2d}H{SVB#((W;OFIn4i|)N<&Dv{!>oooS=lf3pi+IwH9)%P8AF}oL+2?l6{`JMG z^&_M(vS+=wvL&m$n|->yXYaTQ15UANq7Yj@e81^do$_u@VW?c$->%v(YjvyYR1_jk z@tIX~?Gn%KRLZVhc8XLF*fqCmmr7PmK@}8?UE3`jx*kiWf}Dp|Dn)w$Br_03pTh9E zQ?@ti``dQ)g|%I>1*)=Rm9}`fJU5jg_pQT=M%KH7B(72Gx_3Nz^xD)GPZDpVGcbXe zG|(>)BlOYrQejYs;{`6JXAMNebWmT{N{9r#(#naLO&J&vGofm~@RGB7n6KVssvy>v z3`8;LS$Dh+B@2QaaVuU?`Z23;%3rDnb*EIcs}am8jJ2w6zHXOyIf^v01{N@((6{82 z9XBtks|K!Nkt*xmJG)#|m6Jx(alP| zx?`_7(vd^0?9NLKFvZICa`3|X*T)soMtWzD=$%cVcb1p?5KkC-J;A3epA`3S`YVP% zQ|Q4c*FLQ@5Tk5(1~`c^J}Hc2f~y?P)4E5j)3Xf>f1%`^j%w`)p+>cb3D2tOLA-O^ z=!1$j0J+64hD()LE^k_@)!`wm4KWH1WEWo5`iG+fS9MQg?7VprkeoQxO>y`4XgfGZX$%+9S*`B4jwffeB>m^Fq&yP&{LDnG!ReE zHIPV8h8lb^9`4H1IgT@sqwght&6in_JpJBfL*HYs+}HQzJ)iCQl0NgQW9pBA%%~}U X8TwOU%D)2riB57HCfj2^^`P(