diff --git a/MCD.png b/MCD.png new file mode 100644 index 0000000000000000000000000000000000000000..0aee11f8ad141118b52919004d40dd0067fa6540 Binary files /dev/null and b/MCD.png differ diff --git "a/McdTropPouss\303\251.drawio" b/MLD.drawio similarity index 100% rename from "McdTropPouss\303\251.drawio" rename to MLD.drawio diff --git a/MLD.png b/MLD.png new file mode 100644 index 0000000000000000000000000000000000000000..ed32e2b9e52bc4513689c1430f4e2ca0accd23e7 Binary files /dev/null and b/MLD.png differ diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..4e24b9a4fa6e9245b63a2d109f6c49dc2f454296 --- /dev/null +++ b/README.md @@ -0,0 +1,124 @@ +# Doccumentation + +## 1. Description générale de l’application +Ce projet consiste en une application web de réseau social, conçue pour permettre aux utilisateurs de créer des conversations et d’envoyer et recevoir des messages. L'application est construite en Java avec une architecture MVC. + +### Fonctionnalités principales : +- **Gestion des utilisateurs** : Création de compte, authentification et gestion des informations personnelles. +- **Création et gestion des conversations** : L'utilisateur peut créer de nouvelles conversations, en rejoindre (à condition d'avoir le mot de passe) et poster des messages. +- **Interaction entre utilisateurs** : Les utilisateurs peuvent lire les messages des autres abonnés dans la même conversation, envoyer des messages, et voir la date et l'heure des messages. +- **Sécurité** : Protection contre les injections SQL et mot de passe chiffrés. + +## 2. MCD et MDL + +### MCD : +<img src="MCD.png"> + +### MLD : +<img src="MLD.png"> + +## 3. Requêtes pertinentes + +**Récupérer le pseudo d'un utilisateur à partir de son email :** +```sql +SELECT pseudo +FROM Utilisateur +WHERE email = 'alexandre.dehaine.etu@univ-lille.fr'; +``` + +**Récupérer toute une conversation avec les noms des utilisateurs et leurs messages dans l'ordre de lecture classique :** +```sql +SELECT u.pseudo, m.message +FROM Messages AS m +JOIN Utilisateur AS u ON m.utilisateur = u.email +WHERE idConv = (SELECT idConv FROM Conversations WHERE nomConv = 'Conversation 1') +ORDER BY m.jour, m.heure; +``` + +**Récupérer tous les messages d'une conversation contenant le mot "ca va", avec les noms des utilisateurs, dans l'ordre de lecture classique :** +```sql +SELECT u.pseudo, m.message +FROM Messages AS m +JOIN Utilisateur AS u ON m.utilisateur = u.email +WHERE idConv = (SELECT idConv FROM Conversations WHERE nomConv = 'Conversation 1') + AND LOWER(m.message) LIKE '%ca va%' +ORDER BY m.jour, m.heure; +``` +**Récupérer tous les utilisateurs d'une conversation spécifique :** +```sql +SELECT DISTINCT utilisateur +FROM Messages +WHERE idConv = 1; +``` + +## 4. Arborescence + +``` +. +├── accueil.jsp +├── login.html +├── MCD.drawio +├── MCD.png +├── META-INF +│ └── context.xml +├── MLD.drawio +├── MLD.png +├── package.json +├── package-lock.json +├── README.md +├── rejoindre.jsp +├── ScriptSQL.sql +├── Supprimer.jsp +├── tree.txt +├── util.txt +└── WEB-INF + ├── classes + │ └── dao + │ ├── Authent.class + │ ├── Conversation.class + │ ├── ConversationDao.class + │ ├── ConversationJdbcDao.class + │ ├── Message.class + │ ├── MessageDao.class + │ ├── MessageJdbcDao.class + │ ├── Utilisateur.class + │ ├── UtilisateurDao.class + │ └── UtilisateurJdbcDao.class + ├── lib + │ ├── chesslib-1.1.8.jar + │ └── postgresql-42.7.4.jar + └── src + └── dao + ├── Authent.java + ├── ConversationDao.java + ├── Conversation.java + ├── ConversationJdbcDao.java + ├── MessageDao.java + ├── Message.java + ├── MessageJdbcDao.java + ├── UtilisateurDao.java + ├── Utilisateur.java + └── UtilisateurJdbcDao.java +``` +8 directories, 37 files + +## 5. Liste des entrées des contrôleurs avec leur fonctionnalité + +- **Créer un compte :** Un utilisateur non connecté peut créer un compte. +- **Se connecter :** Un utilisateur non connecté peut se connecter avec son compte. +- **Se déconnecter :** Un utilisateur connecté peut se déconnecter. +- **Créer une conversation :** Un utilisateur connecté peut créer une conversation, lui attribuant un nom, un mot de passe (non obligatoire, il permet d’empêcher les utilisateurs non invités de rejoindre la conversation) ainsi qu’un message de bienvenue (le premier message de la conversation). +- **Rejoindre une conversation :** Un utilisateur connecté peut rejoindre une conversation. Il lui faut l'ID de la conversation, le mot de passe si la conversation en possède un, ainsi qu'un premier message. +- **Supprimer une conversation :** Un utilisateur connecté peut supprimer une conversation qu'il a créée. Il lui faut le mot de passe (si la conversation en possède un) pour confirmer la suppression. Supprimer une conversation entraîne la suppression de tous les messages associés. +- **Sélectionner une conversation :** Un utilisateur connecté peut sélectionner une conversation parmi celles qu’il a rejointes. +- **Lire les messages :** Un utilisateur connecté qui a rejoint et sélectionné une conversation peut lire les messages des autres utilisateurs. +- **Poster un message :** Un utilisateur connecté qui a rejoint et sélectionné une conversation peut y poster un message. + +## 6. Liste des points techniques difficiles + +- **Tables :** La première difficulté a été de déterminer comment organiser le projet, savoir quelles tables créer et quelles informations y inclure, et comment les faire interagir ensemble. Il fallait aussi gérer les règles de relations entre ces tables. +- **JSP :** Ensuite, il a fallu utiliser les JSP, en se rappelant leur fonctionnement pour les exploiter au mieux, et choisir l’ordre et l’importance des différentes fonctionnalités. +- **Messages :** La fonctionnalité des messages a été la plus longue à implémenter. Il fallait réussir à afficher les bons messages lorsque la bonne conversation était sélectionnée. +- **Sessions et authentification :** La deuxième fonctionnalité la plus longue à implémenter a été la gestion des sessions et de l’authentification, notamment en ce qui concerne les permissions. Il était essentiel de faire en sorte que l’utilisateur ne puisse voir une conversation que s’il en avait la permission, et que seules les personnes autorisées puissent envoyer des messages ou supprimer des conversations. + + diff --git a/ScriptSQL.sql b/ScriptSQL.sql index fbf97127230241eedbd6ca2c75796eb3c5492f6d..47722987e4f9defe3dacbeaa592e0be27583a09c 100644 --- a/ScriptSQL.sql +++ b/ScriptSQL.sql @@ -64,5 +64,5 @@ INSERT INTO Messages(message, utilisateur, idConv) SELECT pseudo FROM Utilisateur WHERE email = 'alexandre.dehaine.etu@univ-lille.fr'; -- récupère le nom d'utilisateur depuis l'email SELECT u.pseudo, m.message FROM Messages AS m JOIN Utilisateur AS u ON m.utilisateur = u.email where idConv = (SELECT idConv FROM Conversations where nomConv = 'Conversation 1') ORDER BY m.jour, m.heure; -- récupère toute une conversation avec le nom des utilisateur ainsi que les messages qu'ils ont envoyé dans l'ordre de lecture classique SELECT u.pseudo, m.message FROM Messages AS m JOIN Utilisateur AS u ON m.utilisateur = u.email where idConv = (SELECT idConv FROM Conversations where nomConv = 'Conversation 1') AND LOWER(m.message) LIKE '%ca va%' ORDER BY m.jour, m.heure; -- récupère tous les messages d'une conversation avec le nom des utilisateur ainsi que les messages qu'ils ont envoyé contenant les mot "ca va" dans l'ordre de lecture classique - SELECT DISTINCT utilisateur FROM Messages WHERE idConv = 1; + SELECT DISTINCT utilisateur FROM Messages WHERE idConv = 1; -- récupère tout les utilisateurs d'une conversation diff --git a/tree.txt b/tree.txt new file mode 100644 index 0000000000000000000000000000000000000000..701c673da63b7f0d94fa59091b482167633a281a --- /dev/null +++ b/tree.txt @@ -0,0 +1,47 @@ +. +├── accueil.jsp +├── login.html +├── MCD.drawio +├── MCD.png +├── META-INF +│ └── context.xml +├── MLD.drawio +├── MLD.png +├── package.json +├── package-lock.json +├── README.md +├── rejoindre.jsp +├── ScriptSQL.sql +├── Supprimer.jsp +├── tree.txt +├── util.txt +└── WEB-INF + ├── classes + │ └── dao + │ ├── Authent.class + │ ├── Conversation.class + │ ├── ConversationDao.class + │ ├── ConversationJdbcDao.class + │ ├── Message.class + │ ├── MessageDao.class + │ ├── MessageJdbcDao.class + │ ├── Utilisateur.class + │ ├── UtilisateurDao.class + │ └── UtilisateurJdbcDao.class + ├── lib + │ ├── chesslib-1.1.8.jar + │ └── postgresql-42.7.4.jar + └── src + └── dao + ├── Authent.java + ├── ConversationDao.java + ├── Conversation.java + ├── ConversationJdbcDao.java + ├── MessageDao.java + ├── Message.java + ├── MessageJdbcDao.java + ├── UtilisateurDao.java + ├── Utilisateur.java + └── UtilisateurJdbcDao.java + +8 directories, 37 files