diff --git a/commons-lang3-3.17.0.jar b/commons-lang3-3.17.0.jar deleted file mode 100644 index f6486b4d7039f22ccf160c8d24ebac26f05bf0de..0000000000000000000000000000000000000000 Binary files a/commons-lang3-3.17.0.jar and /dev/null differ diff --git a/commons-text-1.13.0.jar b/commons-text-1.13.0.jar deleted file mode 100644 index a8231464949d5e7fb71a14e044767ad1bfa4c27d..0000000000000000000000000000000000000000 Binary files a/commons-text-1.13.0.jar and /dev/null differ diff --git a/jackson-datatype-jsr310-2.13.0.jar b/jackson-datatype-jsr310-2.13.0.jar deleted file mode 100644 index aabe23dc082d45f8f47890e6a07001690f806437..0000000000000000000000000000000000000000 Binary files a/jackson-datatype-jsr310-2.13.0.jar and /dev/null differ diff --git a/sae/WEB-INF/vue/accueil.jsp b/sae/WEB-INF/vue/accueil.jsp index 0cfb583d5ee2672e2f61b8fc3ec4cce218ad0be1..7a8f0a32c6dc195b5e39a899e204106c1b70888b 100644 --- a/sae/WEB-INF/vue/accueil.jsp +++ b/sae/WEB-INF/vue/accueil.jsp @@ -35,45 +35,47 @@ <body> <nav class="navbar navbar-expand-lg navbar-light bg-light"> <a class="navbar-brand" href="#">CampusTalk</a> - <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> + <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" + aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav ml-auto"> <li class="nav-item"> - <a class="nav-link btn btn-danger text-white" href="<%= request.getContextPath() %>/logout">Se déconnecter</a> + <a class="nav-link btn btn-danger text-white" href="<%= request.getContextPath() %>/logout">Se + déconnecter</a> </li> </ul> </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); + <% 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="welcome-container text-center"> - <h2>Bienvenue sur CampusTalk</h2> - <p>Bonjour, <%= username %> !</p> - <p>Vous êtes connecté en tant que <%= email %></p> - <a href="<%= request.getContextPath() %>/listerFil" class="btn btn-primary mt-4">Voir les autres fils de discussion</a> - </div> - <div class="welcome-container mt-4"> - <h3>Vos abonnements</h3> - <ul class="list-group"> - <% for (Abonnement abo : abonnements) { %> - <li class="list-group-item"> - <a href="<%= request.getContextPath() %>/fil?id=<%= abo.getIdFil() %>"><%= fdao.findById(abo.getIdFil()).getNom() %></a> - </li> - <% } %> - </ul> - </div> - - <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script> - <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js"></script> - <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> -</body> + %> + <div class="welcome-container text-center"> + <h2>Bienvenue sur CampusTalk</h2> + <p>Bonjour, <%= username %> !</p> + <p>Vous êtes connecté en tant que <%= email %> + </p> + <a href="<%= request.getContextPath() %>/listerFil" class="btn btn-primary mt-4">Voir les autres fils de + discussion</a> + </div> + <div class="welcome-container mt-4"> + <h3>Vos abonnements</h3> + <ul class="list-group"> + <% for (Abonnement abo : abonnements) { %> + <li class="list-group-item"> + <a href="<%= request.getContextPath() %>/fil?id=<%= abo.getIdFil() %>"> + <%= fdao.findById(abo.getIdFil()).getNom() %> + </a> + </li> + <% } %> + </ul> + </div> + + <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script> + <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js"></script> + <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> + </body> </html> \ No newline at end of file diff --git a/sae/WEB-INF/vue/creerFil.jsp b/sae/WEB-INF/vue/creerFil.jsp index 253ef0df296d1ed48c617725b9d65c73dc588151..ff8935a66a17bbdca792b885ebe92301ae0eada1 100644 --- a/sae/WEB-INF/vue/creerFil.jsp +++ b/sae/WEB-INF/vue/creerFil.jsp @@ -30,49 +30,49 @@ <body> <nav class="navbar navbar-expand-lg navbar-light bg-light"> <a class="navbar-brand" href="#">CampusTalk</a> - <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> + <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" + aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav ml-auto"> <li class="nav-item"> - <a class="nav-link btn btn-danger text-white" href="<%= request.getContextPath() %>/logout">Se déconnecter</a> + <a class="nav-link btn btn-danger text-white" href="<%= request.getContextPath() %>/logout">Se + déconnecter</a> </li> </ul> </div> </nav> <div class="container"> <div class="text-center mb-4"> - <a href="<%= request.getContextPath() %>/listerFil" class="btn btn-primary">Retour aux fils de discussion</a> + <a href="<%= request.getContextPath() %>/listerFil" class="btn btn-primary">Retour aux fils de + discussion</a> </div> - <% - if (request.getAttribute("error") != null) { - %> + <% if (request.getAttribute("error") !=null) { %> <div class="alert alert-danger" role="alert"> <%= request.getAttribute("error") %> </div> - <% - } - %> + <% } %> - <div class="form-container"> - <h1 class="text-center">Créer un nouveau fil de discussion</h1> - <form action="creerFil" method="post" class="mt-4"> - <div class="form-group"> - <label for="nom">Nom du fil:</label> - <input type="text" class="form-control" id="nom" name="nom" required> + <div class="form-container"> + <h1 class="text-center">Créer un nouveau fil de discussion</h1> + <form action="creerFil" method="post" class="mt-4"> + <div class="form-group"> + <label for="nom">Nom du fil:</label> + <input type="text" class="form-control" id="nom" name="nom" required> + </div> + <div class="form-group"> + <label for="createuremail">Email du créateur:</label> + <input type="email" class="form-control" id="createuremail" name="createuremail" required> + </div> + <div class="form-group"> + <label for="description">Description:</label> + <textarea class="form-control" id="description" name="description" rows="3" + required></textarea> + <button type="submit" class="btn btn-primary btn-block">Créer</button> + </form> </div> - <div class="form-group"> - <label for="createuremail">Email du créateur:</label> - <input type="email" class="form-control" id="createuremail" name="createuremail" required> - </div> - <div class="form-group"> - <label for="description">Description:</label> - <textarea class="form-control" id="description" name="description" rows="3" required></textarea> - <button type="submit" class="btn btn-primary btn-block">Créer</button> - </form> - </div> </div> <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script> diff --git a/sae/WEB-INF/vue/fil.jsp b/sae/WEB-INF/vue/fil.jsp index aeb1d6a17e4c75432f0eb7dbc1f65a52f4b5115b..f5feef242dcfe8a8766f4d0c2c9c46ca1db6fd32 100644 --- a/sae/WEB-INF/vue/fil.jsp +++ b/sae/WEB-INF/vue/fil.jsp @@ -1,4 +1,4 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ page language="java" contentType="text/html; ch</div>arset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="modele.FilDeDiscussion" %> <%@ page import="modele.FilDeDiscussionDAO" %> <%@ page import="modele.Message" %> @@ -107,13 +107,15 @@ <body> <nav class="navbar navbar-expand-lg"> <a class="navbar-brand" href="#">CampusTalk</a> - <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> + <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" + aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav ml-auto"> <li class="nav-item"> - <a class="nav-link btn btn-danger text-white" href="<%= request.getContextPath() %>/logout">Se déconnecter</a> + <a class="nav-link btn btn-danger text-white" href="<%= request.getContextPath() %>/logout">Se + déconnecter</a> </li> </ul> </div> @@ -122,63 +124,69 @@ <a href="<%= request.getContextPath() %>/listerFil" class="btn btn-primary">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(); + <% 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="thread-container"> - <h2 class="text-center"><%= fil.getNom() %></h2> - <div class="messages-box" id="messages-box"> - <% for (Message m : messages) { - LocalDateTime datePublication = m.getDatePublication(); - String formattedDate = (datePublication != null) ? datePublication.format(formatter) : "Date non disponible"; - %> - <div class="message-item"> - <div class="avatar"> - <img src="https://www.gravatar.com/avatar/<%= m.getAuteurEmail().hashCode() %>?d=identicon&s=40" alt="Avatar"> - </div> - <div class="message-content"> - <h4><%= mdao.findUserName(m.getAuteurEmail()) %></h4> - <p class="message-date"><%= formattedDate %></p> - <p><%= m.getContenu() %></p> - <% if (m.getFileName() != null) { %> - <img src="<%= request.getContextPath() %>/uploads/<%= m.getFileName() %>" alt="Image" class="img-fluid mt-2"> + <div class="thread-container"> + <h2 class="text-center"> + <%= fil.getNom() %> + </h2> + <div class="messages-box" id="messages-box"> + <% for (Message m : messages) { LocalDateTime datePublication=m.getDatePublication(); String + formattedDate=(datePublication !=null) ? datePublication.format(formatter) : "Date non disponible" ; + %> + <div class="message-item"> + <div class="avatar"> + <img src="https://www.gravatar.com/avatar/<%= m.getAuteurEmail().hashCode() %>?d=identicon&s=40" + alt="Avatar"> + </div> + <div class="message-content"> + <h4> + <%= mdao.findUserName(m.getAuteurEmail()) %> + </h4> + <p class="message-date"> + <%= formattedDate %> + </p> + <p> + <%= m.getContenu() %> + </p> + <% if (m.getFileName() !=null) { %> + <img src="<%= request.getContextPath() %>/uploads/<%= m.getFileName() %>" alt="Image" + class="img-fluid mt-2"> + <% } %> + </div> + </div> <% } %> - </div> </div> - <% } %> - </div> + - <div class="message-form"> - <form action="envoyerMessage" method="post" enctype="multipart/form-data"> - <div class="form-group"> - <label for="contenu">Votre message :</label> - <textarea class="form-control" id="contenu" name="contenu" rows="3" required></textarea> - </div> - <div class="form-group"> - <label for="file">Ajouter une image :</label> - <input type="file" class="form-control-file" id="file" name="file"> - </div> - <input type="hidden" name="filId" value="<%= id %>"> - <button type="submit" class="btn btn-primary">Envoyer</button> - </form> + <div class="message-form"> + <form action="envoyerMessage" method="post" enctype="multipart/form-data"> + <div class="form-group"> + <label for="contenu">Votre message :</label> + <textarea class="form-control" id="contenu" name="contenu" rows="3" required></textarea> + </div> + <div class="form-group"> + <label for="file">Ajouter une image :</label> + <input type="file" class="form-control-file" id="file" name="file"> + </div> + <input type="hidden" name="filId" value="<%= id %>"> + <button type="submit" class="btn btn-primary">Envoyer</button> + </form> + </div> </div> - </div> - <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script> - <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js"></script> - <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> - <script> - window.onload = function() { - let messagesBox = document.getElementById('messages-box'); - messagesBox.scrollTop = messagesBox.scrollHeight; - }; - </script> + <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script> + <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js"></script> + <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> + <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/sae/WEB-INF/vue/listerFil.jsp b/sae/WEB-INF/vue/listerFil.jsp index f36b805e9305282ae1dcdad3b7873edae5fe90b4..ea6b0eb3065c9b57e319f476c46c8b7ce1d442cd 100644 --- a/sae/WEB-INF/vue/listerFil.jsp +++ b/sae/WEB-INF/vue/listerFil.jsp @@ -49,13 +49,15 @@ <body> <nav class="navbar navbar-expand-lg navbar-light bg-light"> <a class="navbar-brand" href="#">CampusTalk</a> - <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> + <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" + aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav ml-auto"> <li class="nav-item"> - <a class="nav-link btn btn-danger text-white" href="<%= request.getContextPath() %>/logout">Se déconnecter</a> + <a class="nav-link btn btn-danger text-white" href="<%= request.getContextPath() %>/logout">Se + déconnecter</a> </li> </ul> </div> @@ -67,9 +69,7 @@ </div> <div class="thread-container"> <h2 class="text-center">Fils de Discussion</h2> - <% - String email = (String) session.getAttribute("email"); - AbonnementDao adao = new AbonnementDao(); + <% 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) { @@ -79,20 +79,22 @@ FilDeDiscussionDAO fddao = new FilDeDiscussionDAO(); for (FilDeDiscussion f : fddao.findAll()) { if (!abonnementsIds.contains(f.getId())) { - %> - <div class="thread-item"> - <h4 class="d-flex justify-content-between align-items-center"> - <p class="thread-name mb-0"><%= f.getNom() %></p> - <a href="<%= request.getContextPath() %>/suivreFil?id=<%= f.getId() %>" class="btn btn-primary btn-sm">Suivre</a> - </h4> - <% if (f.getDescription() != null) { %> - <p class="thread-description"><%= f.getDescription() %></p> - <% } %> - </div> - <% - } - } - %> + %> + <div class="thread-item"> + <h4 class="d-flex justify-content-between align-items-center"> + <p class="thread-name mb-0"> + <%= f.getNom() %> + </p> + <a href="<%= request.getContextPath() %>/suivreFil?id=<%= f.getId() %>" + class="btn btn-primary btn-sm">Suivre</a> + </h4> + <% if (f.getDescription() !=null) { %> + <p class="thread-description"> + <%= f.getDescription() %> + </p> + <% } %> + </div> + <% } } %> </div> </div> diff --git a/sae/WEB-INF/vue/login.jsp b/sae/WEB-INF/vue/login.jsp index 0d06c71265a2fa165509eea5c36a5159f8d1638a..1cd2962c118514d431336c7080baf4578fbb583e 100644 --- a/sae/WEB-INF/vue/login.jsp +++ b/sae/WEB-INF/vue/login.jsp @@ -29,7 +29,8 @@ <body> <nav class="navbar navbar-expand-lg navbar-light bg-light"> <a class="navbar-brand" href="#">CampusTalk</a> - <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> + <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" + aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> </nav> @@ -38,11 +39,13 @@ <form action="login" method="post"> <div class="form-group"> <label for="email">Adresse e-mail</label> - <input type="email" class="form-control" name="email" id="email" placeholder="Entrez votre e-mail" required> + <input type="email" class="form-control" name="email" id="email" placeholder="Entrez votre e-mail" + required> </div> <div class="form-group"> <label for="motdepasse">Mot de passe</label> - <input type="password" class="form-control" name="motdepasse" id="motdepasse" placeholder="Entrez votre mot de passe" required> + <input type="password" class="form-control" name="motdepasse" id="motdepasse" + placeholder="Entrez votre mot de passe" required> </div> <button type="submit" class="btn btn-primary btn-block">Se connecter</button> </form> diff --git a/sae/WEB-INF/vue/register.jsp b/sae/WEB-INF/vue/register.jsp index 2a9122247f6920761a46e742fcdf952dacfd408c..d0e671f7a71bb689402d4acc6c4536e0fea0b850 100644 --- a/sae/WEB-INF/vue/register.jsp +++ b/sae/WEB-INF/vue/register.jsp @@ -29,36 +29,39 @@ <body> <nav class="navbar navbar-expand-lg navbar-light bg-light"> <a class="navbar-brand" href="#">CampusTalk</a> - <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> + <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" + aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> </nav> <div class="register-container"> <h2 class="text-center">Inscription</h2> - <% if (request.getAttribute("error") != null) { %> + <% if (request.getAttribute("error") !=null) { %> <div class="alert alert-danger" role="alert"> <%= request.getAttribute("error") %> </div> - <% request.removeAttribute("error"); - } %> - <form action="register" method="post"> - <div class="form-group"> - <label for="nom">Nom</label> - <input type="text" class="form-control" name="nom" id="nom" placeholder="Entrez votre nom" required> - </div> - <div class="form-group"> - <label for="email">Adresse e-mail</label> - <input type="email" class="form-control" name="email" id="email" placeholder="Entrez votre e-mail" required> - </div> - <div class="form-group"> - <label for="motdepasse">Mot de passe</label> - <input type="password" class="form-control" name="motdepasse" id="motdepasse" placeholder="Choisissez un mot de passe" required> - </div> - <button type="submit" class="btn btn-primary btn-block">S'inscrire</button> - </form> - <div class="text-center mt-3"> - <p>Vous avez déjà un compte ? <a href="<%= request.getContextPath() %>/login">Se connecter</a></p> - </div> + <% request.removeAttribute("error"); } %> + <form action="register" method="post"> + <div class="form-group"> + <label for="nom">Nom</label> + <input type="text" class="form-control" name="nom" id="nom" placeholder="Entrez votre nom" + required> + </div> + <div class="form-group"> + <label for="email">Adresse e-mail</label> + <input type="email" class="form-control" name="email" id="email" + placeholder="Entrez votre e-mail" required> + </div> + <div class="form-group"> + <label for="motdepasse">Mot de passe</label> + <input type="password" class="form-control" name="motdepasse" id="motdepasse" + placeholder="Choisissez un mot de passe" required> + </div> + <button type="submit" class="btn btn-primary btn-block">S'inscrire</button> + </form> + <div class="text-center mt-3"> + <p>Vous avez déjà un compte ? <a href="<%= request.getContextPath() %>/login">Se connecter</a></p> + </div> </div> <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script> diff --git a/script.sql b/script.sql index fe167bc1442c5a52e57dd82286514c38dab706ae..cad3f5425bf61419a9aeaef229ebfa9a1a17342f 100644 --- a/script.sql +++ b/script.sql @@ -47,17 +47,38 @@ CREATE TABLE Abonnement ( ON DELETE CASCADE ); +-- Insertion des utilisateurs INSERT INTO Utilisateur (email, nom, motDePasse) -VALUES ('utilisateur1@exemple.com', 'Utilisateur 1', MD5('motdepasse123')); - -INSERT INTO FilDeDiscussion (nom, createurEmail) -VALUES ('Discussion Générale', 'utilisateur1@exemple.com'); - -INSERT INTO Message (contenu, filId, auteurEmail) -VALUES ('Bonjour, ceci est mon premier message !', 1, 'utilisateur1@exemple.com'); - +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); +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 :