From 57f34c133b24b1e13804ab71559a763d0aa2702b Mon Sep 17 00:00:00 2001 From: Charlie Darques <charlie.darques.etu@univ-lille.fr> Date: Fri, 14 Mar 2025 01:06:44 +0100 Subject: [PATCH] =?UTF-8?q?=C3=80=20TESTER=20:=20d=C3=A9but=20d'impl=C3=A9?= =?UTF-8?q?mentation=20pour=20liker=20ou=20unliker=20un=20message?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WEB-INF/src/controleurs/Feed.java | 131 +++++++++++++--------- WEB-INF/src/controleurs/FollowThread.java | 3 - WEB-INF/src/controleurs/LikeMessage.java | 5 + WEB-INF/src/dao/UserDAO.java | 19 ++++ 4 files changed, 99 insertions(+), 59 deletions(-) create mode 100644 WEB-INF/src/controleurs/LikeMessage.java diff --git a/WEB-INF/src/controleurs/Feed.java b/WEB-INF/src/controleurs/Feed.java index cbc8c11..d100f4a 100644 --- a/WEB-INF/src/controleurs/Feed.java +++ b/WEB-INF/src/controleurs/Feed.java @@ -13,84 +13,103 @@ import jakarta.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.io.IOException; import java.sql.SQLException; +import java.util.ArrayList; import java.util.List; @WebServlet("/Welcome") public class Feed extends HttpServlet { + UserDAO userDao = new UserDAO(); + ThreadDAO threadDao = new ThreadDAO(); + User user; + public void service(HttpServletRequest req, HttpServletResponse res) throws IOException { if (req.getSession().getAttribute("user") != null) { - UserDAO userDao = new UserDAO(); - ThreadDAO threadDao = new ThreadDAO(); PrintWriter out = res.getWriter(); String login = (String) req.getSession().getAttribute("login"); - System.out.println(login); - User user = userDao.getUserByLogs(login, req.getSession().getAttribute("password").toString()); + user = userDao.getUserByLogs(login, req.getSession().getAttribute("password").toString()); - if (user != null) { - List<Message> messages = null; - try { - messages = userDao.getMostRecentMessages(user); - } catch (SQLException e) { - throw new RuntimeException(e); - } + List<Integer> liked_messages = getLikedMessages(req); + + List<Message> messages = null; + try { + messages = userDao.getMostRecentMessages(user); + } catch (SQLException e) { + throw new RuntimeException(e); + } + + out.println("<html><body><meta charset=\"utf-8\">"); + out.println("<link rel=\"stylesheet\" href=\"css/feed.css\">"); + out.println("<title>Welcome</title>"); - out.println("<html><body><meta charset=\"utf-8\">"); - out.println("<link rel=\"stylesheet\" href=\"css/feed.css\">"); - out.println("<title>Welcome</title>"); - - out.println("<h1>Welcome to CampusTalk, " + login + " !</h1>"); - - out.println(PageGeneration.generateNavMenu()); - - if (!messages.isEmpty()) { - for (Message message : messages) { - MyThread msgThread = null; - try { - msgThread = threadDao.getThreadById(message.getThreadId()); - } catch (SQLException e) { - throw new RuntimeException(e); - } - out.println("<div class=\"message\">"); - out.println("<h3 class=\"msgThread\">" + msgThread.getThreadName() + "</h3>"); - out.println("<p class=\"msgContent\">" + message.getContent() + "</p>"); - - out.println("<form action=\"http://localhost:8080/s4a021-web-backend/PostMessage\" method=\"post\">"); - out.println("<textarea name=\"message\" rows=\"2\" cols=\"30\" placeholder=\"Post a message in this thread\"></textarea>"); - out.println("<input name=\"threadid\" type=\"hidden\" value=\"" + msgThread.getId() +"\">"); - out.println("<button type=\"submit\">Post</button>"); - out.println("</form>"); - - // like/unlike : formulaire - // donc appel d'une servlet qui n'exécute que du code pour appeler la méthode de réaction au message - // et redirection sur cette page qui affiche pour chaque message s'il est liké ou pas (voir comment faire pour l'affichage) - out.println("<form><button class=\"react\" type=\"submit\" value=\"Like\">Like</button></form>"); - out.println("</div>"); + out.println("<h1>Welcome to CampusTalk, " + login + " !</h1>"); + + out.println(PageGeneration.generateNavMenu()); + + if (!messages.isEmpty()) { + for (Message message : messages) { + MyThread msgThread; + try { + msgThread = threadDao.getThreadById(message.getThreadId()); + } catch (SQLException e) { + throw new RuntimeException(e); } - } - else { - out.println("<p class=\"information\">You are not following any thread yet.</p>"); - } + out.println("<div class=\"message\">"); + out.println("<h3 class=\"msgThread\">" + msgThread.getThreadName() + "</h3>"); + out.println("<p class=\"msgContent\">" + message.getContent() + "</p>"); - out.println("<div class=\"discover\">"); - out.println("<a href=\"\">Discover new threads</a>"); - out.println("<a href=\"http://localhost:8080/s4a021-web-backend/NewThread\">Create a new thread</a>"); - out.println("</div>"); + out.println("<form action=\"http://localhost:8080/s4a021-web-backend/PostMessage\" method=\"post\">"); + out.println("<textarea name=\"message\" rows=\"2\" cols=\"30\" placeholder=\"Post a message in this thread\"></textarea>"); + out.println("<input name=\"threadid\" type=\"hidden\" value=\"" + msgThread.getId() + "\">"); + out.println("<button type=\"submit\">Post</button>"); + out.println("</form>"); - out.println("</body>"); - out.println("<footer>"); - out.println("Connected as " + login); - out.println("</footer>"); - out.println("</html>"); + out.println("<form action=\"http://localhost:8080/s4a021-web-backend/LikeMessage\" method=\"post\">"); + + if (liked_messages.contains(message.getMsgId())) { + out.println("<button class=\"liked\" type=\"submit\" value=\"Liked\">Liked</button></form>"); + } else { + out.println("<button class=\"unliked\" type\"submit\" value=\"Unliked\">Unliked</button></form>"); + } + out.println("</div>"); + } + } + else{ + out.println("<p class=\"information\">You are not following any thread yet.</p>"); } + out.println("<div class=\"discover\">"); + out.println("<a href=\"\">Discover new threads</a>"); + out.println("<a href=\"http://localhost:8080/s4a021-web-backend/NewThread\">Create a new thread</a>"); + out.println("</div>"); - } else { + out.println("</body>"); + out.println("<footer>"); + out.println("Connected as " + login); + out.println("</footer>"); + out.println("</html>"); + } + else { res.sendRedirect("http://localhost:8080/s4a021-web-backend/index.html"); } + } + public List<Integer> getLikedMessages(HttpServletRequest req) { + List<Integer> liked_messages = new ArrayList<>(); + if (req.getSession().getAttribute("liked_messages") != null) { + liked_messages = (List<Integer>) req.getSession().getAttribute("liked_messages"); + } + else { + try { + liked_messages = userDao.getLikedMessagesFromUser(user); + req.getSession().setAttribute("liked_messages", liked_messages); + } catch (SQLException e) { + e.getStackTrace(); + } + } + return liked_messages; } } diff --git a/WEB-INF/src/controleurs/FollowThread.java b/WEB-INF/src/controleurs/FollowThread.java index 4d69a3a..74912c3 100644 --- a/WEB-INF/src/controleurs/FollowThread.java +++ b/WEB-INF/src/controleurs/FollowThread.java @@ -8,7 +8,6 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; -import java.io.PrintWriter; import java.sql.SQLException; @WebServlet("/FollowThread") @@ -20,8 +19,6 @@ public class FollowThread { UserDAO userDao = new UserDAO(); ThreadDAO threadDao = new ThreadDAO(); - PrintWriter out = res.getWriter(); - String login = (String) req.getSession().getAttribute("login"); try { userDao.followThread(user, threadDao.getThreadById((Integer.parseInt(req.getParameter("threadid"))))); diff --git a/WEB-INF/src/controleurs/LikeMessage.java b/WEB-INF/src/controleurs/LikeMessage.java new file mode 100644 index 0000000..39f2c1e --- /dev/null +++ b/WEB-INF/src/controleurs/LikeMessage.java @@ -0,0 +1,5 @@ +package controleurs; + +public class LikeMessage { + // à remplir +} diff --git a/WEB-INF/src/dao/UserDAO.java b/WEB-INF/src/dao/UserDAO.java index 0e8ec68..5a31cad 100644 --- a/WEB-INF/src/dao/UserDAO.java +++ b/WEB-INF/src/dao/UserDAO.java @@ -295,4 +295,23 @@ public class UserDAO { return followDate; } + + public List<Integer> getLikedMessagesFromUser(User user) throws SQLException{ + List<Integer> messages = new ArrayList<>(); + PreparedStatement ps = this.con.prepareStatement(""" + SELECT msgID_reactions FROM reactions + WHERE userID_reactions = ? + """); + try { + ps.setInt(1, user.getId()); + ResultSet rs = ps.executeQuery(); + while(rs.next()){ + messages.add(rs.getInt(1)); + } + } + catch (SQLException sqle) { + sqle.getStackTrace(); + } + return messages; + } } \ No newline at end of file -- GitLab