1package dao.impl;
2
3import conn.Conexion;
4import dao.ProductoDAO;
5import models.Categoria;
6import models.Producto;
7
8import java.sql.*;
9import java.util.ArrayList;
10import java.util.List;
11
12public class ProductoDAOImpl implements ProductoDAO {
13
14 @Override
15 public boolean crear(Producto p) {
16 String sql = "INSERT INTO producto (nombre, precio, stock, id_categoria) VALUES (?, ?, ?, ?)";
17 try (Connection con = Conexion.getConexion();
18 PreparedStatement ps = con.prepareStatement(sql)) {
19 ps.setString(1, p.getNombre());
20 ps.setDouble(2, p.getPrecio());
21 ps.setInt(3, p.getStock());
22 ps.setInt(4, p.getCategoria().getId());
23 return ps.executeUpdate() > 0;
24 } catch (SQLException e) {
25 e.printStackTrace();
26 return false;
27 }
28 }
29
30 @Override
31 public List<Producto> listarTodos() {
32 List<Producto> lista = new ArrayList<>();
33 String sql = "SELECT p.id_producto, p.nombre, p.precio, p.stock, c.id_categoria, c.nombre as cat_nombre " +
34 "FROM producto p JOIN categoria c ON p.id_categoria = c.id_categoria";
35 try (Connection con = Conexion.getConexion();
36 PreparedStatement ps = con.prepareStatement(sql);
37 ResultSet rs = ps.executeQuery()) {
38 while (rs.next()) {
39 Categoria cat = new Categoria(rs.getInt("id_categoria"), rs.getString("cat_nombre"));
40 Producto p = new Producto(
41 rs.getInt("id_producto"),
42 rs.getString("nombre"),
43 rs.getDouble("precio"),
44 rs.getInt("stock"),
45 cat
46 );
47 lista.add(p);
48 }
49 } catch (SQLException e) {
50 e.printStackTrace();
51 }
52 return lista;
53 }
54
55 @Override
56 public Producto obtenerPorId(int id) {
57 String sql = "SELECT p.id_producto, p.nombre, p.precio, p.stock, c.id_categoria, c.nombre as cat_nombre " +
58 "FROM producto p JOIN categoria c ON p.id_categoria = c.id_categoria WHERE p.id_producto = ?";
59 try (Connection con = Conexion.getConexion();
60 PreparedStatement ps = con.prepareStatement(sql)) {
61 ps.setInt(1, id);
62 try (ResultSet rs = ps.executeQuery()) {
63 if (rs.next()) {
64 Categoria cat = new Categoria(rs.getInt("id_categoria"), rs.getString("cat_nombre"));
65 return new Producto(rs.getInt("id_producto"), rs.getString("nombre"), rs.getDouble("precio"), rs.getInt("stock"), cat);
66 }
67 }
68 } catch (SQLException e) {
69 e.printStackTrace();
70 }
71 return null;
72 }
73
74 @Override
75 public boolean actualizarStock(int idProducto, int nuevoStock) {
76 String sql = "UPDATE producto SET stock = ? WHERE id_producto = ?";
77 try (Connection con = Conexion.getConexion();
78 PreparedStatement ps = con.prepareStatement(sql)) {
79 ps.setInt(1, nuevoStock);
80 ps.setInt(2, idProducto);
81 return ps.executeUpdate() > 0;
82 } catch (SQLException e) {
83 e.printStackTrace();
84 return false;
85 }
86 }
87
88 @Override
89 public boolean eliminar(int id) {
90 String sql = "DELETE FROM producto WHERE id_producto = ?";
91 try (Connection con = Conexion.getConexion();
92 PreparedStatement ps = con.prepareStatement(sql)) {
93 ps.setInt(1, id);
94 return ps.executeUpdate() > 0;
95 } catch (SQLException e) {
96 e.printStackTrace();
97 return false;
98 }
99 }
100}