From aad747cedd63e2ff7c8e5fb12cb9a65087b79dbd Mon Sep 17 00:00:00 2001
From: Adrien <adrien.fryson@outlook.com>
Date: Thu, 13 Feb 2025 21:45:14 +0100
Subject: [PATCH] nettoyage + fix bugs

---
 compilation.md                                |   1 +
 .../src/controleur/AjoutUtilisateur.java      |  27 +++-
 sae/WEB-INF/src/controleur/CreateNewFil.java  |  39 -----
 sae/WEB-INF/src/controleur/CreationFil.java   |  34 +++++
 sae/WEB-INF/src/modele/Abonnement.java        |  16 +-
 sae/WEB-INF/src/modele/AbonnementDao.java     |  18 +--
 sae/WEB-INF/src/modele/DS.java                |   6 +-
 sae/WEB-INF/src/modele/FilDeDiscussion.java   |  22 +--
 .../src/modele/FilDeDiscussionDAO.java        |  26 ++--
 sae/WEB-INF/src/modele/Message.java           |  36 ++---
 sae/WEB-INF/src/modele/MessageDao.java        |  20 +--
 sae/WEB-INF/src/modele/Utilisateur.java       |  22 +--
 sae/WEB-INF/src/modele/UtilisateurDao.java    |  41 +----
 sae/WEB-INF/vue/CreationFils.jsp              |  17 ---
 sae/WEB-INF/vue/Liste.jsp                     |  22 ---
 sae/WEB-INF/vue/Vignette.jsp                  |  14 --
 sae/WEB-INF/vue/ajoutUtilisateur.jsp          |   7 +-
 sae/WEB-INF/vue/creationFil.jsp               |  20 +++
 sae/WEB-INF/vue/delete.jsp                    |  18 ---
 sae/WEB-INF/vue/edit.jsp                      |  44 ------
 sae/WEB-INF/vue/list.jsp                      |  40 -----
 sae/WEB-INF/vue/view.jsp                      |  38 -----
 script.sql                                    | 142 ++++++++++--------
 23 files changed, 237 insertions(+), 433 deletions(-)
 create mode 100644 compilation.md
 delete mode 100644 sae/WEB-INF/src/controleur/CreateNewFil.java
 create mode 100644 sae/WEB-INF/src/controleur/CreationFil.java
 delete mode 100644 sae/WEB-INF/vue/CreationFils.jsp
 delete mode 100644 sae/WEB-INF/vue/Liste.jsp
 delete mode 100644 sae/WEB-INF/vue/Vignette.jsp
 create mode 100644 sae/WEB-INF/vue/creationFil.jsp
 delete mode 100644 sae/WEB-INF/vue/delete.jsp
 delete mode 100644 sae/WEB-INF/vue/edit.jsp
 delete mode 100644 sae/WEB-INF/vue/list.jsp
 delete mode 100644 sae/WEB-INF/vue/view.jsp

