diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000000000000000000000000000000000000..2c88a5598a37d7afc8a58e30f921c8a101c708d6
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,56 @@
+{
+  "java.project.sourcePaths": [
+    "WEB-INF/src"
+  ],
+  "java.project.referencedLibraries": [
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/websocket-client-api.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/websocket-api.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/tomcat-websocket.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/tomcat-util-scan.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/tomcat-util.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/tomcat-jni.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/tomcat-jdbc.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/tomcat-i18n-zh-CN.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/tomcat-i18n-ru.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/tomcat-i18n-pt-BR.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/tomcat-i18n-ko.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/tomcat-i18n-ja.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/tomcat-i18n-fr.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/tomcat-i18n-es.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/tomcat-i18n-de.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/tomcat-i18n-cs.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/tomcat-dbcp.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/tomcat-coyote-ffm.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/tomcat-coyote.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/tomcat-api.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/stax2-api-4.2.2.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/servlet-api.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/postgresql-42.7.5.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/postgresql-42.2.16.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/jsp-api.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/jjwt-jackson-0.12.5.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/jjwt-impl-0.12.5.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/jjwt-api-0.12.5.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/jaspic-api.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/jasper-el.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/jasper.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/jakartaee-migration-1.0.9-shaded.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/jakartaee-migration-1.0.8-shaded.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/jackson-datatype-jsr310-2.13.0.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/jackson-dataformat-xml-2.15.3.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/jackson-databind-2.15.3.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/jackson-core-2.15.3.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/jackson-annotations-2.15.3.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/el-api.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/ecj-4.27.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/commons-text-1.13.0.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/commons-lang3-3.17.0.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/catalina-tribes.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/catalina-storeconfig.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/catalina-ssi.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/catalina-ha.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/catalina-ant.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/catalina.jar",
+    "/home/infoetu/othemane.khachnane.etu/tomcat/lib/annotations-api.jar"
+  ]
+}
diff --git a/sae/META-INF/context.xml b/META-INF/context.xml
similarity index 100%
rename from sae/META-INF/context.xml
rename to META-INF/context.xml
diff --git a/WEB-INF/classes/controleur/Accueil.class b/WEB-INF/classes/controleur/Accueil.class
new file mode 100644
index 0000000000000000000000000000000000000000..1a28c778be963150fd134e64f332347b3b53d4ab
Binary files /dev/null and b/WEB-INF/classes/controleur/Accueil.class differ
diff --git a/WEB-INF/classes/controleur/CreerFil.class b/WEB-INF/classes/controleur/CreerFil.class
new file mode 100644
index 0000000000000000000000000000000000000000..68182c701dd8a0f5026c6dd3e090b40856ded113
Binary files /dev/null and b/WEB-INF/classes/controleur/CreerFil.class differ
diff --git a/WEB-INF/classes/controleur/EnvoyerMessage.class b/WEB-INF/classes/controleur/EnvoyerMessage.class
new file mode 100644
index 0000000000000000000000000000000000000000..a85ec4e38e5a09c52765c899b4c08ee18966cc1d
Binary files /dev/null and b/WEB-INF/classes/controleur/EnvoyerMessage.class differ
diff --git a/WEB-INF/classes/controleur/Fil.class b/WEB-INF/classes/controleur/Fil.class
new file mode 100644
index 0000000000000000000000000000000000000000..3ed1a7e3d82fe9b323a3251fdcfa8663664d9470
Binary files /dev/null and b/WEB-INF/classes/controleur/Fil.class differ
diff --git a/WEB-INF/classes/controleur/GetFils.class b/WEB-INF/classes/controleur/GetFils.class
new file mode 100644
index 0000000000000000000000000000000000000000..bd0897871fc8577c174b302be6485dcd1d0a94b2
Binary files /dev/null and b/WEB-INF/classes/controleur/GetFils.class differ
diff --git a/WEB-INF/classes/controleur/Like.class b/WEB-INF/classes/controleur/Like.class
new file mode 100644
index 0000000000000000000000000000000000000000..7a4d000115a1f13997a308fa51e77f975a22ee65
Binary files /dev/null and b/WEB-INF/classes/controleur/Like.class differ
diff --git a/WEB-INF/classes/controleur/ListerFil.class b/WEB-INF/classes/controleur/ListerFil.class
new file mode 100644
index 0000000000000000000000000000000000000000..2b87ced72d52b7cd0b0429fc1e91fa962be23a88
Binary files /dev/null and b/WEB-INF/classes/controleur/ListerFil.class differ
diff --git a/WEB-INF/classes/controleur/Login.class b/WEB-INF/classes/controleur/Login.class
new file mode 100644
index 0000000000000000000000000000000000000000..d41d887165f8658b7f4d0bb7ec25ce9a839d7bfe
Binary files /dev/null and b/WEB-INF/classes/controleur/Login.class differ
diff --git a/WEB-INF/classes/controleur/Logout.class b/WEB-INF/classes/controleur/Logout.class
new file mode 100644
index 0000000000000000000000000000000000000000..47db334fd4f25652266583b20ac7307fa5ad19d7
Binary files /dev/null and b/WEB-INF/classes/controleur/Logout.class differ
diff --git a/WEB-INF/classes/controleur/Register.class b/WEB-INF/classes/controleur/Register.class
new file mode 100644
index 0000000000000000000000000000000000000000..3ad8ee7a3668bb5e3ee876f44783e5867731b463
Binary files /dev/null and b/WEB-INF/classes/controleur/Register.class differ
diff --git a/WEB-INF/classes/controleur/SuivreFil.class b/WEB-INF/classes/controleur/SuivreFil.class
new file mode 100644
index 0000000000000000000000000000000000000000..a300bccc79e70957f3d3a2d461ecbe356c26c148
Binary files /dev/null and b/WEB-INF/classes/controleur/SuivreFil.class differ
diff --git a/WEB-INF/classes/modele/Abonnement.class b/WEB-INF/classes/modele/Abonnement.class
new file mode 100644
index 0000000000000000000000000000000000000000..ee41e5d8f300de99d400c65350de040019988fdf
Binary files /dev/null and b/WEB-INF/classes/modele/Abonnement.class differ
diff --git a/WEB-INF/classes/modele/AbonnementDao.class b/WEB-INF/classes/modele/AbonnementDao.class
new file mode 100644
index 0000000000000000000000000000000000000000..81902b953d1071f9235d21aa8cc166c1e97b8116
Binary files /dev/null and b/WEB-INF/classes/modele/AbonnementDao.class differ
diff --git a/WEB-INF/classes/modele/DS.class b/WEB-INF/classes/modele/DS.class
new file mode 100644
index 0000000000000000000000000000000000000000..0c876cb2214110b5d54f530a86c7693661d5ef41
Binary files /dev/null and b/WEB-INF/classes/modele/DS.class differ
diff --git a/WEB-INF/classes/modele/FilDeDiscussion.class b/WEB-INF/classes/modele/FilDeDiscussion.class
new file mode 100644
index 0000000000000000000000000000000000000000..af362b08855ab40f70ebaea35cdc9fc11329cb1a
Binary files /dev/null and b/WEB-INF/classes/modele/FilDeDiscussion.class differ
diff --git a/WEB-INF/classes/modele/FilDeDiscussionDAO.class b/WEB-INF/classes/modele/FilDeDiscussionDAO.class
new file mode 100644
index 0000000000000000000000000000000000000000..e9ac7a035fe79dcdda1a830dc60a468eaae94523
Binary files /dev/null and b/WEB-INF/classes/modele/FilDeDiscussionDAO.class differ
diff --git a/WEB-INF/classes/modele/Message.class b/WEB-INF/classes/modele/Message.class
new file mode 100644
index 0000000000000000000000000000000000000000..cddf74058b4abd623ed0f2ef7127bfe249fc9f86
Binary files /dev/null and b/WEB-INF/classes/modele/Message.class differ
diff --git a/WEB-INF/classes/modele/MessageDao.class b/WEB-INF/classes/modele/MessageDao.class
new file mode 100644
index 0000000000000000000000000000000000000000..e6d70a20e4d89db61f707e4bd4d9e9ed44eb3272
Binary files /dev/null and b/WEB-INF/classes/modele/MessageDao.class differ
diff --git a/WEB-INF/classes/modele/Utilisateur.class b/WEB-INF/classes/modele/Utilisateur.class
new file mode 100644
index 0000000000000000000000000000000000000000..0f9e1d29260afe61797c09c56070ffccb66a82ed
Binary files /dev/null and b/WEB-INF/classes/modele/Utilisateur.class differ
diff --git a/WEB-INF/classes/modele/UtilisateurDao.class b/WEB-INF/classes/modele/UtilisateurDao.class
new file mode 100644
index 0000000000000000000000000000000000000000..ec400bcf77f08c69a12bdf1fd4bdb55c1d6e6361
Binary files /dev/null and b/WEB-INF/classes/modele/UtilisateurDao.class differ
diff --git a/WEB-INF/src/controleur/Accueil.java b/WEB-INF/src/controleur/Accueil.java
new file mode 100644
index 0000000000000000000000000000000000000000..1524c2f3bcfe5c353fe7e94f3feff9e6bfe17497
--- /dev/null
+++ b/WEB-INF/src/controleur/Accueil.java
@@ -0,0 +1,25 @@
+package controleur;
+
+import java.io.IOException;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpSession;
+import org.apache.commons.text.StringEscapeUtils;
+
+@WebServlet("/accueil")
+public class Accueil extends HttpServlet {
+
+    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+        if (request.getSession(false) == null || request.getSession().getAttribute("email") == null) {
+            response.sendRedirect(request.getContextPath() + "/login");
+            return;
+        }
+        HttpSession session = request.getSession();
+        String email = StringEscapeUtils.escapeHtml4((String) session.getAttribute("email"));
+        request.setAttribute("email", email);
+        request.getRequestDispatcher("/WEB-INF/vue/accueil.jsp").forward(request, response);
+    }
+}
diff --git a/sae/WEB-INF/src/controleur/CreerFil.java b/WEB-INF/src/controleur/CreerFil.java
similarity index 100%
rename from sae/WEB-INF/src/controleur/CreerFil.java
rename to WEB-INF/src/controleur/CreerFil.java
diff --git a/WEB-INF/src/controleur/EnvoyerMessage.java b/WEB-INF/src/controleur/EnvoyerMessage.java
new file mode 100644
index 0000000000000000000000000000000000000000..b9c7916827a0e0b5564b8c594d31960d493447db
--- /dev/null
+++ b/WEB-INF/src/controleur/EnvoyerMessage.java
@@ -0,0 +1,72 @@
+package controleur;
+
+import jakarta.servlet.annotation.MultipartConfig;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.Part;
+import modele.Message;
+import modele.MessageDao;
+import jakarta.servlet.ServletException;
+import java.io.File;
+import java.io.IOException;
+import java.time.LocalDateTime;
+
+@WebServlet("/envoyerMessage")
+@MultipartConfig(
+    maxFileSize = 1024 * 1024 * 5,
+    maxRequestSize = 1024 * 1024 * 10,
+    fileSizeThreshold = 0 // comme ça tous les fichiers qui sont normalement des images sont enregistrés sur le serveur
+)
+public class EnvoyerMessage extends HttpServlet {
+    private static final String UPLOAD_DIR = "uploads";
+
+    public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
+        if (req.getSession(false) == null || req.getSession().getAttribute("email") == null) {
+            res.sendRedirect(req.getContextPath() + "/login");
+            return;
+        }
+        req.getRequestDispatcher("/WEB-INF/vue/listeFil.jsp").forward(req, res);
+    }
+
+    public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
+        if (req.getSession(false) == null || req.getSession().getAttribute("email") == null) {
+            res.sendRedirect(req.getContextPath() + "/login");
+            return;
+        }
+        String email = (String) req.getSession().getAttribute("email");
+        String message = req.getParameter("contenu");
+        int filId = (int) req.getSession().getAttribute("filId");
+        if (message == null || message.isEmpty()) {
+            return;
+        }
+
+        Part filePart = req.getPart("file");
+        String fileName = null;
+        if (filePart != null && filePart.getSize() > 0) {
+            fileName = getFileName(filePart);
+            String uploadPath = getServletContext().getRealPath("") + File.separator + UPLOAD_DIR;
+            File uploadDir = new File(uploadPath);
+            if (!uploadDir.exists()) {
+                uploadDir.mkdir();
+            }
+            filePart.write(uploadPath + File.separator + fileName);
+        }
+
+        Message m = new Message(-1, message, LocalDateTime.now(), filId, email, fileName);
+        MessageDao messageDao = new MessageDao();
+        messageDao.create(m);
+        res.sendRedirect(req.getContextPath() + "/fil?id=" + filId);
+    }
+
+    private String getFileName(Part part) {
+        String contentDisposition = part.getHeader("content-disposition");
+        for (String cd : contentDisposition.split(";")) {
+            if (cd.trim().startsWith("filename")) {
+                return cd.substring(cd.indexOf('=') + 1).trim().replace("\"", "");
+            }
+        }
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/sae/WEB-INF/src/controleur/Fil.java b/WEB-INF/src/controleur/Fil.java
similarity index 100%
rename from sae/WEB-INF/src/controleur/Fil.java
rename to WEB-INF/src/controleur/Fil.java
diff --git a/WEB-INF/src/controleur/GetFils.java b/WEB-INF/src/controleur/GetFils.java
new file mode 100644
index 0000000000000000000000000000000000000000..f9fe82c5bb0991cf3814fc1b24b884d6df7668fc
--- /dev/null
+++ b/WEB-INF/src/controleur/GetFils.java
@@ -0,0 +1,68 @@
+package controleur;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+
+import jakarta.servlet.ServletException;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import modele.Abonnement;
+import modele.AbonnementDao;
+import modele.FilDeDiscussion;
+import modele.FilDeDiscussionDAO;
+import modele.Message;
+import modele.MessageDao;
+
+//http GET http://localhost:8080/sae/getFils Cookie:"JSESSIONID=ton_session_id" --> F12>Storage>JSESSIONID
+
+@WebServlet("/getFils")
+public class GetFils extends HttpServlet {
+    @Override
+    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
+        if (req.getSession(false) == null || req.getSession().getAttribute("email") == null) {
+            res.sendRedirect(req.getContextPath() + "/login");
+            return;
+        }
+
+        String email = (String) req.getSession().getAttribute("email");
+        AbonnementDao abonnementDao = new AbonnementDao();
+        FilDeDiscussionDAO filDao = new FilDeDiscussionDAO();
+        MessageDao messageDao = new MessageDao();
+
+        try {
+            List<Abonnement> abonnements = abonnementDao.findAbonnements(email);
+            List<FilDeDiscussion> fils = new ArrayList<>();
+            Map<Integer, List<Message>> messagesMap = new HashMap<>();
+
+            for (Abonnement abonnement : abonnements) {
+                FilDeDiscussion fil = filDao.findById(abonnement.getIdFil());
+                fils.add(fil);
+                List<Message> messages = messageDao.findByFil(fil.getId());
+                messagesMap.put(fil.getId(), messages);
+            }
+
+            ObjectMapper objectMapper = new ObjectMapper();
+            objectMapper.registerModule(new JavaTimeModule());
+            objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+
+            Map<String, Object> jsonResponse = new HashMap<>();
+            jsonResponse.put("fils", fils);
+            jsonResponse.put("messages", messagesMap);
+
+            res.setContentType("application/json");
+            res.getWriter().write(objectMapper.writeValueAsString(jsonResponse));
+        } catch (Exception e) {
+            res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+            res.getWriter().write("{\"error\":\"Une erreur est survenue lors de la récupération des données.\"}");
+        }
+    }
+}
\ No newline at end of file
diff --git a/WEB-INF/src/controleur/Like.java b/WEB-INF/src/controleur/Like.java
new file mode 100644
index 0000000000000000000000000000000000000000..d268a999b87bb384070d5352756dfd269a472247
--- /dev/null
+++ b/WEB-INF/src/controleur/Like.java
@@ -0,0 +1,34 @@
+package controleur;
+
+
+import java.io.IOException;
+
+import jakarta.servlet.ServletException;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import modele.MessageDao;
+
+@WebServlet("/Like")
+public class Like extends HttpServlet {
+
+    @Override
+    protected void service(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
+        String userEmail = (String) req.getSession().getAttribute("email");
+        if (userEmail == null) {
+            res.sendRedirect(req.getContextPath() + "/login");
+            return;
+        }
+
+        int messageId = Integer.parseInt(req.getParameter("messageId"));
+        MessageDao messageDao = new MessageDao();
+
+        if (messageDao.updateLike(messageId)) {
+            res.sendRedirect(req.getHeader("Referer"));
+        } else {
+            res.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Erreur lors de la mise à jour du like.");
+        }
+    }
+    
+}
diff --git a/sae/WEB-INF/src/controleur/ListerFil.java b/WEB-INF/src/controleur/ListerFil.java
similarity index 100%
rename from sae/WEB-INF/src/controleur/ListerFil.java
rename to WEB-INF/src/controleur/ListerFil.java
diff --git a/WEB-INF/src/controleur/Login.java b/WEB-INF/src/controleur/Login.java
new file mode 100644
index 0000000000000000000000000000000000000000..655e8dbb40cb8152949600a0c312e3086e607715
--- /dev/null
+++ b/WEB-INF/src/controleur/Login.java
@@ -0,0 +1,31 @@
+package controleur;
+
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import modele.UtilisateurDao;
+import jakarta.servlet.ServletException;
+import java.io.IOException;
+import org.apache.commons.text.StringEscapeUtils;
+
+@WebServlet("/login")
+public class Login extends HttpServlet {
+    public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
+        req.getRequestDispatcher("/WEB-INF/vue/login.jsp").forward(req, res);
+    }
+
+    public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
+        String email = StringEscapeUtils.escapeHtml4(req.getParameter("email"));
+        String motdepasse = StringEscapeUtils.escapeHtml4(req.getParameter("motdepasse"));
+        UtilisateurDao udao = new UtilisateurDao();
+        if (udao.check(email, motdepasse)) {
+            System.out.println("Connexion réussie");
+            req.getSession().setAttribute("email", email);
+            res.sendRedirect(req.getContextPath() + "/accueil");
+        } else {
+            System.out.println("Connexion échouée");
+            res.sendRedirect(req.getContextPath() + "/login");
+        }
+    }
+}
\ No newline at end of file
diff --git a/sae/WEB-INF/src/controleur/Logout.java b/WEB-INF/src/controleur/Logout.java
similarity index 100%
rename from sae/WEB-INF/src/controleur/Logout.java
rename to WEB-INF/src/controleur/Logout.java
diff --git a/sae/WEB-INF/src/controleur/Register.java b/WEB-INF/src/controleur/Register.java
similarity index 100%
rename from sae/WEB-INF/src/controleur/Register.java
rename to WEB-INF/src/controleur/Register.java
diff --git a/sae/WEB-INF/src/controleur/SuivreFil.java b/WEB-INF/src/controleur/SuivreFil.java
similarity index 100%
rename from sae/WEB-INF/src/controleur/SuivreFil.java
rename to WEB-INF/src/controleur/SuivreFil.java
diff --git a/sae/WEB-INF/src/modele/Abonnement.java b/WEB-INF/src/modele/Abonnement.java
similarity index 100%
rename from sae/WEB-INF/src/modele/Abonnement.java
rename to WEB-INF/src/modele/Abonnement.java
diff --git a/sae/WEB-INF/src/modele/AbonnementDao.java b/WEB-INF/src/modele/AbonnementDao.java
similarity index 100%
rename from sae/WEB-INF/src/modele/AbonnementDao.java
rename to WEB-INF/src/modele/AbonnementDao.java
diff --git a/WEB-INF/src/modele/DS.java b/WEB-INF/src/modele/DS.java
new file mode 100644
index 0000000000000000000000000000000000000000..f34509cee1b54bec3d01ee14d49f973f613189ac
--- /dev/null
+++ b/WEB-INF/src/modele/DS.java
@@ -0,0 +1,29 @@
+package modele;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+
+public class DS {
+    public static DS instance = new DS();
+
+    private DS() {
+        try {
+            Class.forName("org.postgresql.Driver");
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
+    }
+
+    public Connection getConnection() {
+        String url = "jdbc:postgresql://psqlserv/but2";
+        String login = "othemanekhachnaneetu";
+        String pwd = "moi";
+        Connection con = null;
+        try {
+            con = DriverManager.getConnection(url, login, pwd);
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
+        return con;
+    }
+}
\ No newline at end of file
diff --git a/sae/WEB-INF/src/modele/FilDeDiscussion.java b/WEB-INF/src/modele/FilDeDiscussion.java
similarity index 100%
rename from sae/WEB-INF/src/modele/FilDeDiscussion.java
rename to WEB-INF/src/modele/FilDeDiscussion.java
diff --git a/sae/WEB-INF/src/modele/FilDeDiscussionDAO.java b/WEB-INF/src/modele/FilDeDiscussionDAO.java
similarity index 100%
rename from sae/WEB-INF/src/modele/FilDeDiscussionDAO.java
rename to WEB-INF/src/modele/FilDeDiscussionDAO.java
diff --git a/WEB-INF/src/modele/Message.java b/WEB-INF/src/modele/Message.java
new file mode 100644
index 0000000000000000000000000000000000000000..4b743b48f9404f27207a14a5b1782e5bd2d6e4a3
--- /dev/null
+++ b/WEB-INF/src/modele/Message.java
@@ -0,0 +1,99 @@
+package modele;
+
+import java.time.LocalDateTime;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+public class Message {
+    private int id;
+    private String contenu;
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss")
+    private LocalDateTime datePublication;
+    private int filId;
+    private String auteurEmail;
+    private String fileName;
+    private boolean likeCount;
+
+    public Message() {
+    }
+
+    public Message(int id, String contenu, LocalDateTime datePublication, int filId, String auteurEmail,
+            String fileName) {
+        this.id = id;
+        this.contenu = contenu;
+        this.datePublication = datePublication;
+        this.filId = filId;
+        this.auteurEmail = auteurEmail;
+        this.fileName = fileName;
+        this.likeCount = false;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getContenu() {
+        return contenu;
+    }
+
+    public void setContenu(String contenu) {
+        this.contenu = contenu;
+    }
+
+    public LocalDateTime getDatePublication() {
+        return datePublication;
+    }
+
+    public void setDatePublication(LocalDateTime datePublication) {
+        this.datePublication = datePublication;
+    }
+
+    public int getfilId() {
+        return filId;
+    }
+
+    public void setFilId(int filId) {
+        this.filId = filId;
+    }
+
+    public String getAuteurEmail() {
+        return auteurEmail;
+    }
+
+    public void setAuteurEmail(String auteurEmail) {
+        this.auteurEmail = auteurEmail;
+    }
+
+    public String getFileName() {
+        return fileName;
+    }
+
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+
+    public boolean getLikeCount() {
+        return likeCount;
+    }
+
+    public void setLikeCount(boolean likeCount) {
+        this.likeCount = likeCount;
+    }
+
+    public String afficherLike() {
+        if (likeCount == true) {
+            return "Vous avez aimé ce message";
+        }
+        return "Vous n'avez pas aimé ce message";
+    }
+
+    @Override
+    public String toString() {
+        return "Message{" + "id=" + id + ", contenu=" + contenu + ", datePublication=" + datePublication + ", filId="
+                + filId + ", auteurEmail=" + auteurEmail + "like" + afficherLike() +'}';
+    }
+}
diff --git a/WEB-INF/src/modele/MessageDao.java b/WEB-INF/src/modele/MessageDao.java
new file mode 100644
index 0000000000000000000000000000000000000000..729a4df7f78feec2b99211756bda26f16790e17c
--- /dev/null
+++ b/WEB-INF/src/modele/MessageDao.java
@@ -0,0 +1,143 @@
+package modele;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.List;
+import java.util.ArrayList;
+
+public class MessageDao {
+    
+    public Message findMessage(int id) {
+        Message message = new Message();
+        try(Connection con = DS.instance.getConnection()) {
+            PreparedStatement ps = con.prepareStatement("SELECT * FROM message WHERE id = ?");
+            ps.setInt(1, id);
+            ResultSet rs = ps.executeQuery();
+            if (rs.next()) {
+                message.setId(rs.getInt("id"));
+                message.setContenu(rs.getString("contenu"));
+                message.setDatePublication(rs.getTimestamp("datePublication").toLocalDateTime());
+                message.setFilId(rs.getInt("filId"));
+                message.setAuteurEmail(rs.getString("auteurEmail"));
+                message.setFileName(rs.getString("fileName"));
+                message.setLikeCount(rs.getBoolean("likeCount"));
+            } else {
+                System.out.println("Message inexistant");
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
+        return message;
+    }
+
+    public List<Message> findAll() {
+        List<Message> messages = new ArrayList<>();
+        try(Connection con = DS.instance.getConnection()) {
+            PreparedStatement ps = con.prepareStatement("SELECT * FROM message");
+            ResultSet rs = ps.executeQuery();
+            while (rs.next()) {
+                Message message = new Message();
+                message.setId(rs.getInt("id"));
+                message.setContenu(rs.getString("contenu"));
+                message.setDatePublication(rs.getTimestamp("datePublication").toLocalDateTime());
+                message.setFilId(rs.getInt("filId"));
+                message.setAuteurEmail(rs.getString("auteurEmail"));
+                message.setFileName(rs.getString("fileName"));
+                message.setLikeCount(rs.getBoolean("likeCount"));
+                messages.add(message);
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
+        return messages;
+    }
+
+    public List<Message> findByFil(int idFil) {
+        List<Message> messages = new ArrayList<>();
+        try(Connection con = DS.instance.getConnection()) {
+            PreparedStatement ps = con.prepareStatement("SELECT * FROM message WHERE filId = ?");
+            ps.setInt(1, idFil);
+            ResultSet rs = ps.executeQuery();
+            while (rs.next()) {
+                Message message = new Message();
+                message.setId(rs.getInt("id"));
+                message.setContenu(rs.getString("contenu"));
+                message.setDatePublication(rs.getTimestamp("datePublication").toLocalDateTime());
+                message.setFilId(rs.getInt("filId"));
+                message.setAuteurEmail(rs.getString("auteurEmail"));
+                message.setFileName(rs.getString("fileName"));
+                message.setLikeCount(rs.getBoolean("likeCount"));
+                messages.add(message);
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
+        return messages;
+    }
+
+    public String findUserName(String email) {
+        String userName = "";
+        try(Connection con = DS.instance.getConnection()) {
+            PreparedStatement ps = con.prepareStatement("SELECT nom FROM utilisateur WHERE email = ?");
+            ps.setString(1, email);
+            ResultSet rs = ps.executeQuery();
+            if (rs.next()) {
+                userName = rs.getString("nom");
+            } else {
+                System.out.println("Utilisateur inexistant");
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
+        return userName;
+    }
+
+    public void delete(int id) {
+        try(Connection con = DS.instance.getConnection()) {
+            PreparedStatement ps = con.prepareStatement("DELETE FROM message WHERE id = ?");
+            ps.setInt(1, id);
+            ps.executeUpdate();
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
+    }
+
+    public void create(Message message) {
+        try(Connection con = DS.instance.getConnection()) {
+            PreparedStatement ps = con.prepareStatement("INSERT INTO message (contenu, filid, auteuremail, fileName) VALUES (?, ?, ?, ?)");
+            ps.setString(1, message.getContenu());
+            ps.setInt(2, message.getfilId());
+            ps.setString(3, message.getAuteurEmail());
+            ps.setString(4, message.getFileName());
+            ps.executeUpdate();
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
+    }
+    
+    //cette methode permet de mettre a jour le nombre de like d'un message en fonction de l'action de l'utilisateur (like ou unlike)
+    public boolean updateLike(int id) {
+        try(Connection con = DS.instance.getConnection()) {
+            PreparedStatement ps = con.prepareStatement("SELECT likeCount FROM message WHERE id = ?");
+            ps.setInt(1, id);
+            ResultSet rs = ps.executeQuery();
+            if (rs.next()) {
+                boolean currentLikeStatus = rs.getBoolean("likeCount");
+                boolean newLikeStatus = !currentLikeStatus;
+                ps = con.prepareStatement("UPDATE message SET likeCount = ? WHERE id = ?");
+                ps.setBoolean(1, newLikeStatus);
+                ps.setInt(2, id);
+                ps.executeUpdate();
+                return true;
+            } else {
+                System.out.println("Message inexistant");
+                return false;
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+            return false;
+        }
+    }
+
+}
diff --git a/sae/WEB-INF/src/modele/Utilisateur.java b/WEB-INF/src/modele/Utilisateur.java
similarity index 100%
rename from sae/WEB-INF/src/modele/Utilisateur.java
rename to WEB-INF/src/modele/Utilisateur.java
diff --git a/sae/WEB-INF/src/modele/UtilisateurDao.java b/WEB-INF/src/modele/UtilisateurDao.java
similarity index 100%
rename from sae/WEB-INF/src/modele/UtilisateurDao.java
rename to WEB-INF/src/modele/UtilisateurDao.java
diff --git a/WEB-INF/vue/accueil.jsp b/WEB-INF/vue/accueil.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..a8739e7b1ed332496c217eaa129b97b62dc0ad1b
--- /dev/null
+++ b/WEB-INF/vue/accueil.jsp
@@ -0,0 +1,70 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ page import="modele.UtilisateurDao" %>
+<%@ page import="modele.AbonnementDao" %>
+<%@ page import="modele.FilDeDiscussion" %>
+<%@ page import="modele.FilDeDiscussionDAO" %>
+<%@ page import="modele.Abonnement" %>
+<%@ page import="java.util.List" %>
+
+<!DOCTYPE html>
+<html lang="fr">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>CampusTalk - Accueil</title>
+    <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
+    <link rel="shortcut icon" href="https://www.shareicon.net/data/2016/07/10/119195_chat_512x512.png"> 
+</head>
+<body class="bg-gray-100">
+    <nav class="bg-white shadow-md">
+        <div class="max-w-7xl mx-auto px-2 sm:px-6 lg:px-8">
+            <div class="relative flex items-center justify-between h-16">
+                <div class="absolute inset-y-0 left-0 flex items-center sm:hidden">
+                    <button type="button" class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-white hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white" aria-controls="mobile-menu" aria-expanded="false">
+                        <span class="sr-only">Open main menu</span>
+                        <svg class="block h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
+                            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16m-7 6h7" />
+                        </svg>
+                        <svg class="hidden h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
+                            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
+                        </svg>
+                    </button>
+                </div>
+                <div class="flex-1 flex items-center justify-center sm:items-stretch sm:justify-start">
+                    <div class="flex-shrink-0">
+                        <a class="text-xl font-bold text-gray-800" href="#">CampusTalk</a>
+                    </div>
+                    <div class="hidden sm:block sm:ml-auto">
+                        <div class="flex space-x-4">
+                            <a href="<%= request.getContextPath() %>/logout" class="text-red-600 hover:bg-red-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium">Se déconnecter</a>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </nav>
+    <% UtilisateurDao udao=new UtilisateurDao(); String email=(String) session.getAttribute("email"); String
+        username=udao.findUtilisateur(email).getNom(); AbonnementDao adao=new AbonnementDao(); List<Abonnement> abonnements
+        = adao.findAbonnements(email);
+        FilDeDiscussionDAO fdao = new FilDeDiscussionDAO();
+        %>
+        <div class="max-w-2xl mx-auto mt-12 p-6 bg-white rounded-lg shadow-md">
+            <h2 class="text-2xl font-bold mb-4">Bienvenue sur CampusTalk</h2>
+            <p class="mb-4">Bonjour, <%= username %> !</p>
+            <p class="mb-4">Vous êtes connecté en tant que <%= email %></p>
+            <a href="<%= request.getContextPath() %>/listerFil" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">Voir les autres fils de discussion</a>
+        </div>
+        <div class="max-w-2xl mx-auto mt-8 p-6 bg-white rounded-lg shadow-md">
+            <h3 class="text-xl font-bold mb-4">Vos abonnements</h3>
+            <ul class="list-disc pl-5">
+                <% for (Abonnement abo : abonnements) { %>
+                    <li class="mb-2">
+                        <a href="<%= request.getContextPath() %>/fil?id=<%= abo.getIdFil() %>" class="text-blue-500 hover:underline">
+                            <%= fdao.findById(abo.getIdFil()).getNom() %>
+                        </a>
+                    </li>
+                <% } %>
+            </ul>
+        </div>
+</body>
+</html>
diff --git a/WEB-INF/vue/creerFil.jsp b/WEB-INF/vue/creerFil.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..6b141bef85a02b15e6c4fb052674ebb4042c97e8
--- /dev/null
+++ b/WEB-INF/vue/creerFil.jsp
@@ -0,0 +1,69 @@
+<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
+
+<!DOCTYPE html>
+<html lang="fr">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>CampusTalk - Créer un Fil de Discussion</title>
+    <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
+    <link rel="shortcut icon" href="https://www.shareicon.net/data/2016/07/10/119195_chat_512x512.png">
+</head>
+<body class="bg-gray-100">
+    <nav class="bg-white shadow-md">
+        <div class="max-w-7xl mx-auto px-2 sm:px-6 lg:px-8">
+            <div class="relative flex items-center justify-between h-16">
+                <div class="absolute inset-y-0 left-0 flex items-center sm:hidden">
+                    <button type="button" class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-white hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white" aria-controls="mobile-menu" aria-expanded="false">
+                        <span class="sr-only">Open main menu</span>
+                        <svg class="block h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
+                            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16m-7 6h7" />
+                        </svg>
+                        <svg class="hidden h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
+                            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
+                        </svg>
+                    </button>
+                </div>
+                <div class="flex-1 flex items-center justify-center sm:items-stretch sm:justify-start">
+                    <div class="flex-shrink-0">
+                        <a class="text-xl font-bold text-gray-800" href="#">CampusTalk</a>
+                    </div>
+                    <div class="hidden sm:block sm:ml-auto">
+                        <div class="flex space-x-4">
+                            <a href="<%= request.getContextPath() %>/logout" class="text-red-600 hover:bg-red-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium">Se déconnecter</a>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </nav>
+    <div class="container mx-auto px-4 mt-4 text-center">
+        <a href="<%= request.getContextPath() %>/listerFil" class="bg-blue-500 text-white px-4 py-2 rounded">Retour aux fils de discussion</a>
+    </div>
+
+    <% if (request.getAttribute("error") != null) { %>
+        <div class="max-w-2xl mx-auto mt-4 p-4 bg-red-100 text-red-700 rounded-lg">
+            <%= request.getAttribute("error") %>
+        </div>
+    <% } %>
+
+    <div class="max-w-2xl mx-auto mt-8 p-6 bg-white rounded-lg shadow-md">
+        <h1 class="text-2xl font-bold mb-4 text-center">Créer un nouveau fil de discussion</h1>
+        <form action="creerFil" method="post" class="mt-4">
+            <div class="mb-4">
+                <label for="nom" class="block text-gray-700 font-semibold">Nom du fil:</label>
+                <input type="text" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" id="nom" name="nom" required>
+            </div>
+            <div class="mb-4">
+                <label for="createuremail" class="block text-gray-700 font-semibold">Email du créateur:</label>
+                <input type="email" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" id="createuremail" name="createuremail" required>
+            </div>
+            <div class="mb-4">
+                <label for="description" class="block text-gray-700 font-semibold">Description:</label>
+                <textarea class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" id="description" name="description" rows="3" required></textarea>
+            </div>
+            <button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-600 transition-colors w-full">Créer</button>
+        </form>
+    </div>
+</body>
+</html>
\ No newline at end of file
diff --git a/WEB-INF/vue/fil.jsp b/WEB-INF/vue/fil.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..f2a447f42a92bedb450719dedade6f5dc3fccffa
--- /dev/null
+++ b/WEB-INF/vue/fil.jsp
@@ -0,0 +1,126 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ page import="modele.FilDeDiscussion" %>
+<%@ page import="modele.FilDeDiscussionDAO" %>
+<%@ page import="modele.Message" %>
+<%@ page import="modele.MessageDao" %>
+<%@ page import="java.util.List" %>
+<%@ page import="java.time.LocalDateTime" %>
+<%@ page import="java.time.format.DateTimeFormatter" %>
+
+<!DOCTYPE html>
+<html lang="fr">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>CampusTalk - Fil de Discussion</title>
+    <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
+    <link rel="shortcut icon" href="https://www.shareicon.net/data/2016/07/10/119195_chat_512x512.png">
+    <style>
+        .message-container {
+            transition: background-color 0.3s ease;
+        }
+        .message-container:hover {
+            background-color: #f3f4f6;
+        }
+        .message-image {
+            max-width: 200px; 
+            max-height: 200px; 
+            object-fit: cover;
+            border-radius: 8px;
+        }
+    </style>
+</head>
+<body class="bg-gray-100 text-gray-900 font-sans">
+    <nav class="bg-white shadow-md">
+        <div class="container mx-auto px-4 py-2 flex justify-between items-center">
+            <a class="text-xl font-bold" href="#">CampusTalk</a>
+            <div>
+                <a class="bg-red-500 text-white px-4 py-2 rounded" href="<%= request.getContextPath() %>/logout">Se déconnecter</a>
+            </div>
+        </div>
+    </nav>
+
+    <div class="container mx-auto px-4 mt-4 text-center">
+        <a href="<%= request.getContextPath() %>/accueil" class="bg-blue-500 text-white px-4 py-2 rounded">Retour</a>
+    </div>
+
+    <%
+        int id = Integer.parseInt(request.getParameter("id"));
+        session.setAttribute("filId", id);
+        FilDeDiscussionDAO fddao = new FilDeDiscussionDAO();
+        FilDeDiscussion fil = fddao.findById(id);
+        MessageDao mdao = new MessageDao();
+        List<Message> messages = mdao.findByFil(id);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMM yyyy 'à' HH:mm");
+    %>
+
+    <div class="container mx-auto px-4 mt-8">
+        <div class="bg-white p-6 rounded-lg shadow-lg">
+            <h2 class="text-2xl font-bold mb-4 text-center"><%= fil.getNom() %></h2>
+            <div class="overflow-y-auto max-h-96" id="messages-box">
+                <% for (Message m : messages) {
+                    LocalDateTime datePublication = m.getDatePublication();
+                    String formattedDate = (datePublication != null) ? datePublication.format(formatter) : "Date non disponible";
+                %>
+                <div class="flex items-start mb-4 message-container">
+                    <div class="w-10 h-10 rounded-full overflow-hidden">
+                        <img src="https://www.gravatar.com/avatar/<%= m.getAuteurEmail().hashCode() %>?d=identicon&s=40" alt="Avatar">
+                    </div>
+                    <div class="ml-4 bg-gray-200 p-4 rounded-lg">
+                        <h4 class="font-bold"><%= mdao.findUserName(m.getAuteurEmail()) %></h4>
+                        <p class="text-sm text-gray-600"><%= formattedDate %></p>
+                        <p class="mt-2"><%= m.getContenu() %></p>
+                        <% if (m.getFileName() != null) { %>
+                        <img src="<%= request.getContextPath() %>/uploads/<%= m.getFileName() %>" alt="Image" class="mt-2 message-image">
+                        <% } %>
+                        <div class="mt-2 flex items-center">
+                            <form action="<%= request.getContextPath() %>/Like" method="post" class="mr-2">
+                                <input type="hidden" name="messageId" value="<%= m.getId() %>">
+                                <button type="submit" class="text-blue-500 hover:text-blue-700">
+                                    <% if (m.getLikeCount()) { %>
+                                    ❤️ Enlever le like
+                                    <% } else { %>
+                                    🤍 Like
+                                    <% } %>
+                                </button>
+                            </form>
+                        </div>
+                    </div>
+                </div>
+                <% } %>
+            </div>
+
+            <div class="mt-6 bg-white p-6 rounded-lg shadow-lg">
+                <form action="envoyerMessage" method="post" enctype="multipart/form-data">
+                    <div class="mb-4">
+                        <label for="contenu" class="block text-gray-700 font-semibold">Votre message :</label>
+                        <textarea class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" id="contenu" name="contenu" rows="3" required></textarea>
+                    </div>
+                    <div class="mb-4">
+                        <label for="file" class="block text-gray-700 font-semibold">Ajouter une image :</label>
+                        <div class="flex items-center">
+                            <input type="file" class="hidden" id="file" name="file">
+                            <label for="file" class="cursor-pointer bg-blue-500 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-600 transition-colors flex items-center">
+                                <svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
+                                    <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4"></path>
+                                </svg>
+                                Télécharger
+                            </label>
+                        </div>
+                    </div>
+                    <input type="hidden" name="filId" value="<%= id %>">
+                    <button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-600 transition-colors">Envoyer</button>
+                </form>
+            </div>
+            
+        </div>
+    </div>
+
+    <script>
+        window.onload = function () {
+            let messagesBox = document.getElementById('messages-box');
+            messagesBox.scrollTop = messagesBox.scrollHeight;
+        };
+    </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/WEB-INF/vue/listerFil.jsp b/WEB-INF/vue/listerFil.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..4754c082c73651c7015d820fd49e09bbb896d885
--- /dev/null
+++ b/WEB-INF/vue/listerFil.jsp
@@ -0,0 +1,82 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ page import="modele.FilDeDiscussion" %>
+<%@ page import="modele.FilDeDiscussionDAO" %>
+<%@ page import="modele.AbonnementDao" %>
+<%@ page import="modele.Abonnement" %>
+<%@ page import="java.util.List" %>
+<%@ page import="java.util.Set" %>
+<%@ page import="java.util.HashSet" %>
+
+<!DOCTYPE html>
+<html lang="fr">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>CampusTalk - Fils de Discussion</title>
+    <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
+    <link rel="shortcut icon" href="https://www.shareicon.net/data/2016/07/10/119195_chat_512x512.png">
+</head>
+<body class="bg-gray-100">
+    <nav class="bg-white shadow-md">
+        <div class="max-w-7xl mx-auto px-2 sm:px-6 lg:px-8">
+            <div class="relative flex items-center justify-between h-16">
+                <div class="absolute inset-y-0 left-0 flex items-center sm:hidden">
+                    <button type="button" class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-white hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white" aria-controls="mobile-menu" aria-expanded="false">
+                        <span class="sr-only">Open main menu</span>
+                        <svg class="block h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
+                            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16m-7 6h7" />
+                        </svg>
+                        <svg class="hidden h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
+                            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
+                        </svg>
+                    </button>
+                </div>
+                <div class="flex-1 flex items-center justify-center sm:items-stretch sm:justify-start">
+                    <div class="flex-shrink-0">
+                        <a class="text-xl font-bold text-gray-800" href="#">CampusTalk</a>
+                    </div>
+                    <div class="hidden sm:block sm:ml-auto">
+                        <div class="flex space-x-4">
+                            <a href="<%= request.getContextPath() %>/logout" class="text-red-600 hover:bg-red-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium">Se déconnecter</a>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </nav>
+
+    <div class="container mx-auto px-4 mt-4 text-center">
+        <a href="<%= request.getContextPath() %>/accueil" class="bg-blue-500 text-white px-4 py-2 rounded">Retour à l'accueil</a>
+        <a href="<%= request.getContextPath() %>/creerFil" class="bg-blue-500 text-white px-4 py-2 rounded">Créer un fil de discussion</a>
+    </div>
+
+    <div class="max-w-2xl mx-auto mt-8 p-6 bg-white rounded-lg shadow-md">
+        <h2 class="text-2xl font-bold mb-4 text-center">Fils de Discussion</h2>
+        <p class="text-gray-700 mb-4 text-center">(auxquels vous n'êtes pas abonné)</p>
+        <% 
+            String email = (String) session.getAttribute("email");
+            AbonnementDao adao = new AbonnementDao();
+            List<Abonnement> abonnements = adao.findAbonnements(email);
+            Set<Integer> abonnementsIds = new HashSet<>();
+            for (Abonnement abonnement : abonnements) {
+                abonnementsIds.add(abonnement.getIdFil());
+            }
+
+            FilDeDiscussionDAO fddao = new FilDeDiscussionDAO();
+            for (FilDeDiscussion f : fddao.findAll()) {
+                if (!abonnementsIds.contains(f.getId())) {
+        %>
+        <div class="mb-4 p-4 bg-gray-100 rounded-lg shadow-md">
+            <h4 class="font-bold text-lg"><%= f.getNom() %></h4>
+            <% if (f.getDescription() != null) { %>
+                <p class="text-gray-700"><%= f.getDescription() %></p>
+            <% } %>
+            <a href="<%= request.getContextPath() %>/suivreFil?id=<%= f.getId() %>" class="bg-blue-500 text-white px-4 py-2 rounded mt-2 inline-block">Suivre</a>
+        </div>
+        <% 
+                }
+            }
+        %>
+    </div>
+</body>
+</html>
\ No newline at end of file
diff --git a/WEB-INF/vue/login.jsp b/WEB-INF/vue/login.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..c1328ac95f367d4fbed97fd541c4ac9ba02c5931
--- /dev/null
+++ b/WEB-INF/vue/login.jsp
@@ -0,0 +1,47 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+
+<!DOCTYPE html>
+<html lang="fr">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>CampusTalk - Connexion</title>
+    <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
+    <link rel="shortcut icon" href="https://www.shareicon.net/data/2016/07/10/119195_chat_512x512.png">
+    <style>
+        body {
+            background-color: #f8f9fa;
+        }
+    </style>
+</head>
+<body class="bg-gray-100">
+    <nav class="bg-white shadow-md">
+        <div class="max-w-7xl mx-auto px-2 sm:px-6 lg:px-8">
+            <div class="relative flex items-center justify-between h-16">
+                <div class="flex-1 flex items-center justify-center sm:items-stretch sm:justify-start">
+                    <div class="flex-shrink-0">
+                        <a class="text-xl font-bold text-gray-800" href="#">CampusTalk</a>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </nav>
+    <div class="max-w-md mx-auto mt-12 p-6 bg-white rounded-lg shadow-md">
+        <h2 class="text-2xl font-bold mb-4 text-center">Bienvenue sur CampusTalk</h2>
+        <form action="login" method="post">
+            <div class="mb-4">
+                <label for="email" class="block text-gray-700 font-semibold">Adresse e-mail</label>
+                <input type="email" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" name="email" id="email" placeholder="Entrez votre e-mail" required>
+            </div>
+            <div class="mb-4">
+                <label for="motdepasse" class="block text-gray-700 font-semibold">Mot de passe</label>
+                <input type="password" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" name="motdepasse" id="motdepasse" placeholder="Entrez votre mot de passe" required>
+            </div>
+            <button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-600 transition-colors w-full">Se connecter</button>
+        </form>
+        <div class="text-center mt-3">
+            <p>Vous n'avez pas de compte ? <a href="<%= request.getContextPath() %>/register" class="text-blue-500 hover:underline">S'inscrire</a></p>
+        </div>
+    </div>
+</body>
+</html>
\ No newline at end of file
diff --git a/WEB-INF/vue/register.jsp b/WEB-INF/vue/register.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..321f260d65f4815f0f3143457e47888a66de4139
--- /dev/null
+++ b/WEB-INF/vue/register.jsp
@@ -0,0 +1,51 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
+
+<!DOCTYPE html>
+<html lang="fr">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>CampusTalk - Inscription</title>
+    <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
+    <link rel="shortcut icon" href="https://www.shareicon.net/data/2016/07/10/119195_chat_512x512.png">
+</head>
+<body class="bg-gray-100">
+    <nav class="bg-white shadow-md">
+        <div class="max-w-7xl mx-auto px-2 sm:px-6 lg:px-8">
+            <div class="relative flex items-center justify-between h-16">
+                <div class="flex-1 flex items-center justify-center sm:items-stretch sm:justify-start">
+                    <div class="flex-shrink-0">
+                        <a class="text-xl font-bold text-gray-800" href="#">CampusTalk</a>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </nav>
+    <div class="max-w-md mx-auto mt-12 p-6 bg-white rounded-lg shadow-md">
+        <h2 class="text-2xl font-bold mb-4 text-center">Inscription</h2>
+        <% if (request.getAttribute("error") != null) { %>
+            <div class="bg-red-100 text-red-700 p-4 rounded-lg mb-4">
+                <%= request.getAttribute("error") %>
+            </div>
+            <% request.removeAttribute("error"); } %>
+        <form action="register" method="post">
+            <div class="mb-4">
+                <label for="nom" class="block text-gray-700 font-semibold">Nom</label>
+                <input type="text" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" name="nom" id="nom" placeholder="Entrez votre nom" required>
+            </div>
+            <div class="mb-4">
+                <label for="email" class="block text-gray-700 font-semibold">Adresse e-mail</label>
+                <input type="email" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" name="email" id="email" placeholder="Entrez votre e-mail" required>
+            </div>
+            <div class="mb-4">
+                <label for="motdepasse" class="block text-gray-700 font-semibold">Mot de passe</label>
+                <input type="password" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" name="motdepasse" id="motdepasse" placeholder="Choisissez un mot de passe" required>
+            </div>
+            <button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-600 transition-colors w-full">S'inscrire</button>
+        </form>
+        <div class="text-center mt-3">
+            <p>Vous avez déjà un compte ? <a href="<%= request.getContextPath() %>/login" class="text-blue-500 hover:underline">Se connecter</a></p>
+        </div>
+    </div>
+</body>
+</html>
\ No newline at end of file
diff --git a/lib/annotations-api.jar b/lib/annotations-api.jar
deleted file mode 100644
index e303329a574d38d763cecc462489ca01abfa1ad6..0000000000000000000000000000000000000000
Binary files a/lib/annotations-api.jar and /dev/null differ
diff --git a/lib/catalina-ant.jar b/lib/catalina-ant.jar
deleted file mode 100644
index 76d7756c2db2c6099b9f662a0582fa5a71700f46..0000000000000000000000000000000000000000
Binary files a/lib/catalina-ant.jar and /dev/null differ
diff --git a/lib/catalina-ha.jar b/lib/catalina-ha.jar
deleted file mode 100644
index 20b638a5c1599b24e2ec1274ab3e2b21a439ab2d..0000000000000000000000000000000000000000
Binary files a/lib/catalina-ha.jar and /dev/null differ
diff --git a/lib/catalina-ssi.jar b/lib/catalina-ssi.jar
deleted file mode 100644
index 083ba8154b4b08958820e914ad7e76d201b33a2c..0000000000000000000000000000000000000000
Binary files a/lib/catalina-ssi.jar and /dev/null differ
diff --git a/lib/catalina-storeconfig.jar b/lib/catalina-storeconfig.jar
deleted file mode 100644
index 36551095a40f2996a2ed03dd1a18d38f5ea03f82..0000000000000000000000000000000000000000
Binary files a/lib/catalina-storeconfig.jar and /dev/null differ
diff --git a/lib/catalina-tribes.jar b/lib/catalina-tribes.jar
deleted file mode 100644
index 6a3c5011ccf906b6c72db584a6827022292d2cee..0000000000000000000000000000000000000000
Binary files a/lib/catalina-tribes.jar and /dev/null differ
diff --git a/lib/catalina.jar b/lib/catalina.jar
deleted file mode 100644
index d3dfc66537b1c2d1b6560871097ff38a6e834514..0000000000000000000000000000000000000000
Binary files a/lib/catalina.jar and /dev/null differ
diff --git a/lib/commons-lang3-3.17.0.jar b/lib/commons-lang3-3.17.0.jar
deleted file mode 100644
index f6486b4d7039f22ccf160c8d24ebac26f05bf0de..0000000000000000000000000000000000000000
Binary files a/lib/commons-lang3-3.17.0.jar and /dev/null differ
diff --git a/lib/commons-text-1.13.0.jar b/lib/commons-text-1.13.0.jar
deleted file mode 100644
index a8231464949d5e7fb71a14e044767ad1bfa4c27d..0000000000000000000000000000000000000000
Binary files a/lib/commons-text-1.13.0.jar and /dev/null differ
diff --git a/lib/ecj-4.27.jar b/lib/ecj-4.27.jar
deleted file mode 100644
index a8f827f350d0e9a47af6ef8e262af3dcc7e0c5f6..0000000000000000000000000000000000000000
Binary files a/lib/ecj-4.27.jar and /dev/null differ
diff --git a/lib/el-api.jar b/lib/el-api.jar
deleted file mode 100644
index 915158f3e459724c4c0f63e409e98d17fb4252dd..0000000000000000000000000000000000000000
Binary files a/lib/el-api.jar and /dev/null differ
diff --git a/lib/jackson-annotations-2.15.3.jar b/lib/jackson-annotations-2.15.3.jar
deleted file mode 100644
index 83a6e4ddaacd47fa06e8e464d9c7af645b53ff23..0000000000000000000000000000000000000000
Binary files a/lib/jackson-annotations-2.15.3.jar and /dev/null differ
diff --git a/lib/jackson-core-2.15.3.jar b/lib/jackson-core-2.15.3.jar
deleted file mode 100644
index f0c53d16aa074ab1bc97346eb7d3502ac0ecc03f..0000000000000000000000000000000000000000
Binary files a/lib/jackson-core-2.15.3.jar and /dev/null differ
diff --git a/lib/jackson-databind-2.15.3.jar b/lib/jackson-databind-2.15.3.jar
deleted file mode 100644
index b1a891a3a152ad0323b5fcbcbfa046aa8bd36d9a..0000000000000000000000000000000000000000
Binary files a/lib/jackson-databind-2.15.3.jar and /dev/null differ
diff --git a/lib/jackson-dataformat-xml-2.15.3.jar b/lib/jackson-dataformat-xml-2.15.3.jar
deleted file mode 100644
index 3335c21c73474ddb82564518b25c06120046985a..0000000000000000000000000000000000000000
Binary files a/lib/jackson-dataformat-xml-2.15.3.jar and /dev/null differ
diff --git a/lib/jackson-datatype-jsr310-2.13.0.jar b/lib/jackson-datatype-jsr310-2.13.0.jar
deleted file mode 100644
index aabe23dc082d45f8f47890e6a07001690f806437..0000000000000000000000000000000000000000
Binary files a/lib/jackson-datatype-jsr310-2.13.0.jar and /dev/null differ
diff --git a/lib/jakartaee-migration-1.0.9-shaded.jar b/lib/jakartaee-migration-1.0.9-shaded.jar
deleted file mode 100644
index 83d8075c971bf35a73ae2aea9ebc07bddf97e9de..0000000000000000000000000000000000000000
Binary files a/lib/jakartaee-migration-1.0.9-shaded.jar and /dev/null differ
diff --git a/lib/jasper-el.jar b/lib/jasper-el.jar
deleted file mode 100644
index 1f7d2759f92dc0867207385948859422ecc0876f..0000000000000000000000000000000000000000
Binary files a/lib/jasper-el.jar and /dev/null differ
diff --git a/lib/jasper.jar b/lib/jasper.jar
deleted file mode 100644
index 16eb31f8fa5f700800288f8e77be01758667a177..0000000000000000000000000000000000000000
Binary files a/lib/jasper.jar and /dev/null differ
diff --git a/lib/jaspic-api.jar b/lib/jaspic-api.jar
deleted file mode 100644
index 3c8d7ea22624fba0fd12a3f703f6c1a0467faac1..0000000000000000000000000000000000000000
Binary files a/lib/jaspic-api.jar and /dev/null differ
diff --git a/lib/jsp-api.jar b/lib/jsp-api.jar
deleted file mode 100644
index b2e108d3f650b5adede5001fd07fce1cf0bd7c7f..0000000000000000000000000000000000000000
Binary files a/lib/jsp-api.jar and /dev/null differ
diff --git a/lib/postgresql-42.7.5.jar b/lib/postgresql-42.7.5.jar
deleted file mode 100644
index 279942c19c49e7c3f28b07a0c11f99eef7041818..0000000000000000000000000000000000000000
Binary files a/lib/postgresql-42.7.5.jar and /dev/null differ
diff --git a/lib/servlet-api.jar b/lib/servlet-api.jar
deleted file mode 100644
index 90bb1bccbde89683d431df1c62e4be54e7b49277..0000000000000000000000000000000000000000
Binary files a/lib/servlet-api.jar and /dev/null differ
diff --git a/lib/tomcat-api.jar b/lib/tomcat-api.jar
deleted file mode 100644
index 900a9db0a869ec77a18787568ccc0aa4ac314dc6..0000000000000000000000000000000000000000
Binary files a/lib/tomcat-api.jar and /dev/null differ
diff --git a/lib/tomcat-coyote-ffm.jar b/lib/tomcat-coyote-ffm.jar
deleted file mode 100644
index f28dc1bf8972488600c39374b061ccecf661c7d4..0000000000000000000000000000000000000000
Binary files a/lib/tomcat-coyote-ffm.jar and /dev/null differ
diff --git a/lib/tomcat-coyote.jar b/lib/tomcat-coyote.jar
deleted file mode 100644
index 94094952696e7ab5a36e56011d5cf6f40eaaae07..0000000000000000000000000000000000000000
Binary files a/lib/tomcat-coyote.jar and /dev/null differ
diff --git a/lib/tomcat-dbcp.jar b/lib/tomcat-dbcp.jar
deleted file mode 100644
index dc4dbb5aa6616e2a25797c1c4793b148c2fdea4f..0000000000000000000000000000000000000000
Binary files a/lib/tomcat-dbcp.jar and /dev/null differ
diff --git a/lib/tomcat-i18n-cs.jar b/lib/tomcat-i18n-cs.jar
deleted file mode 100644
index a0d7a181588e58307a4810626052e3b0ff26bc56..0000000000000000000000000000000000000000
Binary files a/lib/tomcat-i18n-cs.jar and /dev/null differ
diff --git a/lib/tomcat-i18n-de.jar b/lib/tomcat-i18n-de.jar
deleted file mode 100644
index 3ef9a694e86272dfe92b9a89014e989849305bb0..0000000000000000000000000000000000000000
Binary files a/lib/tomcat-i18n-de.jar and /dev/null differ
diff --git a/lib/tomcat-i18n-es.jar b/lib/tomcat-i18n-es.jar
deleted file mode 100644
index 55306da32a46ce1a7724b96b5f17ae4d81cb0f24..0000000000000000000000000000000000000000
Binary files a/lib/tomcat-i18n-es.jar and /dev/null differ
diff --git a/lib/tomcat-i18n-fr.jar b/lib/tomcat-i18n-fr.jar
deleted file mode 100644
index e7993ec98632fe97410a98377fca6a75a5c2e24a..0000000000000000000000000000000000000000
Binary files a/lib/tomcat-i18n-fr.jar and /dev/null differ
diff --git a/lib/tomcat-i18n-ja.jar b/lib/tomcat-i18n-ja.jar
deleted file mode 100644
index 94f5d1cc1b3f2903320081dee7aa5d23760bf5a2..0000000000000000000000000000000000000000
Binary files a/lib/tomcat-i18n-ja.jar and /dev/null differ
diff --git a/lib/tomcat-i18n-ko.jar b/lib/tomcat-i18n-ko.jar
deleted file mode 100644
index 75eb86e5fa88e9c785b502500bf34d0aa2cc6aac..0000000000000000000000000000000000000000
Binary files a/lib/tomcat-i18n-ko.jar and /dev/null differ
diff --git a/lib/tomcat-i18n-pt-BR.jar b/lib/tomcat-i18n-pt-BR.jar
deleted file mode 100644
index 43dea11ba943851f494c11ad147676882031d046..0000000000000000000000000000000000000000
Binary files a/lib/tomcat-i18n-pt-BR.jar and /dev/null differ
diff --git a/lib/tomcat-i18n-ru.jar b/lib/tomcat-i18n-ru.jar
deleted file mode 100644
index f9fe5c3625baec5556574bca31cfe2fcf62f9239..0000000000000000000000000000000000000000
Binary files a/lib/tomcat-i18n-ru.jar and /dev/null differ
diff --git a/lib/tomcat-i18n-zh-CN.jar b/lib/tomcat-i18n-zh-CN.jar
deleted file mode 100644
index f20b2c50d9a55ef5dddfc5445f9d2fd864a6f715..0000000000000000000000000000000000000000
Binary files a/lib/tomcat-i18n-zh-CN.jar and /dev/null differ
diff --git a/lib/tomcat-jdbc.jar b/lib/tomcat-jdbc.jar
deleted file mode 100644
index e22934191bd86c4b82c44205d962cea0d1d66c21..0000000000000000000000000000000000000000
Binary files a/lib/tomcat-jdbc.jar and /dev/null differ
diff --git a/lib/tomcat-jni.jar b/lib/tomcat-jni.jar
deleted file mode 100644
index a2a35318a27c182250bfb51207b9aabe7a4fa2af..0000000000000000000000000000000000000000
Binary files a/lib/tomcat-jni.jar and /dev/null differ
diff --git a/lib/tomcat-util-scan.jar b/lib/tomcat-util-scan.jar
deleted file mode 100644
index f28d0c310a3b314d55b16db62cbd004e8af6a825..0000000000000000000000000000000000000000
Binary files a/lib/tomcat-util-scan.jar and /dev/null differ
diff --git a/lib/tomcat-util.jar b/lib/tomcat-util.jar
deleted file mode 100644
index ffcdea230cf5053cb0e90e1f4f22342d1d66f3e9..0000000000000000000000000000000000000000
Binary files a/lib/tomcat-util.jar and /dev/null differ
diff --git a/lib/tomcat-websocket.jar b/lib/tomcat-websocket.jar
deleted file mode 100644
index 1371b33afdc2650919350b6a0bdf3f3154690522..0000000000000000000000000000000000000000
Binary files a/lib/tomcat-websocket.jar and /dev/null differ
diff --git a/lib/websocket-api.jar b/lib/websocket-api.jar
deleted file mode 100644
index 449147bee9a737aefce1aae6b67f1b672ff8ddef..0000000000000000000000000000000000000000
Binary files a/lib/websocket-api.jar and /dev/null differ
diff --git a/lib/websocket-client-api.jar b/lib/websocket-client-api.jar
deleted file mode 100644
index 22f38e825b487736759bfeb8a09667bb21995c64..0000000000000000000000000000000000000000
Binary files a/lib/websocket-client-api.jar and /dev/null differ
diff --git a/script.sql b/script.sql
deleted file mode 100644
index cad3f5425bf61419a9aeaef229ebfa9a1a17342f..0000000000000000000000000000000000000000
--- a/script.sql
+++ /dev/null
@@ -1,150 +0,0 @@
-DROP TABLE IF EXISTS Abonnement;
-DROP TABLE IF EXISTS Message;
-DROP TABLE IF EXISTS FilDeDiscussion;
-DROP TABLE IF EXISTS Utilisateur;
-
-CREATE TABLE Utilisateur (
-    email VARCHAR(100) UNIQUE NOT NULL,
-    nom VARCHAR(100) NOT NULL,
-    motDePasse VARCHAR(255) NOT NULL,
-    dateInscription TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-    CONSTRAINT pk_utilisateur PRIMARY KEY (email)
-);
-
-CREATE TABLE FilDeDiscussion (
-    id SERIAL,
-    nom VARCHAR(100) NOT NULL,
-    dateCreation TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-    createurEmail VARCHAR(100),
-    description TEXT,
-    CONSTRAINT pk_fil PRIMARY KEY (id),
-    CONSTRAINT fk_createur FOREIGN KEY (createurEmail) REFERENCES Utilisateur(email)
-        ON DELETE SET NULL
-);
-
-CREATE TABLE Message (
-    id SERIAL,
-    contenu TEXT NOT NULL,
-    datePublication TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-    filId INTEGER,
-    auteurEmail VARCHAR(100),
-    fileName VARCHAR(255),
-    CONSTRAINT pk_message PRIMARY KEY (id),
-    CONSTRAINT fk_fil FOREIGN KEY (filId) REFERENCES FilDeDiscussion(id)
-        ON DELETE CASCADE,
-    CONSTRAINT fk_auteur FOREIGN KEY (auteurEmail) REFERENCES Utilisateur(email)
-        ON DELETE SET NULL
-);
-
-CREATE TABLE Abonnement (
-    utilisateurEmail VARCHAR(100),
-    filId INTEGER,
-    dateAbonnement TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-    CONSTRAINT pk_abonnement PRIMARY KEY (utilisateurEmail, filId),
-    CONSTRAINT fk_utilisateur FOREIGN KEY (utilisateurEmail) REFERENCES Utilisateur(email)
-        ON DELETE CASCADE,
-    CONSTRAINT fk_fil FOREIGN KEY (filId) REFERENCES FilDeDiscussion(id)
-        ON DELETE CASCADE
-);
-
--- Insertion des utilisateurs
-INSERT INTO Utilisateur (email, nom, motDePasse)
-VALUES 
-('utilisateur1@exemple.com', 'Utilisateur 1', MD5('motdepasse123')),
-('utilisateur2@exemple.com', 'Utilisateur 2', MD5('motdepasse123')),
-('utilisateur3@exemple.com', 'Utilisateur 3', MD5('motdepasse123'));
-
--- Insertion des fils de discussion
-INSERT INTO FilDeDiscussion (nom, createurEmail, description)
-VALUES 
-('Discussion Générale', 'utilisateur1@exemple.com', 'Un fil pour discuter de tout et de rien.'),
-('Tech Talk', 'utilisateur2@exemple.com', 'Discussions sur les dernières technologies.'),
-('Sports', 'utilisateur3@exemple.com', 'Discussions sur les sports et les événements sportifs.');
-
--- Insertion des messages
-INSERT INTO Message (contenu, filId, auteurEmail, fileName) VALUES 
-('Bonjour, ceci est mon premier message !', 1, 'utilisateur1@exemple.com', NULL),
-('Quelquun a des nouvelles sur la dernière mise à jour de Java ?', 2, 'utilisateur2@exemple.com', NULL),
-('Qui a regardé le match hier soir ?', 3, 'utilisateur3@exemple.com', NULL),
-('Bienvenue à tous dans ce fil de discussion !', 1, 'utilisateur2@exemple.com', NULL),
-('Je pense que la nouvelle version de Python est géniale.', 2, 'utilisateur3@exemple.com', NULL),
-('Le match était incroyable, quelle performance !', 3, 'utilisateur1@exemple.com', NULL);
-
--- Insertion des abonnements
-INSERT INTO Abonnement (utilisateurEmail, filId)
-VALUES 
-('utilisateur1@exemple.com', 1),
-('utilisateur1@exemple.com', 2),
-('utilisateur2@exemple.com', 1),
-('utilisateur2@exemple.com', 3),
-('utilisateur3@exemple.com', 2),
-('utilisateur3@exemple.com', 3);
-
--- Lister tous les utilisateurs :
-
--- SELECT * FROM Utilisateur;
-
--- Lister tous les fils de discussion avec le nom du créateur :
-
--- SELECT f.id, f.nom, u.nom AS nomCreateur
--- FROM FilDeDiscussion f
--- JOIN Utilisateur u ON f.createurEmail = u.email;
-
--- Lister tous les messages d'un fil de discussion spécifique avec le nom de l'auteur :
-
--- SELECT m.contenu, u.nom AS nomAuteur, m.datePublication
--- FROM Message m
--- JOIN Utilisateur u ON m.auteurEmail = u.email
--- WHERE m.filId = 1
--- ORDER BY m.datePublication;
-
--- Lister tous les abonnements d'un utilisateur spécifique :
-
--- SELECT f.nom AS nomFil, a.dateAbonnement
--- FROM Abonnement a
--- JOIN FilDeDiscussion f ON a.filId = f.id
--- WHERE a.utilisateurEmail = 'utilisateur1@exemple.com';
-
--- Lister les fils de discussion auxquels un utilisateur n'est pas abonné :
-
--- SELECT f.id, f.nom
--- FROM FilDeDiscussion f
--- LEFT JOIN Abonnement a ON f.id = a.filId AND a.utilisateurEmail = 'utilisateur1@exemple.com'
--- WHERE a.utilisateurEmail IS NULL;
-
--- Compter le nombre de messages par fil de discussion :
-
--- SELECT f.nom AS nomFil, COUNT(m.id) AS nombreMessages
--- FROM FilDeDiscussion f
--- LEFT JOIN Message m ON f.id = m.filId
--- GROUP BY f.nom;
-
--- Trouver les utilisateurs qui ont publié des messages dans un fil spécifique :
-
--- SELECT DISTINCT u.nom, u.email
--- FROM Utilisateur u
--- JOIN Message m ON u.email = m.auteurEmail
--- WHERE m.filId = 1;
-
--- Lister les 5 derniers messages publiés dans un fil de discussion :
-
--- SELECT m.contenu, u.nom AS nomAuteur, m.datePublication
--- FROM Message m
--- JOIN Utilisateur u ON m.auteurEmail = u.email
--- WHERE m.filId = 1
--- ORDER BY m.datePublication DESC
--- LIMIT 5;
-
--- Compter le nombre d'abonnés par fil de discussion :
-
--- SELECT f.nom AS nomFil, COUNT(a.utilisateurEmail) AS nombreAbonnes
--- FROM FilDeDiscussion f
--- LEFT JOIN Abonnement a ON f.id = a.filId
--- GROUP BY f.nom;
-
--- Lister les utilisateurs qui ne sont abonnés à aucun fil de discussion :
-
--- SELECT u.email, u.nom
--- FROM Utilisateur u
--- LEFT JOIN Abonnement a ON u.email = a.utilisateurEmail
--- WHERE a.utilisateurEmail IS NULL;
\ No newline at end of file
diff --git a/uploads/Abr.png b/uploads/Abr.png
new file mode 100644
index 0000000000000000000000000000000000000000..104b2328ee7164628311b8ee28dc54376ec0b75d
Binary files /dev/null and b/uploads/Abr.png differ