diff --git a/WEB-INF/classes/dto/Message.class b/WEB-INF/classes/dto/Message.class deleted file mode 100644 index d2e78212587772e41a107588ec40d0777260468b..0000000000000000000000000000000000000000 Binary files a/WEB-INF/classes/dto/Message.class and /dev/null differ diff --git a/WEB-INF/classes/dto/Thread.class b/WEB-INF/classes/dto/Thread.class deleted file mode 100644 index cbc1ec699cf07cc7c890b3993cc552f54d2b57ab..0000000000000000000000000000000000000000 Binary files a/WEB-INF/classes/dto/Thread.class and /dev/null differ diff --git a/WEB-INF/src/dao/UserDAO.java b/WEB-INF/src/dao/UserDAO.java index 31683b7e646bc3a74c6527366bed2a2ce4953b09..ddc68ae6df42130f12dd0e8bf70151a6e5f7fba1 100644 --- a/WEB-INF/src/dao/UserDAO.java +++ b/WEB-INF/src/dao/UserDAO.java @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.List; import dto.Message; +import dto.MyThread; import dto.User; import jakarta.servlet.http.*; @@ -182,15 +183,50 @@ public class UserDAO extends HttpServlet{ } // Récupérer les thread auxquels un utilisateur est abonné - public List<Thread> getThreadsByUser(User user) throws SQLException { - List<Thread> threads = new ArrayList<>(); + public List<MyThread> getThreadsByUser(User user) throws SQLException { + List<MyThread> threads = new ArrayList<>(); PreparedStatement ps = this.con.prepareStatement("SELECT threadID_follow FROM follow WHERE userID_follow = ?"); try { ps.setInt(1, user.getId()); ResultSet rs = ps.executeQuery(); while(rs.next()){ + int threadId = rs.getInt(1); + String threadname = rs.getString(2); + threads.add(new MyThread(threadId, threadname)); + } + } + catch (SQLException sqle) { + sqle.getStackTrace(); + } + return threads; + } + // Récupérer les messages de chaque thread à partir du plus récent + public List<Message> getMostRecentMessages(User user) throws SQLException { + List<Message> messages = new ArrayList<>(); + PreparedStatement ps = this.con.prepareStatement(""" + SELECT m.msgID, m.userID_msg, m.threadID, m.msg, m.posted_at FROM msg AS m + INNER JOIN follow AS f + ON m.userID_msg = f.userID_follow + WHERE f.threadID_follow = m.threadID + AND m.userID_msg = ? + ORDER BY m.posted_at DESC + """); + try { + ps.setInt(1, user.getId()); + ResultSet rs = ps.executeQuery(); + while(rs.next()){ + int msgID = rs.getInt(1); + int sender = rs.getInt(2); + int threadID = rs.getInt(3); + String content = rs.getString(4); + Date creationDate = rs.getDate(5); + messages.add(new Message(msgID, sender, threadID, content, creationDate)); } } + catch (SQLException sqle) { + sqle.getStackTrace(); + } + return messages; } } \ No newline at end of file diff --git a/WEB-INF/src/dto/Message.java b/WEB-INF/src/dto/Message.java index a50cac348a79b81305f9396f446abec906edd402..b01220356622ab8ee40f3703e86fd4e37ad6623f 100644 --- a/WEB-INF/src/dto/Message.java +++ b/WEB-INF/src/dto/Message.java @@ -1,19 +1,23 @@ package dto; +import java.util.Date; + public class Message { private int msgId; private int senderId; private int threadId; private String content; + private Date creationDate; // Constructor // - public Message(int msgId, int senderId, int threadId, String content) { + public Message(int msgId, int senderId, int threadId, String content, Date creationDate) { this.msgId = msgId; this.senderId = senderId; this.threadId = threadId; this.content = content; + this.creationDate = creationDate; } diff --git a/db/createTables.sql b/db/createTables.sql index 08b3c4641970e1300658d675cf640ac2aedbae42..fc1c896478203b3c608cd65d722c40216e68ba91 100644 --- a/db/createTables.sql +++ b/db/createTables.sql @@ -14,6 +14,7 @@ CREATE TABLE msg ( userID_msg int, threadID int, msg text, + posted_at DATE, CONSTRAINT fk_message FOREIGN KEY (userID_msg) REFERENCES userAccount(userID), CONSTRAINT pk_message PRIMARY KEY (msgID) ); diff --git a/db/data.sql b/db/data.sql index ca6e0be9076a988d7bccbd2f0e226bcb84e11035..93e813b98633f91e166358d8fbd4a4158e36b66f 100644 --- a/db/data.sql +++ b/db/data.sql @@ -7,7 +7,7 @@ INSERT INTO userAccount VALUES (1, 'toto', 'totopwd123'), INSERT INTO thread VALUES (1, 2, 'Gaming'), (2, 3, 'Animaux'), (3, 3, 'Objet perdu'), - (4, 1, 'Discution'); + (4, 1, 'Discussion'); INSERT INTO follow VALUES (2,1, TO_DATE('11/02/2025', 'DD/MM/YYYY')), @@ -16,9 +16,9 @@ INSERT INTO follow VALUES (2,1, TO_DATE('11/02/2025', 'DD/MM/YYYY')), (1,4, TO_DATE('20/09/2025', 'DD/MM/YYYY')); -INSERT INTO msg VALUES (1, 3 , 1, 'Bonjour !'), - (2, 4, 1, 'Hello !'), - (3, 1, 3, 'Mon objet était ici.'); +INSERT INTO msg VALUES (1, 3 , 1, 'Bonjour !', TO_DATE('11/02/2025', 'DD/MM/YYYY'), + (2, 4, 1, 'Hello !', TO_DATE('18/02/2025', 'DD/MM/YYYY'), + (3, 1, 3, 'Mon objet était ici.', TO_DATE('02/02/2025', 'DD/MM/YYYY'); INSERT INTO reactions VALUES (2, 1, 'TRUE'),