From 6ab2fb1a62dda5edc03b76e9a18b741ddcb8c187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luc=C3=A0s?= Date: Wed, 1 May 2024 01:14:21 +0200 Subject: [PATCH] draft(DevWeb): Try to fetch the user for each pages --- .../database/dao/EntityManagerProvider.java | 15 ++++++++---- .../web/filter/AuthenticationFilter.java | 24 +++++++++++++++++-- .../uppa/project/web/websocket/GameWS.java | 19 +++++++-------- 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/database/dao/EntityManagerProvider.java b/S2/DevWeb/Projet/src/main/java/uppa/project/database/dao/EntityManagerProvider.java index bf29418..7bb09c9 100644 --- a/S2/DevWeb/Projet/src/main/java/uppa/project/database/dao/EntityManagerProvider.java +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/database/dao/EntityManagerProvider.java @@ -8,6 +8,7 @@ package uppa.project.database.dao; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.FlushModeType; import jakarta.persistence.Persistence; import uppa.project.Global; @@ -25,14 +26,18 @@ public final class EntityManagerProvider { private static EntityManagerFactory factory; public static EntityManager getInstance() { + if (instance == null) { + instance = getFactory().createEntityManager(); + instance.setFlushMode(FlushModeType.COMMIT); + } + return instance; + } + + public static EntityManagerFactory getFactory() { if (factory == null) { factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); } - - if (instance == null) { - instance = factory.createEntityManager(); - } - return instance; + return factory; } public static void setPersitenceUnitName(String name) { diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/web/filter/AuthenticationFilter.java b/S2/DevWeb/Projet/src/main/java/uppa/project/web/filter/AuthenticationFilter.java index 8c6ef2c..bf9e1c0 100644 --- a/S2/DevWeb/Projet/src/main/java/uppa/project/web/filter/AuthenticationFilter.java +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/web/filter/AuthenticationFilter.java @@ -1,15 +1,20 @@ package uppa.project.web.filter; +import jakarta.persistence.EntityManager; import jakarta.servlet.Filter; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; -import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import java.io.IOException; +import uppa.project.database.dao.DAO; +import uppa.project.database.dao.DAOException; +import uppa.project.database.dao.EntityManagerProvider; +import uppa.project.database.dao.jpa.Game_JPA_DAO_Factory; +import uppa.project.database.pojo.User; public class AuthenticationFilter implements Filter { @@ -24,7 +29,22 @@ public class AuthenticationFilter implements Filter { // Si l'utilisateur est connecté, laisser passer la requête if (isLoggedIn) { - chain.doFilter(request, response); + User currentUser = (User) session.getAttribute("user"); + try { + // Met à jour l'utilisateur en session + DAO userDAO = new Game_JPA_DAO_Factory().getDAOUser(); + session.removeAttribute("user"); + EntityManager em = EntityManagerProvider.getInstance(); + + em.getTransaction().begin(); + session.setAttribute("user", userDAO.findById(currentUser.getId().intValue())); + em.getTransaction().commit(); + + // Passe la requête au filtre suivant + chain.doFilter(request, response); + } catch (DAOException e) { + throw new RuntimeException(e); + } } else { // Sinon, rediriger vers la page de connexion httpResponse.sendRedirect(httpRequest.getContextPath() + "/login"); diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/web/websocket/GameWS.java b/S2/DevWeb/Projet/src/main/java/uppa/project/web/websocket/GameWS.java index 9be266c..dfe1b6a 100644 --- a/S2/DevWeb/Projet/src/main/java/uppa/project/web/websocket/GameWS.java +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/web/websocket/GameWS.java @@ -16,6 +16,7 @@ import uppa.project.database.dao.DAO; import uppa.project.database.dao.DAOException; import uppa.project.database.dao.EntityManagerProvider; import uppa.project.database.dao.jpa.DAO_JPA_User; +import uppa.project.database.dao.jpa.Game_JPA_DAO_Factory; import uppa.project.database.pojo.Card; import uppa.project.database.pojo.Game; import uppa.project.database.pojo.Player; @@ -225,20 +226,16 @@ public class GameWS { } else { theoricWinner.setWinner(); - // Broadcast the end of the game - broadcast(new Message("end", gson.toJson(new SimpleGame(game, games.get(game)))).toJson()); - - - EntityManager em = EntityManagerProvider.getInstance(); + EntityManager em = EntityManagerProvider.getFactory().createEntityManager(); + DAO playerDAO = new Game_JPA_DAO_Factory().getDAOPlayer(); em.getTransaction().begin(); - em.persist(game); - for (Player p : games.get(game)){ - game.addPlayer(p); - p.getUser().addPlayedGame(p); - } - em.persist(game); + for (Player p : games.get(game)) playerDAO.create(p); em.getTransaction().commit(); + em.close(); + + // Broadcast the end of the game + broadcast(new Message("end", gson.toJson(new SimpleGame(game, games.get(game)))).toJson()); } } }