Skip to content
Snippets Groups Projects
Commit 1aa3a0bd authored by Othemane KHACHNANE's avatar Othemane KHACHNANE
Browse files

à finir les likes

parent 5cd43efb
Branches
No related tags found
No related merge requests found
File added
......@@ -22,6 +22,8 @@ import modele.FilDeDiscussionDAO;
import modele.Message;
import modele.MessageDao;
//http GET http://localhost:8080/sae/getFils Cookie:"JSESSIONID=ton_session_id" --> F12>Storage>JSESSIONID
@WebServlet("/getFils")
public class GetFils extends HttpServlet {
@Override
......
package controleur;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import modele.MessageDao;
@WebServlet("/Like")
public class Like extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
String userEmail = (String) req.getSession().getAttribute("email");
if (userEmail == null) {
res.sendRedirect(req.getContextPath() + "/login");
return;
}
int messageId = Integer.parseInt(req.getParameter("messageId"));
MessageDao messageDao = new MessageDao();
if (req.getParameter("like") != null) {
messageDao.like(messageId, userEmail);
} else {
messageDao.unlike(messageId, userEmail);
}
res.sendRedirect(req.getHeader("Referer"));
//TODO: Implement the like and unlike methods in MessageDao
}
}
......@@ -15,9 +15,9 @@ public class DS {
}
public Connection getConnection() {
String url = "jdbc:postgresql://localhost:5432/postgres";
String login = "postgres";
String pwd = "";
String url = "jdbc:postgresql://psqlserv/but2";
String login = "othemanekhachnaneetu";
String pwd = "moi";
Connection con = null;
try {
con = DriverManager.getConnection(url, login, pwd);
......@@ -26,4 +26,4 @@ public class DS {
}
return con;
}
}
}
\ No newline at end of file
......@@ -12,17 +12,20 @@ public class Message {
private int filId;
private String auteurEmail;
private String fileName;
private int likeCount;
public Message() {
}
public Message(int id, String contenu, LocalDateTime datePublication, int filId, String auteurEmail, String fileName) {
public Message(int id, String contenu, LocalDateTime datePublication, int filId, String auteurEmail,
String fileName) {
this.id = id;
this.contenu = contenu;
this.datePublication = datePublication;
this.filId = filId;
this.auteurEmail = auteurEmail;
this.fileName = fileName;
this.likeCount = 0;
}
public int getId() {
......@@ -73,8 +76,17 @@ public class Message {
this.fileName = fileName;
}
public int getLikeCount() {
return likeCount;
}
public void setLikeCount(int likeCount) {
this.likeCount = likeCount;
}
@Override
public String toString() {
return "Message{" + "id=" + id + ", contenu=" + contenu + ", datePublication=" + datePublication + ", filId=" + filId + ", auteurEmail=" + auteurEmail + '}';
return "Message{" + "id=" + id + ", contenu=" + contenu + ", datePublication=" + datePublication + ", filId="
+ filId + ", auteurEmail=" + auteurEmail + "like" + likeCount + '}';
}
}
......@@ -21,6 +21,7 @@ public class MessageDao {
message.setFilId(rs.getInt("filId"));
message.setAuteurEmail(rs.getString("auteurEmail"));
message.setFileName(rs.getString("fileName"));
message.setLikeCount(rs.getInt("likeCount"));
} else {
System.out.println("Message inexistant");
}
......@@ -43,6 +44,7 @@ public class MessageDao {
message.setFilId(rs.getInt("filId"));
message.setAuteurEmail(rs.getString("auteurEmail"));
message.setFileName(rs.getString("fileName"));
message.setLikeCount(rs.getInt("likeCount"));
messages.add(message);
}
} catch (Exception e) {
......@@ -65,6 +67,7 @@ public class MessageDao {
message.setFilId(rs.getInt("filId"));
message.setAuteurEmail(rs.getString("auteurEmail"));
message.setFileName(rs.getString("fileName"));
message.setLikeCount(rs.getInt("likeCount"));
messages.add(message);
}
} catch (Exception e) {
......@@ -112,4 +115,37 @@ public class MessageDao {
System.out.println(e.getMessage());
}
}
public boolean like(int id, String email) {
boolean liked = false;
try(Connection con = DS.instance.getConnection()) {
PreparedStatement ps = con.prepareStatement("SELECT * FROM like WHERE messageid = ? AND auteuremail = ?");
ps.setInt(1, id);
ps.setString(2, email);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
liked = true;
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
return liked;
}
public boolean unlike(int id, String email) {
boolean unliked = false;
try(Connection con = DS.instance.getConnection()) {
PreparedStatement ps = con.prepareStatement("SELECT * FROM like WHERE messageid = ? AND auteuremail = ?");
ps.setInt(1, id);
ps.setString(2, email);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
unliked = true;
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
return unliked;
}
}
javac -d WEB-INF/classes -cp ../../lib/servlet-api.jar:../../lib/commons-lang3-3.17.0.jar:../../lib/commons-text-1.13.0.jar:../../lib/jackson-datatype-jsr310-2.13.0.jar:../../lib/jackson-annotations-2.15.3.jar:../../lib/jackson-core-2.15.3.jar:../../lib/jackson-databind-2.15.3.jar:../../lib/jackson-dataformat-xml-2.15.3.jar WEB-INF/src/controleur/*.java WEB-INF/src/modele/*.java
DROP TABLE IF EXISTS Abonnement;
DROP TABLE IF EXISTS Message;
DROP TABLE IF EXISTS FilDeDiscussion;
DROP TABLE IF EXISTS Utilisateur;
CREATE TABLE Utilisateur (
email VARCHAR(100) UNIQUE NOT NULL,
nom VARCHAR(100) NOT NULL,
motDePasse VARCHAR(255) NOT NULL,
dateInscription TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT pk_utilisateur PRIMARY KEY (email)
);
CREATE TABLE FilDeDiscussion (
id SERIAL,
nom VARCHAR(100) NOT NULL,
dateCreation TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
createurEmail VARCHAR(100),
description TEXT,
CONSTRAINT pk_fil PRIMARY KEY (id),
CONSTRAINT fk_createur FOREIGN KEY (createurEmail) REFERENCES Utilisateur(email)
ON DELETE SET NULL
);
CREATE TABLE Message (
id SERIAL,
contenu TEXT NOT NULL,
datePublication TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
filId INTEGER,
auteurEmail VARCHAR(100),
fileName VARCHAR(255),
likeCount Boolean DEFAULT FALSE,
CONSTRAINT pk_message PRIMARY KEY (id),
CONSTRAINT fk_fil FOREIGN KEY (filId) REFERENCES FilDeDiscussion(id)
ON DELETE CASCADE,
CONSTRAINT fk_auteur FOREIGN KEY (auteurEmail) REFERENCES Utilisateur(email)
ON DELETE SET NULL
);
CREATE TABLE Abonnement (
utilisateurEmail VARCHAR(100),
filId INTEGER,
dateAbonnement TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT pk_abonnement PRIMARY KEY (utilisateurEmail, filId),
CONSTRAINT fk_utilisateur FOREIGN KEY (utilisateurEmail) REFERENCES Utilisateur(email)
ON DELETE CASCADE,
CONSTRAINT fk_fil FOREIGN KEY (filId) REFERENCES FilDeDiscussion(id)
ON DELETE CASCADE
);
-- Insertion des utilisateurs
INSERT INTO Utilisateur (email, nom, motDePasse)
VALUES
('utilisateur1@exemple.com', 'Utilisateur 1', MD5('motdepasse123')),
('utilisateur2@exemple.com', 'Utilisateur 2', MD5('motdepasse123')),
('utilisateur3@exemple.com', 'Utilisateur 3', MD5('motdepasse123'));
-- Insertion des fils de discussion
INSERT INTO FilDeDiscussion (nom, createurEmail, description)
VALUES
('Discussion Générale', 'utilisateur1@exemple.com', 'Un fil pour discuter de tout et de rien.'),
('Tech Talk', 'utilisateur2@exemple.com', 'Discussions sur les dernières technologies.'),
('Sports', 'utilisateur3@exemple.com', 'Discussions sur les sports et les événements sportifs.');
-- Insertion des messages
INSERT INTO Message (contenu, filId, auteurEmail, fileName) VALUES
('Bonjour, ceci est mon premier message !', 1, 'utilisateur1@exemple.com', NULL),
('Quelquun a des nouvelles sur la dernière mise à jour de Java ?', 2, 'utilisateur2@exemple.com', NULL),
('Qui a regardé le match hier soir ?', 3, 'utilisateur3@exemple.com', NULL),
('Bienvenue à tous dans ce fil de discussion !', 1, 'utilisateur2@exemple.com', NULL),
('Je pense que la nouvelle version de Python est géniale.', 2, 'utilisateur3@exemple.com', NULL),
('Le match était incroyable, quelle performance !', 3, 'utilisateur1@exemple.com', NULL);
-- Insertion des abonnements
INSERT INTO Abonnement (utilisateurEmail, filId)
VALUES
('utilisateur1@exemple.com', 1),
('utilisateur1@exemple.com', 2),
('utilisateur2@exemple.com', 1),
('utilisateur2@exemple.com', 3),
('utilisateur3@exemple.com', 2),
('utilisateur3@exemple.com', 3);
-- Lister tous les utilisateurs :
-- SELECT * FROM Utilisateur;
-- Lister tous les fils de discussion avec le nom du créateur :
-- SELECT f.id, f.nom, u.nom AS nomCreateur
-- FROM FilDeDiscussion f
-- JOIN Utilisateur u ON f.createurEmail = u.email;
-- Lister tous les messages d'un fil de discussion spécifique avec le nom de l'auteur :
-- SELECT m.contenu, u.nom AS nomAuteur, m.datePublication
-- FROM Message m
-- JOIN Utilisateur u ON m.auteurEmail = u.email
-- WHERE m.filId = 1
-- ORDER BY m.datePublication;
-- Lister tous les abonnements d'un utilisateur spécifique :
-- SELECT f.nom AS nomFil, a.dateAbonnement
-- FROM Abonnement a
-- JOIN FilDeDiscussion f ON a.filId = f.id
-- WHERE a.utilisateurEmail = 'utilisateur1@exemple.com';
-- Lister les fils de discussion auxquels un utilisateur n'est pas abonné :
-- SELECT f.id, f.nom
-- FROM FilDeDiscussion f
-- LEFT JOIN Abonnement a ON f.id = a.filId AND a.utilisateurEmail = 'utilisateur1@exemple.com'
-- WHERE a.utilisateurEmail IS NULL;
-- Compter le nombre de messages par fil de discussion :
-- SELECT f.nom AS nomFil, COUNT(m.id) AS nombreMessages
-- FROM FilDeDiscussion f
-- LEFT JOIN Message m ON f.id = m.filId
-- GROUP BY f.nom;
-- Trouver les utilisateurs qui ont publié des messages dans un fil spécifique :
-- SELECT DISTINCT u.nom, u.email
-- FROM Utilisateur u
-- JOIN Message m ON u.email = m.auteurEmail
-- WHERE m.filId = 1;
-- Lister les 5 derniers messages publiés dans un fil de discussion :
-- SELECT m.contenu, u.nom AS nomAuteur, m.datePublication
-- FROM Message m
-- JOIN Utilisateur u ON m.auteurEmail = u.email
-- WHERE m.filId = 1
-- ORDER BY m.datePublication DESC
-- LIMIT 5;
-- Compter le nombre d'abonnés par fil de discussion :
-- SELECT f.nom AS nomFil, COUNT(a.utilisateurEmail) AS nombreAbonnes
-- FROM FilDeDiscussion f
-- LEFT JOIN Abonnement a ON f.id = a.filId
-- GROUP BY f.nom;
-- Lister les utilisateurs qui ne sont abonnés à aucun fil de discussion :
-- SELECT u.email, u.nom
-- FROM Utilisateur u
-- LEFT JOIN Abonnement a ON u.email = a.utilisateurEmail
-- WHERE a.utilisateurEmail IS NULL;
\ No newline at end of file
sae/uploads/Abr.png

22.2 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment