From 4020d966615dda152291a8dc677a27966fa23b2c Mon Sep 17 00:00:00 2001
From: Charlie Darques <charlie.darques.etu@univ-lille.fr>
Date: Thu, 6 Mar 2025 17:35:56 +0100
Subject: [PATCH] =?UTF-8?q?IMPORTANT=20ajout=20d'une=20colonne=20dans=20la?=
 =?UTF-8?q?=20table=20msg=20et=20changement=20des=20donn=C3=A9es=20repr?=
 =?UTF-8?q?=C3=A9sentatives=20+=20ajout=20m=C3=A9thodes=20de=20r=C3=A9cup?=
 =?UTF-8?q?=C3=A9ration=20des=20messages=20des=20threads=20suivis=20=C3=A0?=
 =?UTF-8?q?=20partir=20du=20plus=20r=C3=A9cent?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 WEB-INF/classes/dto/Message.class | Bin 1211 -> 0 bytes
 WEB-INF/classes/dto/Thread.class  | Bin 803 -> 0 bytes
 WEB-INF/src/dao/UserDAO.java      |  40 ++++++++++++++++++++++++++++--
 WEB-INF/src/dto/Message.java      |   6 ++++-
 db/createTables.sql               |   1 +
 db/data.sql                       |   8 +++---
 6 files changed, 48 insertions(+), 7 deletions(-)
 delete mode 100644 WEB-INF/classes/dto/Message.class
 delete mode 100644 WEB-INF/classes/dto/Thread.class

diff --git a/WEB-INF/classes/dto/Message.class b/WEB-INF/classes/dto/Message.class
deleted file mode 100644
index d2e78212587772e41a107588ec40d0777260468b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1211
zcmX^0Z`VEs1_oOOZ7v2T24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00SP6iGJPId+^9tLg(9!3W4l#+aX-_+vb#Pn1~2G-o-bk7t<21ZYiGCm##
zevlfD;?%s9)FRImkf0zBgAiD-B%>%bF$E$h!owiSAjZhRo}8aolA2e-$ROl{a7S=S
zQD$DcH6w$BhNq_|ri5k~BLj<beo87M1HVsZUaDVdZc=JdNMce>D#)Px<iwn?#G*_P
zA1cUFl95@=$iVA^<a%pH29EU95?_c9m^Cy#85y|KQ%i!Oj)(9<psr?Q;7U&|afUfp
zL_-tPU5pGI#c%^zG(17><Ss@ru{gB^$;4tL6Gb&J4Fnm$6`WsMl$`383Gy5dH01R_
zfyJQ6z`?-8z`(%5zyyjM1_lNuPy~Q!AqE~WEy^Iqz`(%Cz{tSLAkM(ZAi==E(7?dN
zz{<eDAf>gPfl*6(D+9Zh%vJ_oE!nLM0$P$RTN#8mg7r#*)G)9yFfi~iurTm4a5C^Q
z@G<Z+2r~#UNHPdANHH)lm_STokY<o!00AkmOBlgA`5Ab??vnzg00w5T7|1;=42%r2
z402G{=rb@ffYh^UZDC+v1GktBEGQ1Pga^!Kg<8VMAdgiuFS=%FteO?DY8F7(ERR*Q
zB7+hZXA5sYbG9;8&B_caP|bD>OyH1V1BX5$v_W~3fkBIbl|dV9f*3><)Z+{cY|zkU
zWKhL!7B9M4dJL=#`Z&x2#SbX#)v%i-fNqu%11p0u4zob%4P=%&g9e5lwNX+O#E)hS
TtPJKj%mSqmkXf4GP}Kqey7!&j

diff --git a/WEB-INF/classes/dto/Thread.class b/WEB-INF/classes/dto/Thread.class
deleted file mode 100644
index cbc1ec699cf07cc7c890b3993cc552f54d2b57ab..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 803
zcmX^0Z`VEs1_oOOWiAFL24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00SP6iGJPId+^9tLg(9!3VPl#+b?kc^_##1uvbjuJ4#(}j_N(G#SQkB5Pu
zL4c8g3nJl{n48MTAmoFvBDka|GcVnmkwHwu6H{0-jFExGIX@+pk%8YQGcVPzG&d==
zC?qi{2W(7!a$-(cVo@fD4;5r7$;d2bWZ>~ZILn%mfhjYEk%1)-Y&&auYKdnG*e{-p
z47};7B@ov`+$N%-iRlbR2JT{*GLYX`G(15r<An=C^onX=Y6Yp|3eGPrN=|jl1i6|U
zVw)Z)2pAL@I2f217#Nrsm_VTkX7Mu!FfcH%GB7f*G6*s-G6*p+Fhqi)h=GBDUu!!9
zqn7km26io-tqi;y!5V}a7#M^YSQr=>xENR%xEVMZco_H?co{?(7#I{7m_gbYL>a^w
zK!Be?oPmdd5iBObAi%)Hz{nuUAO*EXpMeo9$Evl3fqf0!a5k`@FxWtdW>%<yj11BY
zGFUY8Za~v4j#aZPgB(<|9XJRW7}&s`L--4nHW?V?8CV$<z$S=+gNqGnJp%(9IM_h0
gmS<4FFiRUHj38zyGq5tK;4ljm^dPeo!LC;V0L#gEjsO4v

diff --git a/WEB-INF/src/dao/UserDAO.java b/WEB-INF/src/dao/UserDAO.java
index 31683b7..ddc68ae 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 a50cac3..b012203 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 08b3c46..fc1c896 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 ca6e0be..93e813b 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'),
-- 
GitLab