diff --git a/compilation.md b/compilation.md
new file mode 100644
index 0000000..2b7338c
--- /dev/null
+++ b/compilation.md
@@ -0,0 +1 @@
+javac -d WEB-INF/classes -cp ../../lib/servlet-api.jar WEB-INF/src/controleur/*.java WEB-INF/src/modele/*.java
\ No newline at end of file
diff --git a/sae/WEB-INF/src/controleur/AjoutUtilisateur.java b/sae/WEB-INF/src/controleur/AjoutUtilisateur.java
index ac7a68f..f71113c 100644
--- a/sae/WEB-INF/src/controleur/AjoutUtilisateur.java
+++ b/sae/WEB-INF/src/controleur/AjoutUtilisateur.java
@@ -1,21 +1,32 @@
 package controleur;
 
-import java.time.LocalDate;
-
-import modele.Utilisateur;
-import modele.UtilisateurDao;
+import java.time.LocalDateTime;
 import jakarta.servlet.annotation.WebServlet;
 import jakarta.servlet.http.HttpServlet;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.servlet.ServletException;
 import java.io.IOException;
+import modele.Utilisateur;
+import modele.UtilisateurDao;
 
 @WebServlet("/ajoutUtilisateur")
 public class AjoutUtilisateur extends HttpServlet {
-    public void service(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
-        UtilisateurDao udao = new UtilisateurDao();
-        udao.insert(new Utilisateur(-1, req.getParameter("nom"), req.getParameter("email"), req.getParameter("mdp"), LocalDate.now()));
+
+    @Override
+    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
         req.getRequestDispatcher("/WEB-INF/vue/ajoutUtilisateur.jsp").forward(req, res);
     }
-}
+
+    @Override
+    protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
+        UtilisateurDao udao = new UtilisateurDao();
+        udao.insert(new Utilisateur(
+            req.getParameter("nom"),
+            req.getParameter("email"),
+            req.getParameter("motdepasse"),
+            LocalDateTime.now()
+        ));
+        res.sendRedirect(req.getContextPath() + "/ajoutUtilisateur");
+    }
+}
\ No newline at end of file
diff --git a/sae/WEB-INF/src/controleur/CreateNewFil.java b/sae/WEB-INF/src/controleur/CreateNewFil.java
deleted file mode 100644
index 4b24441..0000000
--- a/sae/WEB-INF/src/controleur/CreateNewFil.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package controleur;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.sql.*;
-import java.nio.charset.StandardCharsets;
-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.DS;
-
-@WebServlet("/CreateNewFil")
-public class CreateNewFil extends HttpServlet {
-    public void service(HttpServletRequest req, HttpServletResponse res) {
-        try {
-            String nom = req.getParameter("nom");
-            int createur_id = Integer.parseInt(req.getParameter("createur_id"));
-            String query = "INSERT INTO FilDeDiscussion (nom, createur_id) VALUES (?, ?)";
-
-            Connection con = DS.getConnection();
-            PreparedStatement pstmt = con.prepareStatement(query);
-            pstmt.setString(1, nom);
-            pstmt.setInt(2, createur_id);
-            System.out.println(pstmt);
-            int n = pstmt.executeUpdate();
-            System.out.println(n);
-            req.getRequestDispatcher("CreationFils.jsp").forward(req, res);
-            con.close();
-        } catch (Exception e) {
-            //e.printStackTrace();
-            System.out.println(e.getMessage());
-        }
-    }
-
-}
diff --git a/sae/WEB-INF/src/controleur/CreationFil.java b/sae/WEB-INF/src/controleur/CreationFil.java
new file mode 100644
index 0000000..416f321
--- /dev/null
+++ b/sae/WEB-INF/src/controleur/CreationFil.java
@@ -0,0 +1,34 @@
+package controleur;
+
+import java.time.LocalDateTime;
+
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import modele.FilDeDiscussion;
+import modele.FilDeDiscussionDAO;
+import jakarta.servlet.ServletException;
+import java.io.IOException;
+
+@WebServlet("/creationFil")
+public class CreationFil extends HttpServlet {
+
+    @Override
+    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
+        req.getRequestDispatcher("/WEB-INF/vue/creationFil.jsp").forward(req, res);
+    }
+
+    @Override
+    protected void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
+        FilDeDiscussionDAO f = new FilDeDiscussionDAO();
+        f.create(new FilDeDiscussion(
+            -1,
+            req.getParameter("nom"),
+            LocalDateTime.now(),
+            req.getParameter("createuremail")
+        ));
+        
+        res.sendRedirect(req.getContextPath() + "/creationFil");
+    }
+}
diff --git a/sae/WEB-INF/src/modele/Abonnement.java b/sae/WEB-INF/src/modele/Abonnement.java
index 4378811..2110d2a 100644
--- a/sae/WEB-INF/src/modele/Abonnement.java
+++ b/sae/WEB-INF/src/modele/Abonnement.java
@@ -3,25 +3,25 @@ package modele;
 import java.time.LocalDate;
 
 public class Abonnement {
-    private int idUtilisateur;
+    private String utilisateurEmail;
     private int idFil;
     private LocalDate dateAbonnement;
 
     public Abonnement() {
     }
 
-    public Abonnement(int idUtilisateur, int idFil, LocalDate dateAbonnement) {
-        this.idUtilisateur = idUtilisateur;
+    public Abonnement(String utilisateurEmail, int idFil, LocalDate dateAbonnement) {
+        this.utilisateurEmail = utilisateurEmail;
         this.idFil = idFil;
         this.dateAbonnement = dateAbonnement;
     }
 
-    public int getIdUtilisateur() {
-        return idUtilisateur;
+    public String getUtilisateurEmail() {
+        return utilisateurEmail;
     }
 
-    public void setIdUtilisateur(int idUtilisateur) {
-        this.idUtilisateur = idUtilisateur;
+    public void setUtilisateurEmail(String utilisateurEmail) {
+        this.utilisateurEmail = utilisateurEmail;
     }
 
     public int getIdFil() {
@@ -43,7 +43,7 @@ public class Abonnement {
     @Override
     public String toString() {
         return "Abonnement{" +
-                "idUtilisateur=" + idUtilisateur +
+                "utilisateurEmail=" + utilisateurEmail +
                 ", idFil=" + idFil +
                 ", dateAbonnement=" + dateAbonnement +
                 '}';
diff --git a/sae/WEB-INF/src/modele/AbonnementDao.java b/sae/WEB-INF/src/modele/AbonnementDao.java
index b34a262..7613030 100644
--- a/sae/WEB-INF/src/modele/AbonnementDao.java
+++ b/sae/WEB-INF/src/modele/AbonnementDao.java
@@ -8,15 +8,15 @@ import java.util.ArrayList;
 
 public class AbonnementDao {
     
-    public Abonnement findAbonnement(int idUtilisateur, int idFil) {
+    public Abonnement findAbonnement(String utilisateurEmail, int idFil) {
         Abonnement abonnement = new Abonnement();
         try(Connection con = DS.instance.getConnection()) {
-            PreparedStatement ps = con.prepareStatement("SELECT * FROM abonnement WHERE idUtilisateur = ? AND idFil = ?");
-            ps.setInt(1, idUtilisateur);
+            PreparedStatement ps = con.prepareStatement("SELECT * FROM abonnement WHERE utilisateurEmail = ? AND idFil = ?");
+            ps.setString(1, utilisateurEmail);
             ps.setInt(2, idFil);
             ResultSet rs = ps.executeQuery();
             if (rs.next()) {
-                abonnement.setIdUtilisateur(rs.getInt("idUtilisateur"));
+                abonnement.setUtilisateurEmail(rs.getString("utilisateurEmail"));
                 abonnement.setIdFil(rs.getInt("idFil"));
                 abonnement.setDateAbonnement(rs.getDate("dateAbonnement").toLocalDate());
             } else {
@@ -35,7 +35,7 @@ public class AbonnementDao {
             ResultSet rs = ps.executeQuery();
             while (rs.next()) {
                 Abonnement abonnement = new Abonnement();
-                abonnement.setIdUtilisateur(rs.getInt("idUtilisateur"));
+                abonnement.setUtilisateurEmail(rs.getString("utilisateurEmail"));
                 abonnement.setIdFil(rs.getInt("idFil"));
                 abonnement.setDateAbonnement(rs.getDate("dateAbonnement").toLocalDate());
                 abonnements.add(abonnement);
@@ -46,15 +46,15 @@ public class AbonnementDao {
         return abonnements;
     }
 
-    public List<Abonnement> findAbonnements(int idUtilisateur) {
+    public List<Abonnement> findAbonnements(String utilisateurEmail) {
         List<Abonnement> abonnements = new ArrayList<>();
         try(Connection con = DS.instance.getConnection()) {
-            PreparedStatement ps = con.prepareStatement("SELECT * FROM abonnement WHERE idUtilisateur = ?");
-            ps.setInt(1, idUtilisateur);
+            PreparedStatement ps = con.prepareStatement("SELECT * FROM abonnement WHERE utilisateurEmail = ?");
+            ps.setString(1, utilisateurEmail);
             ResultSet rs = ps.executeQuery();
             while (rs.next()) {
                 Abonnement abonnement = new Abonnement();
-                abonnement.setIdUtilisateur(rs.getInt("idUtilisateur"));
+                abonnement.setUtilisateurEmail(rs.getString("utilisateurEmail"));
                 abonnement.setIdFil(rs.getInt("idFil"));
                 abonnement.setDateAbonnement(rs.getDate("dateAbonnement").toLocalDate());
                 abonnements.add(abonnement);
diff --git a/sae/WEB-INF/src/modele/DS.java b/sae/WEB-INF/src/modele/DS.java
index e461641..9c3ebc1 100644
--- a/sae/WEB-INF/src/modele/DS.java
+++ b/sae/WEB-INF/src/modele/DS.java
@@ -15,9 +15,9 @@ public class DS {
     }
 
     public Connection getConnection() {
-        String url = "jdbc:postgresql://psqlserv/but2";
-        String login = "adrienfrysonetu";
-        String pwd = "moi";
+        String url = "jdbc:postgresql://localhost:5432/postgres";
+        String login = "postgres";
+        String pwd = "";
         Connection con = null;
         try {
             con = DriverManager.getConnection(url, login, pwd);
diff --git a/sae/WEB-INF/src/modele/FilDeDiscussion.java b/sae/WEB-INF/src/modele/FilDeDiscussion.java
index a691a80..8b2cbb2 100644
--- a/sae/WEB-INF/src/modele/FilDeDiscussion.java
+++ b/sae/WEB-INF/src/modele/FilDeDiscussion.java
@@ -1,21 +1,21 @@
 package modele;
 
-import java.sql.Timestamp;
+import java.time.LocalDateTime;
 
 public class FilDeDiscussion {
     private int id;
     private String nom;
-    private Timestamp dateCreation;
-    private int createurId;
+    private LocalDateTime dateCreation;
+    private String createurEmail;
 
     public FilDeDiscussion() {
     }
 
-    public FilDeDiscussion(int id, String nom, Timestamp dateCreation, int createurId) {
+    public FilDeDiscussion(int id, String nom, LocalDateTime dateCreation, String createurEmail) {
         this.id = id;
         this.nom = nom;
         this.dateCreation = dateCreation;
-        this.createurId = createurId;
+        this.createurEmail = createurEmail;
     }
 
     public int getId() {
@@ -34,19 +34,19 @@ public class FilDeDiscussion {
         this.nom = nom;
     }
 
-    public Timestamp getDateCreation() {
+    public LocalDateTime getDateCreation() {
         return dateCreation;
     }
 
-    public void setDateCreation(Timestamp dateCreation) {
+    public void setDateCreation(LocalDateTime dateCreation) {
         this.dateCreation = dateCreation;
     }
 
-    public int getCreateurId() {
-        return createurId;
+    public String getCreateurEmail() {
+        return createurEmail;
     }
 
-    public void setCreateurId(int createurId) {
-        this.createurId = createurId;
+    public void setCreateurEmail(String createurEmail) {
+        this.createurEmail = createurEmail;
     }
 }
diff --git a/sae/WEB-INF/src/modele/FilDeDiscussionDAO.java b/sae/WEB-INF/src/modele/FilDeDiscussionDAO.java
index acd0d7a..e869736 100644
--- a/sae/WEB-INF/src/modele/FilDeDiscussionDAO.java
+++ b/sae/WEB-INF/src/modele/FilDeDiscussionDAO.java
@@ -8,18 +8,17 @@ import java.util.List;
 
 public class FilDeDiscussionDAO {
 
-    // Méthode pour récupérer un fil de discussion par son id
     public FilDeDiscussion findById(int id) {
         FilDeDiscussion f = new FilDeDiscussion();
         try (Connection con = DS.instance.getConnection()) {
-            PreparedStatement ps = con.prepareStatement("SELECT * FROM fil_de_discussion WHERE id = ?");
+            PreparedStatement ps = con.prepareStatement("SELECT * FROM filDeDiscussion WHERE id = ?");
             ps.setInt(1, id);
             ResultSet rs = ps.executeQuery();
             if (rs.next()) {
                 f.setId(rs.getInt("id"));
                 f.setNom(rs.getString("nom"));
-                f.setDateCreation(rs.getTimestamp("date_creation"));
-                f.setCreateurId(rs.getInt("createur_id"));
+                f.setDateCreation(rs.getTimestamp("dateCreation").toLocalDateTime());
+                f.setCreateurEmail(rs.getString("createurEmail"));
             } else {
                 System.out.println("Fil de discussion inexistant");
             }
@@ -29,32 +28,28 @@ public class FilDeDiscussionDAO {
         return f;
     }
 
-    // Méthode pour créer un fil de discussion
     public void create(FilDeDiscussion filDeDiscussion) {
         try (Connection con = DS.instance.getConnection()) {
-            PreparedStatement pstmt = con.prepareStatement("INSERT INTO fil_de_discussion (id, nom, date_creation, createur_id) VALUES (?, ?, ?, ?)");
-            pstmt.setInt(1, filDeDiscussion.getId());
-            pstmt.setString(2, filDeDiscussion.getNom());
-            pstmt.setTimestamp(3, filDeDiscussion.getDateCreation());
-            pstmt.setInt(4, filDeDiscussion.getCreateurId());
+            PreparedStatement pstmt = con.prepareStatement("INSERT INTO filDeDiscussion (nom, createurEmail) VALUES (?, ?)");
+            pstmt.setString(1, filDeDiscussion.getNom());
+            pstmt.setString(2, filDeDiscussion.getCreateurEmail());
             pstmt.executeUpdate();
         } catch (Exception e) {
             System.err.println(e.getMessage());    
         }
     }
 
-    // Méthode pour récupérer tous les fils de discussion
     public List<FilDeDiscussion> findAll() {
         List<FilDeDiscussion> filsDeDiscussion = new ArrayList<>();
         try (Connection con = DS.instance.getConnection()) {
-            PreparedStatement ps = con.prepareStatement("SELECT * FROM fil_de_discussion");
+            PreparedStatement ps = con.prepareStatement("SELECT * FROM filDeDiscussion");
             ResultSet rs = ps.executeQuery();
             while (rs.next()) {
                 FilDeDiscussion f = new FilDeDiscussion();
                 f.setId(rs.getInt("id"));
                 f.setNom(rs.getString("nom"));
-                f.setDateCreation(rs.getTimestamp("date_creation"));
-                f.setCreateurId(rs.getInt("createur_id"));
+                f.setDateCreation(rs.getTimestamp("dateCreation").toLocalDateTime());
+                f.setCreateurEmail(rs.getString("createurEmail"));
                 filsDeDiscussion.add(f);
             }
         } catch (Exception e) {
@@ -63,10 +58,9 @@ public class FilDeDiscussionDAO {
         return filsDeDiscussion;
     }
 
-    // Méthode pour supprimer un fil de discussion
     public void delete(int id) {
         try (Connection con = DS.instance.getConnection()) {
-            PreparedStatement pstmt = con.prepareStatement("DELETE FROM fil_de_discussion WHERE id = ?");
+            PreparedStatement pstmt = con.prepareStatement("DELETE FROM filDeDiscussion WHERE id = ?");
             pstmt.setInt(1, id);
             pstmt.executeUpdate();
         } catch (Exception e) {
diff --git a/sae/WEB-INF/src/modele/Message.java b/sae/WEB-INF/src/modele/Message.java
index a6a68e3..5e7b1bd 100644
--- a/sae/WEB-INF/src/modele/Message.java
+++ b/sae/WEB-INF/src/modele/Message.java
@@ -1,23 +1,23 @@
 package modele;
 
-import java.time.LocalDate;
+import java.time.LocalDateTime;
 
 public class Message {
     private int id;
     private String contenu;
-    private LocalDate datePublication;
-    private int idFil;
-    private int idAuteur;
+    private LocalDateTime datePublication;
+    private int filId;
+    private String auteurEmail;
 
     public Message() {
     }
 
-    public Message(int id, String contenu, LocalDate datePublication, int idFil, int idAuteur) {
+    public Message(int id, String contenu, LocalDateTime datePublication, int filId, String auteurEmail) {
         this.id = id;
         this.contenu = contenu;
         this.datePublication = datePublication;
-        this.idFil = idFil;
-        this.idAuteur = idAuteur;
+        this.filId = filId;
+        this.auteurEmail = auteurEmail;
     }
 
     public int getId() {
@@ -36,32 +36,32 @@ public class Message {
         this.contenu = contenu;
     }
 
-    public LocalDate getDatePublication() {
+    public LocalDateTime getDatePublication() {
         return datePublication;
     }
 
-    public void setDatePublication(LocalDate datePublication) {
+    public void setDatePublication(LocalDateTime datePublication) {
         this.datePublication = datePublication;
     }
 
-    public int getIdFil() {
-        return idFil;
+    public int getfilId() {
+        return filId;
     }
 
-    public void setIdFil(int idFil) {
-        this.idFil = idFil;
+    public void setFilId(int filId) {
+        this.filId = filId;
     }
 
-    public int getIdAuteur() {
-        return idAuteur;
+    public String getAuteurEmail() {
+        return auteurEmail;
     }
 
-    public void setIdAuteur(int idAuteur) {
-        this.idAuteur = idAuteur;
+    public void setAuteurEmail(String auteurEmail) {
+        this.auteurEmail = auteurEmail;
     }
 
     @Override
     public String toString() {
-        return "Message{" + "id=" + id + ", contenu=" + contenu + ", datePublication=" + datePublication + ", idFil=" + idFil + ", idAuteur=" + idAuteur + '}';
+        return "Message{" + "id=" + id + ", contenu=" + contenu + ", datePublication=" + datePublication + ", filId=" + filId + ", auteurEmail=" + auteurEmail + '}';
     }
 }
diff --git a/sae/WEB-INF/src/modele/MessageDao.java b/sae/WEB-INF/src/modele/MessageDao.java
index 1f024be..8bc2f9e 100644
--- a/sae/WEB-INF/src/modele/MessageDao.java
+++ b/sae/WEB-INF/src/modele/MessageDao.java
@@ -17,9 +17,9 @@ public class MessageDao {
             if (rs.next()) {
                 message.setId(rs.getInt("id"));
                 message.setContenu(rs.getString("contenu"));
-                message.setDatePublication(rs.getDate("datePublication").toLocalDate());
-                message.setIdFil(rs.getInt("idFil"));
-                message.setIdAuteur(rs.getInt("idAuteur"));
+                message.setDatePublication(rs.getTimestamp("datePublication").toLocalDateTime());
+                message.setFilId(rs.getInt("filId"));
+                message.setAuteurEmail(rs.getString("auteurEmail"));
             } else {
                 System.out.println("Message inexistant");
             }
@@ -38,9 +38,9 @@ public class MessageDao {
                 Message message = new Message();
                 message.setId(rs.getInt("id"));
                 message.setContenu(rs.getString("contenu"));
-                message.setDatePublication(rs.getDate("datePublication").toLocalDate());
-                message.setIdFil(rs.getInt("idFil"));
-                message.setIdAuteur(rs.getInt("idAuteur"));
+                message.setDatePublication(rs.getTimestamp("datePublication").toLocalDateTime());
+                message.setFilId(rs.getInt("filId"));
+                message.setAuteurEmail(rs.getString("auteurEmail"));
                 messages.add(message);
             }
         } catch (Exception e) {
@@ -52,16 +52,16 @@ public class MessageDao {
     public List<Message> findMessages(int idFil) {
         List<Message> messages = new ArrayList<>();
         try(Connection con = DS.instance.getConnection()) {
-            PreparedStatement ps = con.prepareStatement("SELECT * FROM message WHERE idFil = ?");
+            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.getDate("datePublication").toLocalDate());
-                message.setIdFil(rs.getInt("idFil"));
-                message.setIdAuteur(rs.getInt("idAuteur"));
+                message.setDatePublication(rs.getTimestamp("datePublication").toLocalDateTime());
+                message.setFilId(rs.getInt("filId"));
+                message.setAuteurEmail(rs.getString("auteurEmail"));
                 messages.add(message);
             }
         } catch (Exception e) {
diff --git a/sae/WEB-INF/src/modele/Utilisateur.java b/sae/WEB-INF/src/modele/Utilisateur.java
index 60fb725..853c966 100644
--- a/sae/WEB-INF/src/modele/Utilisateur.java
+++ b/sae/WEB-INF/src/modele/Utilisateur.java
@@ -1,33 +1,23 @@
 package modele;
 
-import java.time.LocalDate;
+import java.time.LocalDateTime;
 
 public class Utilisateur {
-    private int id;
     private String nom;
     private String email;
     private String motDePasse; // HASH
-    private LocalDate dateInscription;
+    private LocalDateTime dateInscription;
 
     public Utilisateur() {
     }
 
-    public Utilisateur(int id, String nom, String email, String motDePasse, LocalDate dateInscription) {
-        this.id = id;
+    public Utilisateur(String nom, String email, String motDePasse, LocalDateTime dateInscription) {
         this.nom = nom;
         this.email = email;
         this.motDePasse = motDePasse;
         this.dateInscription = dateInscription;
     }
 
-    public int getId() {
-        return id;
-    }
-
-    public void setId(int id) {
-        this.id = id;
-    }
-
     public String getNom() {
         return nom;
     }
@@ -52,16 +42,16 @@ public class Utilisateur {
         this.motDePasse = motDePasse;
     }
 
-    public LocalDate getDateInscription() {
+    public LocalDateTime getDateInscription() {
         return dateInscription;
     }
 
-    public void setDateInscription(LocalDate dateInscription) {
+    public void setDateInscription(LocalDateTime dateInscription) {
         this.dateInscription = dateInscription;
     }
 
     @Override
     public String toString() {
-        return "Utilisateur [dateInscription=" + dateInscription + ", email=" + email + ", id=" + id + ", nom=" + nom + "]";
+        return "Utilisateur [dateInscription=" + dateInscription + ", email=" + email + ", nom=" + nom + "]";
     }
 }
diff --git a/sae/WEB-INF/src/modele/UtilisateurDao.java b/sae/WEB-INF/src/modele/UtilisateurDao.java
index 24369bb..aec0734 100644
--- a/sae/WEB-INF/src/modele/UtilisateurDao.java
+++ b/sae/WEB-INF/src/modele/UtilisateurDao.java
@@ -6,40 +6,17 @@ import java.sql.ResultSet;
 
 public class UtilisateurDao {
     
-    public Utilisateur findUtilisateur(int id) {
+    public Utilisateur findUtilisateur(String email) {
         Utilisateur utilisateur = new Utilisateur();
         try(Connection con = DS.instance.getConnection()) {
-            PreparedStatement ps = con.prepareStatement("SELECT * FROM utilisateur WHERE id = ?");
-            ps.setInt(1, id);
-            ResultSet rs = ps.executeQuery();
-            if (rs.next()) {
-                utilisateur.setId(rs.getInt("id"));
-                utilisateur.setNom(rs.getString("nom"));
-                utilisateur.setEmail(rs.getString("email"));
-                utilisateur.setMotDePasse(rs.getString("motDePasse"));
-                utilisateur.setDateInscription(rs.getDate("dateInscription").toLocalDate());
-            } else {
-                System.out.println("Utilisateur inexistant");
-            }
-        } catch (Exception e) {
-            System.out.println(e.getMessage());
-        }
-        return utilisateur;
-    }
-
-    public Utilisateur findUtilisateur(String email, String motDePasse) {
-        Utilisateur utilisateur = new Utilisateur();
-        try(Connection con = DS.instance.getConnection()) {
-            PreparedStatement ps = con.prepareStatement("SELECT * FROM Utilisateur WHERE email = ? AND mot_de_passe = ?");
+            PreparedStatement ps = con.prepareStatement("SELECT * FROM utilisateur WHERE email = ?");
             ps.setString(1, email);
-            ps.setString(2, motDePasse);
             ResultSet rs = ps.executeQuery();
             if (rs.next()) {
-                utilisateur.setId(rs.getInt("id"));
                 utilisateur.setNom(rs.getString("nom"));
                 utilisateur.setEmail(rs.getString("email"));
                 utilisateur.setMotDePasse(rs.getString("motDePasse"));
-                utilisateur.setDateInscription(rs.getDate("dateInscription").toLocalDate());
+                utilisateur.setDateInscription(rs.getTimestamp("dateInscritpion").toLocalDateTime());
             } else {
                 System.out.println("Utilisateur inexistant");
             }
@@ -49,10 +26,10 @@ public class UtilisateurDao {
         return utilisateur;
     }
 
-    public void delete(int id) {
+    public void delete(String email) {
         try(Connection con = DS.instance.getConnection()) {
-            PreparedStatement ps = con.prepareStatement("DELETE FROM Utilisateur WHERE id = ?");
-            ps.setInt(1, id);
+            PreparedStatement ps = con.prepareStatement("DELETE FROM Utilisateur WHERE email = ?");
+            ps.setString(1, email);
             ps.executeUpdate();
         } catch (Exception e) {
             System.out.println(e.getMessage());
@@ -61,11 +38,10 @@ public class UtilisateurDao {
 
     public void update(Utilisateur utilisateur) {
         try(Connection con = DS.instance.getConnection()) {
-            PreparedStatement ps = con.prepareStatement("UPDATE Utilisateur SET nom = ?, email = ?, motDePasse = ? WHERE id = ?");
+            PreparedStatement ps = con.prepareStatement("UPDATE Utilisateur SET nom = ?, email = ?, motDePasse = ? WHERE email = ?");
             ps.setString(1, utilisateur.getNom());
             ps.setString(2, utilisateur.getEmail());
             ps.setString(3, utilisateur.getMotDePasse());
-            ps.setInt(4, utilisateur.getId());
             ps.executeUpdate();
         } catch (Exception e) {
             System.out.println(e.getMessage());
@@ -74,11 +50,10 @@ public class UtilisateurDao {
 
     public void insert(Utilisateur utilisateur) {
         try(Connection con = DS.instance.getConnection()) {
-            PreparedStatement ps = con.prepareStatement("INSERT INTO Utilisateur (nom, email, mot_de_passe, date_inscription) VALUES (?, ?, MD5(?), ?)");
+            PreparedStatement ps = con.prepareStatement("INSERT INTO Utilisateur (nom, email, motDePasse) VALUES (?, ?, MD5(?))");
             ps.setString(1, utilisateur.getNom());
             ps.setString(2, utilisateur.getEmail());
             ps.setString(3, utilisateur.getMotDePasse());
-            ps.setDate(4, java.sql.Date.valueOf(utilisateur.getDateInscription()));
             ps.executeUpdate();
         } catch (Exception e) {
             System.out.println(e.getMessage());
diff --git a/sae/WEB-INF/vue/CreationFils.jsp b/sae/WEB-INF/vue/CreationFils.jsp
deleted file mode 100644
index 9c0a346..0000000
--- a/sae/WEB-INF/vue/CreationFils.jsp
+++ /dev/null
@@ -1,17 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<!DOCTYPE html>
-<html>
-<head>
-    <title>Liste des Fils</title>
-</head>
-<body>
-    <h1>Créer un nouveau fil de discussion</h1>
-    <form action= "CreateNewFil" method="post">
-    <label for="nom">Nom du fil:</label>
-    <input type="text" id="nom" name="nom" required><br><br>
-    <label for="createur_id">ID du créateur:</label>
-    <input type="number" id="createur_id" name="createur_id"><br><br>
-    <input type="submit" value="Créer">
-    </form>
-</body>
-</html>
\ No newline at end of file
diff --git a/sae/WEB-INF/vue/Liste.jsp b/sae/WEB-INF/vue/Liste.jsp
deleted file mode 100644
index e1b9655..0000000
--- a/sae/WEB-INF/vue/Liste.jsp
+++ /dev/null
@@ -1,22 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
-
-<!DOCTYPE html>
-<html>
-<head>
-    <title>Liste des éléments</title>
-</head>
-<body>
-    <h1>Liste des éléments</h1>
-    <ul>
-        <%
-            for (int i = 0; i < 10; i++) {
-        %>
-            <li><a href="Control?action=vignette&n=<%= i %>">Vignette n°<%= i %></a></li>
-        <%
-            }
-        %>
-    </ul>
-    <br>
-    <a href="Control?action=vignette&n=0">Voir une vignette</a>
-</body>
-</html>
diff --git a/sae/WEB-INF/vue/Vignette.jsp b/sae/WEB-INF/vue/Vignette.jsp
deleted file mode 100644
index b884a73..0000000
--- a/sae/WEB-INF/vue/Vignette.jsp
+++ /dev/null
@@ -1,14 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
-
-<!DOCTYPE html>
-<html>
-<head>
-    <title>Vignette ${index}</title>
-</head>
-<body>
-    <h1>Élément numéro ${index}</h1>
-    <p>${item}</p>
-    <br>
-    <a href="Control?action=liste">Retour à la liste</a>
-</body>
-</html>
diff --git a/sae/WEB-INF/vue/ajoutUtilisateur.jsp b/sae/WEB-INF/vue/ajoutUtilisateur.jsp
index 1f86bb0..0580ca6 100644
--- a/sae/WEB-INF/vue/ajoutUtilisateur.jsp
+++ b/sae/WEB-INF/vue/ajoutUtilisateur.jsp
@@ -1,7 +1,4 @@
 <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
-<%@ page import="modele.Joueur" %>
-<%@ page import="modele.JoueurDao" %>
-
 
 <!DOCTYPE html>
 <html lang="fr">
@@ -16,8 +13,8 @@
         <input type="text" name="nom" id="nom">
         <label for="email">Email</label>
         <input type="email" name="email" id="email">
-        <label for="mdp">Mot de passe</label>
-        <input type="password" name="mdp" id="mdp">
+        <label for="motdepasse">Mot de passe</label>
+        <input type="password" name="motdepasse" id="motdepasse">
         <input type="submit" value="Ajouter">
     </form>
 </body>
diff --git a/sae/WEB-INF/vue/creationFil.jsp b/sae/WEB-INF/vue/creationFil.jsp
new file mode 100644
index 0000000..95a60fc
--- /dev/null
+++ b/sae/WEB-INF/vue/creationFil.jsp
@@ -0,0 +1,20 @@
+<%@ 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>Liste des Fils</title>
+</head>
+<body>
+    <h1>Créer un nouveau fil de discussion</h1>
+    <form action= "creationFil" method="post">
+        <label for="nom">Nom du fil:</label>
+        <input type="text" id="nom" name="nom" required><br><br>
+        <label for="createuremail">ID du créateur:</label>
+        <input type="text" id="createuremail" name="createuremail"><br><br>
+        <input type="submit" value="Créer">
+    </form>
+</body>
+</html>
\ No newline at end of file
diff --git a/sae/WEB-INF/vue/delete.jsp b/sae/WEB-INF/vue/delete.jsp
deleted file mode 100644
index f545277..0000000
--- a/sae/WEB-INF/vue/delete.jsp
+++ /dev/null
@@ -1,18 +0,0 @@
-<%@ 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>Supprimer une partie</title>
-</head>
-<body>
-    <h1>Supprimer une partie</h1>
-    <form action="SupprimerPartie" method="post">
-        <label for="pno">Numéro de partie</label>
-        <input type="number" name="pno" id="pno" required>
-        <input type="submit" value="Supprimer">
-    </form>
-</body>
-</html>
\ No newline at end of file
diff --git a/sae/WEB-INF/vue/edit.jsp b/sae/WEB-INF/vue/edit.jsp
deleted file mode 100644
index ca91f33..0000000
--- a/sae/WEB-INF/vue/edit.jsp
+++ /dev/null
@@ -1,44 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
-<%@ page import="modele.Partie" %>
-<%@ page import="modele.JoueurDao" %>
-<%@ page import="modele.JoueurJdbcDao" %>
-<%@ page import="modele.Joueur" %>
-<%@ page import="java.util.List" %>
-
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>Document</title>
-</head>
-<body>
-    <% 
-        JoueurDao jdao = new JoueurJdbcDao();
-        List<Joueur> joueurs = jdao.findAll();
-        int pno = Integer.parseInt(request.getParameter("pno"));
-    %>
-    <form action="ModifierPartie" method="post">
-        <input type="hidden" name="pno" value="<%= pno %>">
-        <label for="j1">Joueur 1</label>
-        <select name="j1" id="j1">
-            <% for(Joueur j : joueurs) { %>
-                <option value="<%= j.getJno() %>"><%= j.getPseudo() %></option>
-            <% } %>
-        </select>
-        <label for="j2">Joueur 2</label>
-        <select name="j2" id="j2">
-            <% for(Joueur j : joueurs) { %>
-                <option value="<%= j.getJno() %>"><%= j.getPseudo() %></option>
-            <% } %>
-        </select>
-        <input type="date" name="date" id="date">
-        <select name="statut" id="statut">
-            <option value="1">Non commencée</option>
-            <option value="2">En cours</option>
-            <option value="3">Terminée</option>
-        </select>
-        <input type="submit" value="Modifier">
-    </form>
-</body>
-</html>
diff --git a/sae/WEB-INF/vue/list.jsp b/sae/WEB-INF/vue/list.jsp
deleted file mode 100644
index 03ce8b5..0000000
--- a/sae/WEB-INF/vue/list.jsp
+++ /dev/null
@@ -1,40 +0,0 @@
-<%@ page import="java.util.List" %>
-<%@ page import="modele.PartieDAO" %>
-<%@ page import="modele.Partie" %>
-
-<!DOCTYPE html>
-<html lang="fr">
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>Lister les parties</title>
-</head>
-<body>
-    <% 
-        PartieDAO pdao = new PartieDAO();
-        List<Partie> parties = pdao.findAll();
-    %>
-    <h1>Liste des parties</h1>
-    <table>
-        <tr>
-            <th>pno</th>
-            <th>jno1</th>
-            <th>jno2</th>
-            <th>Date</th>
-            <th>Statut</th>
-            <th>Temps</th>
-            <th>Gagnant</th>
-        </tr>
-        <% for (Partie p : parties) { %>
-            <tr>
-                <td><%= p.getPno() %></td>
-                <td><%= p.getJno1() %></td>
-                <td><%= p.getJno2() %></td>
-                <td><%= p.getDate() %></td>
-                <td><%= p.getStatut() %></td>
-                <td><%= p.getTemps() %></td>
-                <td><%= p.getGagnant() %></td>
-            </tr>
-        <% } %>
-</body>
-</html>
\ No newline at end of file
diff --git a/sae/WEB-INF/vue/view.jsp b/sae/WEB-INF/vue/view.jsp
deleted file mode 100644
index 1ab9fd7..0000000
--- a/sae/WEB-INF/vue/view.jsp
+++ /dev/null
@@ -1,38 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
-<%@ page import="modele.Partie" %>
-
-<!DOCTYPE html>
-<html lang="fr">
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>Voir</title>
-</head>
-<body>
-    <%
-        int pno = Integer.parseInt(request.getParameter("pno"));
-        Partie partie = (Partie) request.getAttribute("partie");
-    %>
-    <h1>Données de la partie <%= pno %></h1>
-    <table>
-        <tr>
-            <th>pno</th>
-            <th>jno1</th>
-            <th>jno2</th>
-            <th>Date</th>
-            <th>Statut</th>
-            <th>Temps</th>
-            <th>Gagnant</th>
-        </tr>
-        <tr>
-            <td><%= partie.getPno() %></td>
-            <td><%= partie.getJno1() %></td>
-            <td><%= partie.getJno2() %></td>
-            <td><%= partie.getDate() %></td>
-            <td><%= partie.getStatut() %></td>
-            <td><%= partie.getTemps() %></td>
-            <td><%= partie.getGagnant() %></td>
-        </tr>
-    </table>
-</body>
-</html>
\ No newline at end of file
diff --git a/script.sql b/script.sql
index ee07022..96061b5 100644
--- a/script.sql
+++ b/script.sql
@@ -4,110 +4,124 @@ DROP TABLE IF EXISTS FilDeDiscussion;
 DROP TABLE IF EXISTS Utilisateur;
 
 CREATE TABLE Utilisateur (
-    id SERIAL PRIMARY KEY,
-    nom VARCHAR(100) NOT NULL,
     email VARCHAR(100) UNIQUE NOT NULL,
-    mot_de_passe VARCHAR(255) NOT NULL,
-    date_inscription TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+    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 PRIMARY KEY,
+    id SERIAL,
     nom VARCHAR(100) NOT NULL,
-    date_creation TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-    createur_id INTEGER,
-    CONSTRAINT fk_createur FOREIGN KEY (createur_id) REFERENCES Utilisateur(id)
+    dateCreation TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+    createurEmail VARCHAR(100),
+    CONSTRAINT pk_fil PRIMARY KEY (id),
+    CONSTRAINT fk_createur FOREIGN KEY (createurEmail) REFERENCES Utilisateur(email)
         ON DELETE SET NULL
 );
 
 CREATE TABLE Message (
-    id SERIAL PRIMARY KEY,
+    id SERIAL,
     contenu TEXT NOT NULL,
-    date_publication TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-    fil_id INTEGER,
-    auteur_id INTEGER,
-    CONSTRAINT fk_fil FOREIGN KEY (fil_id) REFERENCES FilDeDiscussion(id)
+    datePublication TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+    filId INTEGER,
+    auteurEmail VARCHAR(100),
+    CONSTRAINT pk_message PRIMARY KEY (id),
+    CONSTRAINT fk_fil FOREIGN KEY (filId) REFERENCES FilDeDiscussion(id)
         ON DELETE CASCADE,
-    CONSTRAINT fk_auteur FOREIGN KEY (auteur_id) REFERENCES Utilisateur(id)
+    CONSTRAINT fk_auteur FOREIGN KEY (auteurEmail) REFERENCES Utilisateur(email)
         ON DELETE SET NULL
 );
 
 CREATE TABLE Abonnement (
-    utilisateur_id INTEGER,
-    fil_id INTEGER,
-    date_abonnement TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-    CONSTRAINT pk_abonnement PRIMARY KEY (utilisateur_id, fil_id),
-    CONSTRAINT fk_utilisateur FOREIGN KEY (utilisateur_id) REFERENCES Utilisateur(id)
+    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 (fil_id) REFERENCES FilDeDiscussion(id)
+    CONSTRAINT fk_fil FOREIGN KEY (filId) REFERENCES FilDeDiscussion(id)
         ON DELETE CASCADE
 );
 
-INSERT INTO Utilisateur (nom, email, mot_de_passe) VALUES
-('Alice', 'alice@example.com', MD5('password1')),
-('Bob', 'bob@example.com', MD5('password2')),
-('Charlie', 'charlie@example.com', MD5('password3'));
+INSERT INTO Utilisateur (email, nom, motDePasse)
+VALUES ('utilisateur1@exemple.com', 'Utilisateur 1', MD5('motdepasse123'));
 
-INSERT INTO FilDeDiscussion (nom, createur_id) VALUES
-('Discussion Générale', 1),
-('Projet Informatique', 2);
+INSERT INTO FilDeDiscussion (nom, createurEmail)
+VALUES ('Discussion Générale', 'utilisateur1@exemple.com');
 
-INSERT INTO Message (contenu, fil_id, auteur_id) VALUES
-('Bonjour tout le monde !', 1, 1),
-('Salut, quelqu''un peut m''aider avec ce projet ?', 2, 2);
+INSERT INTO Message (contenu, filId, auteurEmail)
+VALUES ('Bonjour, ceci est mon premier message !', 1, 'utilisateur1@exemple.com');
 
-INSERT INTO Abonnement (utilisateur_id, fil_id) VALUES
-(1, 1),
-(2, 1),
-(3, 2);
+INSERT INTO Abonnement (utilisateurEmail, filId)
+VALUES ('utilisateur1@exemple.com', 1);
 
--- Lister tous les utilisateurs
+-- Lister tous les utilisateurs :
 
 -- SELECT * FROM Utilisateur;
 
--- Lister tous les fils de discussion créés par un utilisateur donné
+-- Lister tous les fils de discussion avec le nom du créateur :
 
--- SELECT * FROM FilDeDiscussion WHERE createur_id = 1;
+-- 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 donné
+-- Lister tous les messages d'un fil de discussion spécifique avec le nom de l'auteur :
 
--- SELECT * FROM Message WHERE fil_id = 1 ORDER BY date_publication;
+-- 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 abonnés d'un fil de discussion donné
+-- Lister tous les abonnements d'un utilisateur spécifique :
 
--- SELECT u.* FROM Utilisateur u
--- JOIN Abonnement a ON u.id = a.utilisateur_id
--- WHERE a.fil_id = 1;
+-- 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 tous les fils de discussion auxquels un utilisateur est abonné
+-- Lister les fils de discussion auxquels un utilisateur n'est pas abonné :
 
--- SELECT f.* FROM FilDeDiscussion f
--- JOIN Abonnement a ON f.id = a.fil_id
--- WHERE a.utilisateur_id = 1;
+-- 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;
 
--- Lister les 5 derniers messages postés dans tous les fils de discussion
+-- Compter le nombre de messages par fil de discussion :
 
--- SELECT * FROM Message ORDER BY date_publication DESC LIMIT 5;
+-- 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;
 
--- Lister les fils de discussion avec le nombre de messages
+-- Trouver les utilisateurs qui ont publié des messages dans un fil spécifique :
 
--- SELECT f.id, f.nom, COUNT(m.id) AS nombre_messages
--- FROM FilDeDiscussion f
--- LEFT JOIN Message m ON f.id = m.fil_id
--- GROUP BY f.id, f.nom;
+-- SELECT DISTINCT u.nom, u.email
+-- FROM Utilisateur u
+-- JOIN Message m ON u.email = m.auteurEmail
+-- WHERE m.filId = 1;
 
--- Lister les utilisateurs qui ne sont abonnés à aucun fil de discussion
+-- Lister les 5 derniers messages publiés dans un fil de discussion :
 
--- SELECT u.* FROM Utilisateur u
--- LEFT JOIN Abonnement a ON u.id = a.utilisateur_id
--- WHERE a.fil_id IS NULL;
+-- 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;
 
--- Lister les fils de discussion sans messages
+-- Compter le nombre d'abonnés par fil de discussion :
 
--- SELECT f.* FROM FilDeDiscussion f
--- LEFT JOIN Message m ON f.id = m.fil_id
--- WHERE m.id IS NULL;
+-- 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 messages postés par un utilisateur donné
+-- Lister les utilisateurs qui ne sont abonnés à aucun fil de discussion :
 
--- SELECT * FROM Message WHERE auteur_id = 1 ORDER BY date_publication;
\ No newline at end of file
+-- 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
-- 
GitLab