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