From 36695566fcd4256e7be0b267800ab0b82cc15e42 Mon Sep 17 00:00:00 2001
From: Charlie Darques <charlie.darques.etu@univ-lille.fr>
Date: Mon, 17 Mar 2025 12:13:47 +0100
Subject: [PATCH] =?UTF-8?q?correction=20=20bug=20fonctionnalit=C3=A9=20lik?=
 =?UTF-8?q?e/unlike?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 WEB-INF/src/controleurs/Feed.java        |  2 +-
 WEB-INF/src/controleurs/LikeMessage.java | 22 ++++------
 WEB-INF/src/controleurs/LogIn.java       |  3 ++
 WEB-INF/src/dao/MessageDAO.java          | 36 +++++++++++++++-
 WEB-INF/src/dao/UserDAO.java             | 52 ++++++++++++++----------
 5 files changed, 78 insertions(+), 37 deletions(-)

diff --git a/WEB-INF/src/controleurs/Feed.java b/WEB-INF/src/controleurs/Feed.java
index b86d367..2cf8653 100644
--- a/WEB-INF/src/controleurs/Feed.java
+++ b/WEB-INF/src/controleurs/Feed.java
@@ -70,7 +70,7 @@ public class Feed extends HttpServlet {
 
                     boolean msgIsLiked = false;
                     try {
-                        msgIsLiked = messageDao.isMessageLikedByUser(message, user);
+                        msgIsLiked = messageDao.isMessageLikedByUser(message.getMsgId(), user);
                     }
                     catch (SQLException sqle) {
                         sqle.getStackTrace();
diff --git a/WEB-INF/src/controleurs/LikeMessage.java b/WEB-INF/src/controleurs/LikeMessage.java
index bf26557..c1b98bc 100644
--- a/WEB-INF/src/controleurs/LikeMessage.java
+++ b/WEB-INF/src/controleurs/LikeMessage.java
@@ -23,19 +23,14 @@ public class LikeMessage extends HttpServlet {
             ThreadDAO threadDao = new ThreadDAO();
             MessageDAO messageDao = new MessageDAO();
 
-            Message msg = null;
-
-            try {
-                messageDao.getMessageByID(
-                    Integer.parseInt(req.getParameter("messageid")));
-            }
-            catch (SQLException sqle) {
-                sqle.getStackTrace();
+            int messageID = 0;
+            if (req.getParameter("messageid") != null) {
+                messageID = Integer.parseInt(req.getParameter("messageid"));
             }
 
             boolean messageLiked = false;
             try {
-                messageLiked = messageDao.isMessageLikedByUser(msg, user);
+                messageLiked = messageDao.isMessageLikedByUser(messageID, user);
             }
             catch (SQLException sqle) {
                 sqle.getStackTrace();
@@ -43,7 +38,8 @@ public class LikeMessage extends HttpServlet {
 
             if (!messageLiked) {
                 try {
-                    userDao.reactToMsg(user, msg);
+                    System.out.println("message liké " + messageLiked);
+                    userDao.reactToMsg(user, messageID);
                 }
                 catch (SQLException sqle) {
                     sqle.getStackTrace();
@@ -51,7 +47,8 @@ public class LikeMessage extends HttpServlet {
             }
             else {
                 try {
-                    userDao.unreactToMsg(user, msg);
+                    System.out.println("message liké" + messageLiked);
+                    userDao.unreactToMsg(user, messageID);
                 }
                 catch (SQLException sqle) {
                     sqle.getStackTrace();
@@ -63,5 +60,4 @@ public class LikeMessage extends HttpServlet {
             res.sendRedirect("http://localhost:8080/s4a021-web-backend/index.html");
         }
    }
-}
-// A TESTER
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/WEB-INF/src/controleurs/LogIn.java b/WEB-INF/src/controleurs/LogIn.java
index a8138c1..384eea6 100644
--- a/WEB-INF/src/controleurs/LogIn.java
+++ b/WEB-INF/src/controleurs/LogIn.java
@@ -18,6 +18,9 @@ public class LogIn extends HttpServlet {
         PrintWriter out = res.getWriter();
         UserDAO userdao = new UserDAO();
         User user = userdao.getUserByLogs(req.getParameter("login"), req.getParameter("pwd"));
+        if (user.getUserName() == null) {
+            res.sendRedirect("http://localhost:8080/s4a021-web-backend/index.html");
+        }
         req.getSession().setAttribute("login", user.getUserName());
         if (user == null) System.out.println("user null");
  
diff --git a/WEB-INF/src/dao/MessageDAO.java b/WEB-INF/src/dao/MessageDAO.java
index 39c7601..967c672 100644
--- a/WEB-INF/src/dao/MessageDAO.java
+++ b/WEB-INF/src/dao/MessageDAO.java
@@ -35,7 +35,7 @@ public class MessageDAO {
         return message;
     }
 
-    public boolean isMessageLikedByUser(Message message, User user) throws SQLException {
+    public boolean isMessageLikedByUser(int messageID, User user) throws SQLException {
         PreparedStatement ps = this.con.prepareStatement("""
                 SELECT reaction FROM reactions 
                 WHERE userID_reactions = ?
@@ -43,7 +43,7 @@ public class MessageDAO {
                 """);
         try {
             ps.setInt(1, user.getId());
-            ps.setInt(2, message.getMsgId());
+            ps.setInt(2, messageID);
             ResultSet rs = ps.executeQuery();
             while(rs.next()) {
                 if (rs.getBoolean("reaction")) {
@@ -51,6 +51,38 @@ public class MessageDAO {
                 }
                 else return false;
             }
+            if (!rs.next()) {
+                return false;
+            }
+        }
+        catch (SQLException sqle) {
+            sqle.getStackTrace();
+        }
+        return false;
+    }
+
+    public boolean userReactedToMessage(User user, int msgID) throws SQLException {
+        PreparedStatement ps = this.con.prepareStatement("SELECT * FROM reactions WHERE userid_reactions=? AND msgID_reactions=?");
+        try {
+            ps.setInt(1, user.getId());
+            ps.setInt(2, msgID);
+            ResultSet rs = ps.executeQuery();
+            if (rs.next()) return true;
+            else return false;
+        }
+        catch (SQLException sqle) {
+            sqle.getStackTrace();
+        }
+        return false;
+    }
+
+    public boolean isInReactionTable(int msgID) throws SQLException {
+        PreparedStatement ps = this.con.prepareStatement("SELECT * FROM msg WHERE msgID=?");
+        try {
+            ps.setInt(1, msgID);
+            ResultSet rs = ps.executeQuery();
+            if (rs.next()) return true;
+            else return false;
         }
         catch (SQLException sqle) {
             sqle.getStackTrace();
diff --git a/WEB-INF/src/dao/UserDAO.java b/WEB-INF/src/dao/UserDAO.java
index 2a32cdf..dd86a2f 100644
--- a/WEB-INF/src/dao/UserDAO.java
+++ b/WEB-INF/src/dao/UserDAO.java
@@ -234,12 +234,39 @@ public class UserDAO {
     }
 
     // Réagir à un message
-    public void reactToMsg(User user, Message msg) throws SQLException {
-        PreparedStatement ps = this.con.prepareStatement("INSERT INTO reactions VALUES(?, ?, ?)");
+    public void reactToMsg(User user, int msgID) throws SQLException {
+        PreparedStatement ps = null;
+        MessageDAO messageDAO = new MessageDAO();
+        if (messageDAO.isInReactionTable(msgID) && messageDAO.userReactedToMessage(user, msgID)) {
+            ps = this.con.prepareStatement("UPDATE reactions SET reaction=true WHERE userid_reactions=? AND msgid_reactions=?");
+        }
+        else {
+            ps = this.con.prepareStatement("INSERT INTO reactions VALUES(?, ?, true)");
+           
+        }
+        try {
+            ps.setInt(1, user.getId());
+            ps.setInt(2, msgID);
+            System.out.println(ps);
+            ps.executeUpdate();
+        }
+        catch (SQLException sqle) {
+            sqle.getStackTrace();
+        }
+    }
+
+    public void unreactToMsg(User user, int msgID) throws SQLException {
+        PreparedStatement ps = this.con.prepareStatement("""
+            UPDATE reactions
+            SET reaction = false
+            WHERE userID_reactions = ?
+            AND msgID_reactions = ?
+        """);
         try {
             ps.setInt(1, user.getId());
-            ps.setInt(2, msg.getMsgId());
-            ps.setString(3, "true");
+            ps.setInt(2, msgID);
+            System.out.println("requete unreact");
+            ps.executeUpdate();
         }
         catch (SQLException sqle) {
             sqle.getStackTrace();
@@ -363,21 +390,4 @@ public class UserDAO {
         }
         return messages;
     }
-
-    public void unreactToMsg(User user, Message msg) throws SQLException {
-        PreparedStatement ps = this.con.prepareStatement("""
-            UPDATE reactions
-            SET reaction = false
-            WHERE userID_reactions = ?
-            AND msgID_reactions = ?
-        """);
-        try {
-            ps.setInt(1, user.getId());
-            ps.setInt(2, msg.getMsgId());
-            ps.executeUpdate();
-        }
-        catch (SQLException sqle) {
-            sqle.getStackTrace();
-        }
-    }
 }
\ No newline at end of file
-- 
GitLab