From dc616576ed9edf122950351f848b785411eeab71 Mon Sep 17 00:00:00 2001
From: GabrielDiMarco <gabrieldm1998@gmail.com>
Date: Wed, 14 Aug 2024 15:39:24 -0300
Subject: [PATCH] Entrega final

---
 src/main/java/com/stock/dao/UsuarioDAO.java   |  3 +-
 .../java/com/stock/dao/UsuarioDAOImpl.java    | 44 ++++++++++++++++++-
 src/main/java/com/stock/model/Base.java       | 12 ++++-
 src/main/java/com/stock/model/Usuario.java    | 13 +++---
 .../com/stock/resources/FamProdResource.java  |  1 +
 src/main/java/com/stock/resources/Filtro.java | 44 +++++++++++++++++++
 .../com/stock/resources/LoginServicio.java    |  2 +
 .../stock/resources/MateriaPrimaResource.java |  1 +
 .../com/stock/resources/UsuariosResource.java |  2 +-
 .../com/stock/singleton/SingletonManFact.java |  1 -
 src/main/resources/META-INF/persistence.xml   |  3 ++
 src/main/webapp/WEB-INF/web.xml               | 12 ++++-
 12 files changed, 123 insertions(+), 15 deletions(-)
 create mode 100644 src/main/java/com/stock/resources/Filtro.java

diff --git a/src/main/java/com/stock/dao/UsuarioDAO.java b/src/main/java/com/stock/dao/UsuarioDAO.java
index 1108093..d252c55 100644
--- a/src/main/java/com/stock/dao/UsuarioDAO.java
+++ b/src/main/java/com/stock/dao/UsuarioDAO.java
@@ -8,6 +8,7 @@ public interface UsuarioDAO extends GenericDAO<Usuario>{
 
 	Usuario obtenerPorNombre(String nombre);
 	
-	// No lo puedo poner acá si tiene static en Impl
+	Usuario obtenerPorUsuario(String user);
+	
 	boolean validar(String user, String password);
 }
diff --git a/src/main/java/com/stock/dao/UsuarioDAOImpl.java b/src/main/java/com/stock/dao/UsuarioDAOImpl.java
index 76e5fb3..fd36456 100644
--- a/src/main/java/com/stock/dao/UsuarioDAOImpl.java
+++ b/src/main/java/com/stock/dao/UsuarioDAOImpl.java
@@ -32,6 +32,36 @@ public class UsuarioDAOImpl extends GenericDAOImpl<Usuario> implements UsuarioDA
 		    }
 		} catch (Exception e) {
 		    e.printStackTrace();
+		    return null;
+		} finally {
+		    // Cerrar el EntityManager
+		    //em.close();
+		}
+		return obj;
+	}
+	
+	@Override
+	public Usuario obtenerPorUsuario(String user) {
+		// TODO Auto-generated method stub
+		EntityManager em = SingletonManFact.getInstance();
+		EntityTransaction transaction = em.getTransaction();
+		Usuario obj = null;
+		
+		try {
+			//obj = em.find(this.clase, objId);
+			//TypedQuery<Usuario> query = em.createQuery("SELECT u FROM Usuario u WHERE usuario.usuario = :user", Usuario.class);
+			TypedQuery<Usuario> query = em.createQuery("FROM Usuario WHERE usuario.usuario = :user", Usuario.class);
+			//TypedQuery<Usuario> query = em.createQuery("FROM Usuario WHERE usuario.usuario = :user", user);
+			query.setParameter("user", user);
+	        //List<T> obj = query.getResultList().get(0);
+			obj = query.getSingleResult();
+			
+			if (obj == null) {
+		        System.out.println("No se encontró ningún elemento con el nombre de usuario " + user);
+		    }
+		} catch (Exception e) {
+		    e.printStackTrace();
+		    return null;
 		} finally {
 		    // Cerrar el EntityManager
 		    //em.close();
@@ -39,8 +69,18 @@ public class UsuarioDAOImpl extends GenericDAOImpl<Usuario> implements UsuarioDA
 		return obj;
 	}
 	
-	//static?
 	public boolean validar(String user, String password) {
-		return (user.equals("admin") && password.equals("admin"));
+		Usuario userAuth = obtenerPorUsuario(user);
+		if(userAuth == null || userAuth.getValid() == false) {
+			System.out.print("El usuario no existe\n");
+			return false;
+		}
+		/*System.out.print("Nombre del usuario: " + userAuth.getNombre() + "\n");
+		if (user.equals(userAuth.getUsuario()) && password.equals(userAuth.getContraseña())) {
+			System.out.print("Login exitoso\n");
+		} else {
+			System.out.print("La contraseña no coincide\n");
+		}*/
+		return (user.equals(userAuth.getUsuario()) && password.equals(userAuth.getContraseña()));
 	}
 }
