From 93d667744999ac1308c956dbb4232e66d388c13f Mon Sep 17 00:00:00 2001 From: kmitresse Date: Fri, 26 Apr 2024 22:17:15 +0200 Subject: [PATCH] feat: devWeb - update profile page --- .../java/uppa/project/bean/ProfileBean.java | 106 +++++++++ .../java/uppa/project/database/pojo/Game.java | 18 ++ .../project/web/servlet/ProfileServlet.java | 39 ++++ .../src/main/webapp/WEB-INF/pages/profile.jsp | 109 +++------ .../WEB-INF/tags/components/statistics.tag | 64 ++++++ .../webapp/WEB-INF/tags/forms/profile.tag | 206 +++++++++++++++++- .../WEB-INF/tags/forms/reset-password.tag | 37 +++- 7 files changed, 491 insertions(+), 88 deletions(-) create mode 100644 S2/DevWeb/Projet/src/main/java/uppa/project/bean/ProfileBean.java create mode 100644 S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/components/statistics.tag diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/bean/ProfileBean.java b/S2/DevWeb/Projet/src/main/java/uppa/project/bean/ProfileBean.java new file mode 100644 index 0000000..dfe2948 --- /dev/null +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/bean/ProfileBean.java @@ -0,0 +1,106 @@ +package uppa.project.bean; + +import jakarta.persistence.EntityManager; +import uppa.project.database.dao.DAO; +import uppa.project.database.dao.DAOException; +import uppa.project.database.dao.EntityManagerProvider; +import uppa.project.database.dao.jpa.Game_JPA_DAO_Factory; +import uppa.project.database.pojo.User; +import uppa.project.json.HttpResponse; +import uppa.project.json.HttpResponseCode; + +public class ProfileBean { + private String id; + private String oldEmail; + private String email; + private String oldPassword; + private String password; + private String oldGender; + private String gender; + private User user; + private HttpResponse error; + + public ProfileBean() {} + + public ProfileBean(String username,String oldEmail, String email, String oldPassword, String password, String gender) { + this.id = username; + this.oldEmail = oldEmail; + this.email = email; + this.oldPassword = oldPassword; + this.password = password; + this.gender = gender; + } + + public boolean validate() { + EntityManager entityManager = EntityManagerProvider.getInstance(); + entityManager.getTransaction().begin(); + try{ + DAO userDAO = new Game_JPA_DAO_Factory().getDAOUser(); + //Check if the user is valid + user = userDAO.findById(Integer.parseInt(id)); + if (user == null) { + error = new HttpResponse(HttpResponseCode.UNAUTHORIZED, "Utilisateur non trouvé"); + return false; + } + //Check if the email is not already taken + User[] users = userDAO.findByField("email", email); + if (!oldEmail.equals(email) && users.length > 0) { + error = new HttpResponse(HttpResponseCode.UNAUTHORIZED, "Cet email est déjà utilisé"); + return false; + } + //Check if the old password is correct + if (!oldPassword.equals("") && user.verifyPassword(oldPassword) == false) { + error = new HttpResponse(HttpResponseCode.UNAUTHORIZED, "Ancien mot de passe incorrect"); + return false; + } + //Update the user + user.setEmail(email); + user.setPassword(password); + user.setGender(User.Gender.valueOf(gender)); + userDAO.update(user); + entityManager.getTransaction().commit(); + return true; + } catch (DAOException e) { + error = new HttpResponse(HttpResponseCode.INTERNAL_SERVER_ERROR, "Une erreur est survenue (DB_CONNECTION_ERROR:002)"); + entityManager.getTransaction().rollback(); + return false; + } + } + + public ProfileBean setId(String id) { + this.id = id; + return this; + } + + public ProfileBean setOldEmail(String email) { + this.oldEmail = email; + return this; + } + public ProfileBean setEmail(String email) { + this.email = email; + return this; + } + + public ProfileBean setOldPassword(String oldPassword) { + this.oldPassword = oldPassword; + return this; + } + + public ProfileBean setPassword(String password) { + this.password = password; + return this; + } + + public ProfileBean setGender(String gender) { + this.gender = gender; + return this; + } + + public HttpResponse getError() { + return error; + } + + public User getUser() { + return user; + } +} diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/database/pojo/Game.java b/S2/DevWeb/Projet/src/main/java/uppa/project/database/pojo/Game.java index 44bca4d..8a80810 100644 --- a/S2/DevWeb/Projet/src/main/java/uppa/project/database/pojo/Game.java +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/database/pojo/Game.java @@ -293,6 +293,24 @@ public class Game implements Serializable { } } + /** + * Récupère le gagnant de la partie + * + * @return le nom du gagnant + */ + public String getWinner(){ + sortPlayersByScore(); + return players.get(0).getUser().getUsername(); + } + + /** + * Vérifie si le nombre de tours est valide + * + * @param nbRounds le nombre de tours + * @param nbColors le nombre de couleurs + * @param nbValuesPerColor le nombre de valeurs par couleur + * @return true si le nombre de tours est valide, false sinon + */ public boolean isValidNumberRound(int nbRounds, int nbColors, int nbValuesPerColor){ return nbRounds < NB_ROUNDS_MIN || nbRounds > nbColors * nbValuesPerColor; } diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/web/servlet/ProfileServlet.java b/S2/DevWeb/Projet/src/main/java/uppa/project/web/servlet/ProfileServlet.java index 59784c3..469e870 100644 --- a/S2/DevWeb/Projet/src/main/java/uppa/project/web/servlet/ProfileServlet.java +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/web/servlet/ProfileServlet.java @@ -6,12 +6,23 @@ package uppa.project.web.servlet; +import com.google.gson.Gson; 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 java.io.IOException; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.List; +import uppa.project.bean.ProfileBean; +import uppa.project.bean.RegisterBean; +import uppa.project.database.pojo.Game; +import uppa.project.database.pojo.Player; +import uppa.project.database.pojo.User; +import uppa.project.json.HttpResponse; +import uppa.project.json.HttpResponseCode; @WebServlet(name = "profileServlet", value = "/profile") public class ProfileServlet extends HttpServlet { @@ -24,6 +35,34 @@ public class ProfileServlet extends HttpServlet { request.getRequestDispatcher("/WEB-INF/pages/profile.jsp").forward(request, response); } + public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + PrintWriter out = response.getWriter(); + + ProfileBean profileBean = new ProfileBean() + .setId(request.getParameter("id")) + .setOldEmail(request.getParameter("oldEmail")) + .setEmail(request.getParameter("email")) + .setPassword(request.getParameter("password")) + .setGender(request.getParameter("gender")) + ; + + Gson gson = new Gson(); + HttpResponse httpResponse; + if (profileBean.validate()) { + request.getSession().setAttribute("user", profileBean.getUser()); + httpResponse = new HttpResponse( + HttpResponseCode.OK, + "Register success" + ); + } else { + httpResponse = profileBean.getError(); + } + out.println(gson.toJson(httpResponse)); + out.flush(); + } + public void destroy() { } } diff --git a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/profile.jsp b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/profile.jsp index d8a378c..d9ca40d 100644 --- a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/profile.jsp +++ b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/profile.jsp @@ -1,4 +1,10 @@ +<%@ page import="uppa.project.database.pojo.Player" %> +<%@ page import="uppa.project.database.pojo.Game" %> +<%@ page import="java.util.List" %> <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> +<%--<%@ taglib uri = "https://mvnrepository.com/artifact/jakarta.servlet.jsp.jstl/jakarta.servlet.jsp.jstl-api" prefix = "c" %>--%> + + <%@taglib prefix="layout" tagdir="/WEB-INF/tags/layouts" %> <%@taglib prefix="component" tagdir="/WEB-INF/tags/components" %> @@ -9,93 +15,38 @@
-
- -
- - -
-
- - -
-
- - Changer le mot de passe -
-
- - -
-
- - -
+
+
-
- - -
-

Statistiques globales

-
-
-
-

Parties

-

${user.nbPlayedGame}

-
-
-
-
-

Victoires

-

${user.nbWin}

-
-
-
-
-

Clics corrects

-

${user.nbRightClicks}

-
-
-
-
-

Clics rapides

-

${user.nbRapidClicks}

-
-
-
- -<%-- TODO: Tableau des 10 dernières parties--%> - -

10 dernières parties

- - - - - - - - - - - - - - - - - - -
DateVictoireScore
${game.createdAt}${game.winner}${game.score}Voir
- - +
- \ No newline at end of file + + diff --git a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/components/statistics.tag b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/components/statistics.tag new file mode 100644 index 0000000..ce309ec --- /dev/null +++ b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/components/statistics.tag @@ -0,0 +1,64 @@ +<%@ tag import="uppa.project.database.pojo.Player" %> +<%@tag description="component/statistics" pageEncoding="UTF-8" %> + +

Statistiques globales

+
+
+
+

Parties

+

${user.nbPlayedGame}

+
+
+
+
+

Victoires

+

${user.nbWin}

+
+
+
+
+

Clics corrects

+

${user.rightClickPercentRate}%

+
+
+
+
+

Clics rapides

+

${user.rapidClickPercentRate}%

+
+
+
+ +<%-- TODO: Si le temps nous le permet, mettre en place un système de pagination --%> + +

Parties jouées

+ + + + + + + + + + + + <% for (int i = 0; i < user.getPlayedGames().size(); i++) { + Player player = user.getPlayedGames().get(i); + %> + + + + + + + <% } %> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> + +
DateScoreVainqueur
<%= player.getGame().getCreatedAt().toLocaleString() %><%= player.getScore() %><%= player.getGame().getWinner() %>Voir
${player.game.createdAt}${player.score}${player.game.winner}Voir
diff --git a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/forms/profile.tag b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/forms/profile.tag index c0dc0c9..a26fa33 100644 --- a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/forms/profile.tag +++ b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/forms/profile.tag @@ -1,5 +1,207 @@ +<%@ tag import="uppa.project.database.pojo.User" %> <%@tag description="form/profile" pageEncoding="UTF-8" %> -
+ + +
+ +
+ + +
+
+
+ +
+ + + +
+
+
+ + Changer le mot de passe +
+ + + +
+ + +
+
+ +
+
+ + +
+ +
+
- \ No newline at end of file +
+
+ +
+
+ + diff --git a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/forms/reset-password.tag b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/forms/reset-password.tag index 4758dcb..8bf91da 100644 --- a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/forms/reset-password.tag +++ b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/forms/reset-password.tag @@ -24,6 +24,8 @@