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