diff --git a/src/main/java/com/stock/model/Base.java b/src/main/java/com/stock/model/Base.java
index c8f5597..d549d24 100644
--- a/src/main/java/com/stock/model/Base.java
+++ b/src/main/java/com/stock/model/Base.java
@@ -16,12 +16,20 @@ public abstract class Base {
 	@ColumnDefault("1")
 	boolean valid;
 	
+	public Long getId() {
+		return id;
+	}
+	
 	public void setId(Long id) {
 		this.id = id;
 	}
 	
-	public Long getId() {
-		return id;
+	public boolean getValid() {
+		return valid;
+	}
+	
+	public void setValid(boolean valid) {
+		this.valid = valid;
 	}
 	
 	public Base(){}
diff --git a/src/main/java/com/stock/model/Usuario.java b/src/main/java/com/stock/model/Usuario.java
index 947fb48..0827154 100644
--- a/src/main/java/com/stock/model/Usuario.java
+++ b/src/main/java/com/stock/model/Usuario.java
@@ -6,8 +6,10 @@ import java.util.List;
 
 import javax.persistence.*;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 
+@Cacheable(false)
 @Entity
 //@JsonIgnoreProperties
 @Table(name="USUARIO")
@@ -35,6 +37,7 @@ public class Usuario extends Base {
 	private String apellido;
 	
 	@Column(name = "ICORPORACION")
+	//@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
 	private Date incorp;
 	
 	@OneToMany(mappedBy = "usuario")
@@ -62,13 +65,6 @@ public class Usuario extends Base {
 		//this.valid = true;
 	}
 	
-//	public Long getId() {
-//		return id;
-//	}
-//	public void setId(Long id) {
-//		this.id = id;
-//	}
-	
 	public int getDni() {
 		return dni;
 	}
@@ -122,6 +118,9 @@ public class Usuario extends Base {
 	public Date getIncorp() {
 		return incorp;
 	}
+	public void setIncorp(Date incorp) {
+		this.incorp = incorp;
+	}
 
 	public List<ProductoTerminado> getProdTermi() {
 		return prodTermi;
diff --git a/src/main/java/com/stock/resources/FamProdResource.java b/src/main/java/com/stock/resources/FamProdResource.java
index e321f0f..dff2026 100644
--- a/src/main/java/com/stock/resources/FamProdResource.java
+++ b/src/main/java/com/stock/resources/FamProdResource.java
@@ -42,6 +42,7 @@ public class FamProdResource {
 	@Produces(MediaType.APPLICATION_JSON)
 	@Consumes(MediaType.APPLICATION_JSON)
 	public Response guardar(FamProd obj) {
+		System.out.print(obj);
 		try {
 			objdao.guardar(obj);
 			return Response.ok().build();
diff --git a/src/main/java/com/stock/resources/Filtro.java b/src/main/java/com/stock/resources/Filtro.java
new file mode 100644
index 0000000..503b1ff
--- /dev/null
+++ b/src/main/java/com/stock/resources/Filtro.java
@@ -0,0 +1,44 @@
+package com.stock.resources;
+
+import java.io.IOException;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+//import jakarta.servlet.annotation.WebFilter;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
+
+public class Filtro implements Filter {
+
+    /**
+     * Default constructor. 
+     */
+    public Filtro() {
+        // TODO Auto-generated constructor stub
+    }
+
+	@Override
+	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+		
+	    HttpServletResponse res = (HttpServletResponse) response;
+	    HttpServletRequest req = (HttpServletRequest) request;
+
+	    res.addHeader("Access-Control-Allow-Origin", "*");
+	    res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS");
+	    res.addHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
+	    res.addHeader("Access-Control-Allow-Credentials", "true");
+
+	    chain.doFilter(request, res);
+	  }
+
+	@Override
+	public void destroy() {}
+
+	@Override
+	public void init(FilterConfig fConfig) throws ServletException {}
+
+}
diff --git a/src/main/java/com/stock/resources/LoginServicio.java b/src/main/java/com/stock/resources/LoginServicio.java
index efa9ff8..be69b0a 100644
--- a/src/main/java/com/stock/resources/LoginServicio.java
+++ b/src/main/java/com/stock/resources/LoginServicio.java
@@ -45,6 +45,8 @@ public class LoginServicio {
 	@Produces(MediaType.APPLICATION_JSON)
 	@Consumes(MediaType.APPLICATION_JSON)
 	public Response validar(Usuario usuario) {
+		// El mensaje no incluye el atributo valid del usuario, por lo que siempre llegará como false y dará un Bad Request
+		// && usuario.getValid()
 		if(usuario != null && usuario.getUsuario() != null && usuario.getContraseña() != null) {
 			boolean status = userdao.validar(usuario.getUsuario(), usuario.getContraseña());
 			//SignatureAlgorithm signAlg = SignatureAlgorithm.HS256;
diff --git a/src/main/java/com/stock/resources/MateriaPrimaResource.java b/src/main/java/com/stock/resources/MateriaPrimaResource.java
index 7dd3c01..f39f413 100644
--- a/src/main/java/com/stock/resources/MateriaPrimaResource.java
+++ b/src/main/java/com/stock/resources/MateriaPrimaResource.java
@@ -44,6 +44,7 @@ public class MateriaPrimaResource {
 	@Produces(MediaType.APPLICATION_JSON)
 	@Consumes(MediaType.APPLICATION_JSON)
 	public Response guardar(MateriaPrima obj) {
+		System.out.print(obj);
 		try {
 			objdao.guardar(obj);
 			return Response.ok().build();
diff --git a/src/main/java/com/stock/resources/UsuariosResource.java b/src/main/java/com/stock/resources/UsuariosResource.java
index ca7d474..3a7d5c1 100644
--- a/src/main/java/com/stock/resources/UsuariosResource.java
+++ b/src/main/java/com/stock/resources/UsuariosResource.java
@@ -63,7 +63,7 @@ public class UsuariosResource {
 	public Response editar(Usuario obj){
 		Usuario aux = objdao.obtenerPorId(obj.getId());
 		if (aux != null){
-			objdao.actualizar(obj);;
+			objdao.actualizar(obj);
 			return Response.ok().entity(obj).build();
 		} else {
 			return Response.status(Response.Status.NOT_FOUND).entity("[]").build();
diff --git a/src/main/java/com/stock/singleton/SingletonManFact.java b/src/main/java/com/stock/singleton/SingletonManFact.java
index e6a2050..a113ba9 100644
--- a/src/main/java/com/stock/singleton/SingletonManFact.java
+++ b/src/main/java/com/stock/singleton/SingletonManFact.java
@@ -17,7 +17,6 @@ public class SingletonManFact {
             emf = Persistence.createEntityManagerFactory("miUP");
             em = emf.createEntityManager();
         }
-        
         return em;
     }
     
diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml
index 57eb69a..b7d5341 100644
--- a/src/main/resources/META-INF/persistence.xml
+++ b/src/main/resources/META-INF/persistence.xml
@@ -12,6 +12,9 @@
 		<property name="javax.persistence.jdbc.user" value="root"/>
 		<property name="javax.persistence.jdbc.password" value="root"/>
 		<property name="javax.persistence.schema-generation.database.action" value="create"/>
+		
+		<property name="hibernate.cache.use_second_level_cache" value="false"/>
+   		<property name="hibernate.cache.use_query_cache" value="false"/>
 <!-- 		<property name="hibernate.hbm2ddl.auto" value="update"/> -->
     </properties>
   </persistence-unit>
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index 9438052..6651075 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -20,6 +20,15 @@
 	</servlet-mapping>
 
 	<filter>
+		<filter-name>Filtro</filter-name>
+		<filter-class>com.stock.resources.Filtro</filter-class>
+	</filter>
+	<filter-mapping>
+		<filter-name>Filtro</filter-name>
+		<url-pattern>/rest/*</url-pattern>
+	</filter-mapping>
+
+	<!-- filter>
 		<filter-name>CorsFilter</filter-name>
 		<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
 		<init-param>
@@ -50,7 +59,8 @@
 	<filter-mapping>
 		<filter-name>CorsFilter</filter-name>
 		<url-pattern>/*</url-pattern>
-	</filter-mapping>
+	</filter-mapping -->
+	
 		<!-- servlet> <servlet-name>OpenApi</servlet-name> <servlet-class>io.swagger.v3.jaxrs2.integration.OpenApiServlet</servlet-class> 
 			<init-param> <param-name>openApi.configuration.resourcePackages</param-name> 
 			<param-value>com.stock.resources</param-value> </init-param> <load-on-startup>2</load-on-startup> 
-- 
GitLab