diff --git a/README.md b/README.md index 4b1bfa851460156e16fb09f4a2171d4f955d442c..ec1d5e6d7d6a2bb80332b6f279a67abb374c5f3c 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ ### Partie 3 - Extensions -- feuile de style **YANNIS** +- feuile de style **YANNIS** OK - structure html page d'accueil **CHARLIE** - gestion des réactions (like/unlike) **CHARLIE** OK - fonctionnalité poster un message texte **CHARLIE** OK diff --git a/doc/doc_appli.md b/doc/doc_appli.md index 974507b75cd6a4576c63858de425de09dc2afd11..4663f03c7def43e585b031e8e56257133d748acd 100644 --- a/doc/doc_appli.md +++ b/doc/doc_appli.md @@ -4,6 +4,14 @@ ## Description générale de l’application +**CampusTalk** est une application web de messagerie publique. Elle permet à ses utilisateurs de créer des **fils de discussions** ou d'en suivre, et d'y **poster des messages** visibles par les autres utilisateurs. + +Un utilisateur peut décider de **suivre des fils de discussions** pour y avoir accès directement sur sa page d'accueil. Il peut pour autant voir **tous** les fils existants et voir les messages de tous les autres utilisateurs. +Il n'est pas possible d'avoir une conversation privée avec un autre utilisateur. + +L'application permet une navigation accessible et fluide pour voir son fil d'actualité, les fils de discussions suivis et ceux à découvrir, et pour gérer les paramètres de son compte. + +L'application est reliée à une **base de données** qui est la source de l'affichage de toutes les informations relatives aux comptes utilisateurs, aux messages et aux fils de discussions, ainsi que des informations sur les fils suivis et les messages *likés* par les utilisateurs. ## MCD et MLD réalisés @@ -26,11 +34,71 @@ ## Requêtes pertinentes et significations +Au tout début du projet, nous avons créé nos tables, inséré des données et testé ces données en créant des requêtes qui nous semblaient les plus pertinentes pour le développement de l'application. Toutes ces requêtes n'ont pas finalement servi dans notre code, mais fonctionnent. + +**Obtenir le pseudo du compte qui a créé le fil à id 2** + + SELECT username FROM userAccount INNER JOIN thread + ON userAccount.userid = thread.userid_thread + WHERE thread.userid_thread = 2; + +Cette requête permet de récupérer facilement un nom d'utilisateur si on connaît l'identifiant d'un fil donné. + +**Obtenir les fils créés par un utilisateur, ici *titi*** + + SELECT threadid, threadname FROM thread AS t INNER JOIN userAccount AS u + ON t.userid_thread = u.userid + WHERE u.username = 'titi'; + +Cette requête permet de récupérer les paramètres nécessaires à la création d'un fil de discussion si on connaît l'utilisateur qui l'a créé. + +**Obtenir les messages auxquels un utilisateur, ici *titi* a réagi** + + SELECT m.msgid, u.username, m.msg, r.reaction FROM msg AS m + INNER JOIN reactions AS r + ON m.userid_msg = r.userid_reactions + INNER JOIN userAccount AS u + ON r.userid_reactions = u.userid + WHERE u.username = 'titi' AND r.reaction = true; + +Cette requête permet de récupérer les informations nécessaires à la création d'un message si on veut créer une liste de messages aimés par *titi* par exemple. + +**Obtenir les fils de discussions créés par *tata*** + + SELECT threadid, threadname FROM thread AS t INNER JOIN userAccount AS u + ON t.userid_thread = u.userid + WHERE u.username = 'tata'; + +Cette requête permet de récupérer les fils de discussions créés par l'utilisateur *tata*. + +**Obtenir les fils de discussions suivis par *titi* dans l'ordre croissant** + + SELECT threadid_follow, userID_follow, followDate FROM follow as f + INNER JOIN thread AS t ON t.threadid = f.threadID_follow + INNER JOIN userAccount AS u ON u.userid = f.userID_follow + WHERE u.username = 'titi' + ORDER BY f.followDate ASC; + +Cette requête permet de récupérer les informations de suivi sur les fils suivis par l'utlilisateur *titi* pour par exemple afficher tous les messages relatifs à ces fils dans son fil d'actualité personnel. L'affichage croissant permet d'afficher les messages plus récents en premier. + +**Créer un fil de discussion** + + INSERT INTO thread (userID_thread, threadName) + VALUES(2, "Thread test"); +Cette requête prend en paramètre les valeurs nécessaires à l'insertion d'une ligne dans la table `thread`, ici elle indique que l'utilisateur à l'identifiant 2 a créé un fil de discussion appelé *"Thread test"*. +**Supprimer un utilisateur** + + DELETE FROM userAccount + WHERE userid=2 + AND username='titi'; + +Cette requête supprime la ligne dans la table `userAccount` en vérifiant si le mot de passe et le nom d'utilisateur sont bien relatifs au même compte. Si c'est le cas, la ligne est supprimée et l'utilisateur n'existe plus. ## Arborescence globale de l’application +Voici le rendu de la commande `tree` à la racine du dépôt : ├── create.html ├── css @@ -75,10 +143,47 @@ │ └── User.java └── WEB-INF.iml +**Note** : à la compilation, les fichiers binaires sont redirigés vers le dossier `WEB-INF/classes`. Ils ne sont pas affichés ici pour des raisons de place. + ## Liste des entrées du/des controleurs avec leur fonctionalité +Nous avons uniquement utilisé des servlets sur ce projet. Pour une meilleure lisibilité du code, nous avons décidé de ne pas avoir un fichier global mais plusieurs contrôleurs avec chacun leurs propres responsabilités. + +*Le nom de la servlet représente son entrée, chacune vérifient si l'utilisateur est connecté et indiqué dans la session. Si ce n'est pas le cas (par exemple si la page a été bookmarkée et visitée a posteriori), l'écran de connexion est affiché.* + +**Account** + +- Permet de gérer les informations du compte de l'utilisateur (changer son mot de passe ou supprimer son compte) + +**DeleteAccount** + +- Est appelée par **Account** lorsque l'utilisateur supprime son compte. + +**Discover** + +**Feed** + +**Following** + +**FollowThread** + +**LikeMessage** + +**LogIn** + +**NewThread** + +**PageGeneration** + +**PostMessage** + +**SignUp** + ## Points techniques difficiles et comment ils ont été réglés -problèmes de connection bdd et pas possible de faire chez nous +Nous avons essentiellement rencontrés des problèmes au niveau de la base de données. Notre script de création de tables a dû être modifié plusieurs fois au fur et à mesure du développement car des problèmes survenaient concernant la structure des tables et de leurs relations. En reprenant tout le chemin des *StackTrace* et en testant les requêtes SQL effectuées manuellement dans un terminal, nous avons pu régler la quasi totalité des bugs que nous avons rencontrés. + +Une autre difficulté sur ce même point était que nous n'avions pas réussi à paramétrer le programme afin de pouvoir l'exécuter sur nos machines personnelles (difficultés de connexion au Driver via Postgres). Quand nous travaillions depuis chez nous, nous ne pouvions rien tester de notre travail et le code se faisait un peu à l'aveugle dans l'attente de pouvoir le vérifier. +Ceci dit, cela nous a poussé à nous appliquer dans notre développement sans se presser à coder trop vite en testant à répétition. diff --git a/sql/testingRequests.sql b/sql/testingRequests.sql index 57310c683cbff6e05a0b4817aace57bf193cec18..a7724b46600c3ce9ef740c31d16db951d886d539 100644 --- a/sql/testingRequests.sql +++ b/sql/testingRequests.sql @@ -24,7 +24,7 @@ ON r.userid_reactions = u.userid WHERE u.username = 'titi' AND r.reaction = true; -- Voir les threads suivis par un utilisateur (ici tata) -\echo 4) Threads suivis par tata : +\echo 4) Threads créés par tata : SELECT threadid, threadname FROM thread AS t INNER JOIN userAccount AS u ON t.userid_thread = u.userid @@ -47,23 +47,15 @@ INNER JOIN userAccount AS U ON m.userid_msg = u.userid WHERE m.threadID = 1; --- Voir le thread qui a le plus de messages +-- Créer un thread -\echo 7) Le thread qui a le plus de messages +\echo 7) Créer un thread +INSERT INTO thread (userID_thread, threadName) +VALUES(2, "Thread test"); -SELECT t.threadid, t.threadName, MAX(m.msgid) -FROM msg AS m INNER JOIN thread AS t -ON t.threadid = m.threadid -GROUP BY t.threadID -LIMIT 1; +-- Supprimer un utilisateur --- Voir le thread qui a le plus d'abonnés - -\echo 8) Le thread qui a le plus d abonnés - -SELECT t.threadID, t.threadName, COUNT(f.userID_follow) AS nb_followers -FROM follow f -INNER JOIN thread t ON f.threadID_follow = t.threadID -GROUP BY t.threadID, t.threadName -ORDER BY nb_followers DESC -LIMIT 1; +\echo 8) Supprimer un utilisateur +DELETE FROM userAccount +WHERE userid=2 +AND username='titi'; \ No newline at end of file