From 27d83f6d19e46c02c7bc416bc835b23c611f4420 Mon Sep 17 00:00:00 2001
From: Charlie Darques <charlie.darques.etu@univ-lille.fr>
Date: Fri, 14 Mar 2025 12:05:58 +0100
Subject: [PATCH] =?UTF-8?q?possibilit=C3=A9=20de=20suivre=20un=20thread=20?=
 =?UTF-8?q?depuis=20la=20page=20discover?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 WEB-INF/src/controleurs/Discover.java     | 19 ++++++++++-
 WEB-INF/src/controleurs/FollowThread.java | 41 +++++++++++++++++++++--
 WEB-INF/src/dao/UserDAO.java              | 13 +++++++
 3 files changed, 70 insertions(+), 3 deletions(-)

diff --git a/WEB-INF/src/controleurs/Discover.java b/WEB-INF/src/controleurs/Discover.java
index f1dab7e..5d909fe 100644
--- a/WEB-INF/src/controleurs/Discover.java
+++ b/WEB-INF/src/controleurs/Discover.java
@@ -39,6 +39,16 @@ public class Discover extends HttpServlet {
 
                 out.println(PageGeneration.generateNavMenu());
 
+                List<MyThread> followedThreads = null;
+
+                try {
+                    followedThreads = userDao.getThreadsFollowedByUser(user);
+                }
+                catch (SQLException sqle) {
+                    sqle.getStackTrace();
+                }
+
+
                 if (!messages.isEmpty()) {
                     for (Message message : messages) {
                         MyThread msgThread = null;
@@ -49,6 +59,7 @@ public class Discover extends HttpServlet {
                         }
                         User sender = userDao.getUserById(message.getSenderId());
                         String senderName = sender.getUserName();
+                        boolean followed = followedThreads.contains(msgThread);
                         
                         out.println("<div class=\"message\">");
                         out.println("<h3 class=\"msgThread\">" + msgThread.getThreadName() + "</h3>");
@@ -57,7 +68,13 @@ public class Discover extends HttpServlet {
 
                         out.println("<form class=\"followThread\" action=\"http://localhost:8080/s4a021-web-backend/FollowThread\" method=\"post\">");
                         out.println("<input name=\"threadid\" type=\"hidden\" value=\"" + msgThread.getId() +"\">");
-                        out.println("<button type=\"submit\">Follow</button>");
+                        
+                        if (followed) {
+                            out.println("<button type=\"submit\">Followed</button>");
+                        }
+                        else {
+                            out.println("<button type=\"submit\">Follow</button>");
+                        }
                         out.println("</form>");
                     }
                 }
diff --git a/WEB-INF/src/controleurs/FollowThread.java b/WEB-INF/src/controleurs/FollowThread.java
index 74912c3..4c00b8a 100644
--- a/WEB-INF/src/controleurs/FollowThread.java
+++ b/WEB-INF/src/controleurs/FollowThread.java
@@ -2,16 +2,19 @@ package controleurs;
 
 import dao.ThreadDAO;
 import dao.UserDAO;
+import dto.MyThread;
 import dto.User;
 import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServlet;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 
 import java.io.IOException;
 import java.sql.SQLException;
+import java.util.List;
 
 @WebServlet("/FollowThread")
-public class FollowThread {
+public class FollowThread extends HttpServlet {
     public void service(HttpServletRequest req, HttpServletResponse res)
             throws IOException {
         if (req.getSession().getAttribute("user") != null) {
@@ -20,12 +23,46 @@ public class FollowThread {
             UserDAO userDao = new UserDAO();
             ThreadDAO threadDao = new ThreadDAO();
 
+            
+            List<MyThread> threadsFollowed = null;
             try {
-                userDao.followThread(user, threadDao.getThreadById((Integer.parseInt(req.getParameter("threadid")))));
+                threadsFollowed = userDao.getThreadsFollowedByUser(user);
+            } 
+            catch (SQLException sqle) {
+                sqle.getStackTrace();
+            }
+            
+            boolean followed = false;
+            try {
+                if (threadsFollowed.contains(threadDao.getThreadById((Integer.parseInt(req.getParameter("threadid")))))) {
+                    followed = true;
+                }
+                else {
+                    followed = false;
+                }
             }
             catch (SQLException sqle) {
                 sqle.getStackTrace();
             }
+
+            if (!followed) {
+                try {
+                    userDao.followThread(user, threadDao.getThreadById((Integer.parseInt(req.getParameter("threadid")))));
+                    res.sendRedirect("http://localhost:8080/s4a021-web-backend/Discover");
+                }
+                catch (SQLException sqle) {
+                    sqle.getStackTrace();
+                }
+            }
+            else {
+                try {
+                    userDao.unfollowThread(user, threadDao.getThreadById((Integer.parseInt(req.getParameter("threadid")))));
+                    res.sendRedirect("http://localhost:8080/s4a021-web-backend/Discover");
+                }
+                catch (SQLException sqle) {
+                    sqle.getStackTrace();
+                }
+            }
         }
         else {
             res.sendRedirect("http://localhost:8080/s4a021-web-backend/Welcome");
diff --git a/WEB-INF/src/dao/UserDAO.java b/WEB-INF/src/dao/UserDAO.java
index 1aa0fce..442504b 100644
--- a/WEB-INF/src/dao/UserDAO.java
+++ b/WEB-INF/src/dao/UserDAO.java
@@ -165,6 +165,19 @@ public class UserDAO {
         }
     }
 
+    public void unfollowThread(User user, MyThread thread) throws SQLException {
+        PreparedStatement ps = this.con.prepareStatement("DELETE FROM follow WHERE userID_follow = ? AND threadID_follow = ?)");
+        try {
+            ps.setInt(1, user.getId());
+            ps.setInt(2, thread.getId());
+            ps.executeUpdate();
+        }
+        catch (SQLException sqle) {
+            sqle.getStackTrace();
+        }
+    }
+
+
     // Poster un message dans un thread
     public void postMessage(User user, MyThread thread, String message) throws SQLException {
         PreparedStatement ps = this.con.prepareStatement("INSERT INTO msg (userID_msg, threadID, msg, posted_at) VALUES(?, ?, ?, ?)");
-- 
GitLab