diff --git a/WEB-INF/src/controleurs/Discover.java b/WEB-INF/src/controleurs/Discover.java index f1dab7eff349e4cfae2d79b85d2bd401cd483d0d..5d909fe07459f2df7b1c7048f45119c07637599e 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 74912c377159d3ea7291bd92ef01d83f9ceb6119..4c00b8a20275976cf28e793e0a6f58520b986287 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 1aa0fceeda796f7fe10d3edcb26911bafc32977a..442504b04f01b5fc0fff4670e4c0629f5c726bc7 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(?, ?, ?, ?)");