From cf17b8ed17e88d582730a3d761d94b2a67792e6b Mon Sep 17 00:00:00 2001 From: jon ander Date: Wed, 9 Apr 2025 19:58:42 +0200 Subject: [PATCH] Add new entity classes for Categoria, Item, Propiedad, TipoDato, and Ubicacion; update Departamento and User entities for improved relationships and validation --- .../GestionInventario/entities/Categoria.java | 24 +++++++++++ .../entities/Departamento.java | 1 + .../GestionInventario/entities/Item.java | 39 ++++++++++++++++++ .../GestionInventario/entities/Propiedad.java | 26 ++++++++++++ .../GestionInventario/entities/TipoDato.java | 23 +++++++++++ .../GestionInventario/entities/Ubicacion.java | 29 +++++++++++++ .../GestionInventario/entities/User.java | 5 ++- .../GestionInventario/entities/Valor.java | 29 +++++++++++++ src/main/resources/application.properties | 2 +- src/main/resources/db/Inventario_bueno_v1.sql | 10 ++--- src/main/resources/db/Modelo_Inventario.mwb | Bin 13889 -> 15438 bytes src/main/resources/static/css/table_style.css | 2 + src/main/resources/templates/home.html | 3 ++ 13 files changed, 185 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/ieslamar/GestionInventario/entities/Categoria.java create mode 100644 src/main/java/com/ieslamar/GestionInventario/entities/Item.java create mode 100644 src/main/java/com/ieslamar/GestionInventario/entities/Propiedad.java create mode 100644 src/main/java/com/ieslamar/GestionInventario/entities/TipoDato.java create mode 100644 src/main/java/com/ieslamar/GestionInventario/entities/Ubicacion.java create mode 100644 src/main/java/com/ieslamar/GestionInventario/entities/Valor.java diff --git a/src/main/java/com/ieslamar/GestionInventario/entities/Categoria.java b/src/main/java/com/ieslamar/GestionInventario/entities/Categoria.java new file mode 100644 index 0000000..18952be --- /dev/null +++ b/src/main/java/com/ieslamar/GestionInventario/entities/Categoria.java @@ -0,0 +1,24 @@ +package com.ieslamar.GestionInventario.entities; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Table(name = "categoria") +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class Categoria { + @Id + @Column(name = "idcategoria") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false) + private String nombre; + +} diff --git a/src/main/java/com/ieslamar/GestionInventario/entities/Departamento.java b/src/main/java/com/ieslamar/GestionInventario/entities/Departamento.java index 0e4c96e..117ae9b 100644 --- a/src/main/java/com/ieslamar/GestionInventario/entities/Departamento.java +++ b/src/main/java/com/ieslamar/GestionInventario/entities/Departamento.java @@ -14,6 +14,7 @@ import lombok.Setter; @AllArgsConstructor public class Departamento { @Id + @Column(name = "iddepartamentos") @GeneratedValue(strategy = GenerationType.IDENTITY) // ID autoincremental private int id; diff --git a/src/main/java/com/ieslamar/GestionInventario/entities/Item.java b/src/main/java/com/ieslamar/GestionInventario/entities/Item.java new file mode 100644 index 0000000..6ec4613 --- /dev/null +++ b/src/main/java/com/ieslamar/GestionInventario/entities/Item.java @@ -0,0 +1,39 @@ +package com.ieslamar.GestionInventario.entities; + + +import jakarta.persistence.*; +import lombok.*; + +import java.util.Date; + +@Entity +@Table(name = "item") +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class Item { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "iditem") + private Long id; + + @Column(name = "fecha_alta") + private Date fechaAlta; + + @Column(name = "fecha_modificacion") + private Date fechaModificacion; + + @ManyToOne + @JoinColumn(name = "users_id") + private User usuario; + + @ManyToOne + @JoinColumn(name = "ubicacion_idubicacion") + private Ubicacion ubicacion; + + @ManyToOne + @JoinColumn(name = "producto_idproducto") + private Producto producto; +} diff --git a/src/main/java/com/ieslamar/GestionInventario/entities/Propiedad.java b/src/main/java/com/ieslamar/GestionInventario/entities/Propiedad.java new file mode 100644 index 0000000..203f57c --- /dev/null +++ b/src/main/java/com/ieslamar/GestionInventario/entities/Propiedad.java @@ -0,0 +1,26 @@ +package com.ieslamar.GestionInventario.entities; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Table(name = "propiedad") // Nombre de la tabla en MySQL +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class Propiedad { + @Id + @Column(name = "idpropiedad") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column + private String nombre; + + @ManyToOne + @JoinColumn(name = "tipodato_idtipodato") + private TipoDato tipoDato; +} diff --git a/src/main/java/com/ieslamar/GestionInventario/entities/TipoDato.java b/src/main/java/com/ieslamar/GestionInventario/entities/TipoDato.java new file mode 100644 index 0000000..ea21af7 --- /dev/null +++ b/src/main/java/com/ieslamar/GestionInventario/entities/TipoDato.java @@ -0,0 +1,23 @@ +package com.ieslamar.GestionInventario.entities; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Table(name = "tipodato") +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class TipoDato { + @Id + @Column(name = "idtipodato") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "tipo_dato") + private String tipoDato; +} diff --git a/src/main/java/com/ieslamar/GestionInventario/entities/Ubicacion.java b/src/main/java/com/ieslamar/GestionInventario/entities/Ubicacion.java new file mode 100644 index 0000000..bdc4675 --- /dev/null +++ b/src/main/java/com/ieslamar/GestionInventario/entities/Ubicacion.java @@ -0,0 +1,29 @@ +package com.ieslamar.GestionInventario.entities; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Table(name = "ubicacion") +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class Ubicacion { + @Id + @Column(name = "idubicacion") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false) + private String nombre; + + @Column(nullable = true) + private String descripcion; + + @Column(nullable = true) + private String notas; +} diff --git a/src/main/java/com/ieslamar/GestionInventario/entities/User.java b/src/main/java/com/ieslamar/GestionInventario/entities/User.java index 1ee3d4a..ef7b43d 100644 --- a/src/main/java/com/ieslamar/GestionInventario/entities/User.java +++ b/src/main/java/com/ieslamar/GestionInventario/entities/User.java @@ -27,8 +27,9 @@ public class User { @Column(nullable = false, unique = true) // No se permite emails duplicados private String mail; - @Column(nullable = true) - private Integer departamentos_iddepartamentos; + @ManyToOne + @JoinColumn(name = "departamentos_iddepartamentos", nullable = true) // Nombre de la columna en la tabla `users` + private Departamento departamento; } diff --git a/src/main/java/com/ieslamar/GestionInventario/entities/Valor.java b/src/main/java/com/ieslamar/GestionInventario/entities/Valor.java new file mode 100644 index 0000000..d551290 --- /dev/null +++ b/src/main/java/com/ieslamar/GestionInventario/entities/Valor.java @@ -0,0 +1,29 @@ +package com.ieslamar.GestionInventario.entities; + +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Table(name = "valor") +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class Valor { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "idvalor") + private Long id; + + @Column(nullable = false) + private String valor; + + @ManyToOne + @JoinColumn(name = "propiedad_idpropiedad") + private Propiedad propiedad; + + @ManyToOne + @JoinColumn(name = "item_iditem") + private Item item; +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 9ba348e..98eb346 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -14,7 +14,7 @@ spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # Configuración de JPA e Hibernate spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect -#spring.jpa.hibernate.ddl-auto=update +spring.jpa.hibernate.ddl-auto=validate diff --git a/src/main/resources/db/Inventario_bueno_v1.sql b/src/main/resources/db/Inventario_bueno_v1.sql index 8432c2c..2d5dc47 100644 --- a/src/main/resources/db/Inventario_bueno_v1.sql +++ b/src/main/resources/db/Inventario_bueno_v1.sql @@ -95,7 +95,7 @@ DROP TABLE IF EXISTS `inventario`.`ubicacion` ; CREATE TABLE IF NOT EXISTS `inventario`.`ubicacion` ( `idubicacion` INT NOT NULL AUTO_INCREMENT, - `nombre` VARCHAR(25) NULL, + `nombre` VARCHAR(45) NOT NULL, `descripcion` VARCHAR(100) NULL, `notas` VARCHAR(255) NULL, PRIMARY KEY (`idubicacion`)) @@ -109,7 +109,7 @@ DROP TABLE IF EXISTS `inventario`.`categoria` ; CREATE TABLE IF NOT EXISTS `inventario`.`categoria` ( `idcategoria` INT NOT NULL AUTO_INCREMENT, - `nombre` VARCHAR(45) NULL, + `nombre` VARCHAR(45) NOT NULL, PRIMARY KEY (`idcategoria`)) ENGINE = InnoDB; @@ -121,10 +121,10 @@ DROP TABLE IF EXISTS `inventario`.`producto` ; CREATE TABLE IF NOT EXISTS `inventario`.`producto` ( `idproducto` INT NOT NULL AUTO_INCREMENT, - `nombre` VARCHAR(45) NULL, - `productocol` VARCHAR(45) NULL, + `nombre` VARCHAR(45) NOT NULL, `categoria_idcategoria` INT NOT NULL, `departamentos_iddepartamentos` INT NOT NULL, + `descripcion` VARCHAR(45) NULL, PRIMARY KEY (`idproducto`), INDEX `fk_producto_categoria1_idx` (`categoria_idcategoria` ASC) VISIBLE, INDEX `fk_producto_departamentos1_idx` (`departamentos_iddepartamentos` ASC) VISIBLE, @@ -148,7 +148,7 @@ DROP TABLE IF EXISTS `inventario`.`item` ; CREATE TABLE IF NOT EXISTS `inventario`.`item` ( `iditem` INT NOT NULL AUTO_INCREMENT, - `fecha_alta` DATE NULL, + `fecha_alta` DATE NOT NULL, `fecha_modificacion` DATE NULL, `users_id` BIGINT NOT NULL, `ubicacion_idubicacion` INT NOT NULL, diff --git a/src/main/resources/db/Modelo_Inventario.mwb b/src/main/resources/db/Modelo_Inventario.mwb index c2c05d69f12d25a462dce1c1c6ca9b95aa95bc13..047425ca75bdc17ec79a433d359d5521371e6221 100644 GIT binary patch literal 15438 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 literal 13889 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 diff --git a/src/main/resources/static/css/table_style.css b/src/main/resources/static/css/table_style.css index e54bc30..afd169e 100644 --- a/src/main/resources/static/css/table_style.css +++ b/src/main/resources/static/css/table_style.css @@ -49,6 +49,8 @@ table { overflow: auto; border-radius: 10px; margin-bottom: 10px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + } .table1 thead { diff --git a/src/main/resources/templates/home.html b/src/main/resources/templates/home.html index f213fc8..238c22d 100644 --- a/src/main/resources/templates/home.html +++ b/src/main/resources/templates/home.html @@ -7,6 +7,9 @@

Bienvenido a Gestión de Inventario