diff --git a/README.md b/README.md index ec1d5e6d7d6a2bb80332b6f279a67abb374c5f3c..381e0c13a5fc385e34d4d36fd6acb4813e946fb1 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,221 @@ -# S4a021 Web Backend +# SAé S4.A02.1 : Web Backend - Yannis DEVOS et Charlie DARQUES -## Répartition des tâches +> **Objectif** : Savoir réaliser et mettre en place une architecture MVC -### Partie 1 - Modélisation -- script de création de tables OK -- script de requêtes fréquentes OK -- refaire le MCD proprement OK -- script de remplissage des tables OK -- dao OK -- fonctionnalités du DAO OK +## Description générale de l’application -### Partie 2 - Réalisation -- DAO de gestion de données OK -- construire les fonctionnalités nécessaires (**QUE DU SQL DANS LES DAO**) +**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. -=> créer un fil OK +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. -=> s'abonner à un fil OK +L'application permet une navigation accessible et fluide pour voir son fil d'actualité (bouton **Home**), les fils de discussions suivis (bouton **Followed**) et ceux à découvrir (bouton **Discover**), et pour gérer les paramètres de son compte (bouton **Account**). -=> poster un message OK +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. -=> réagir à un message OK +## MCD et MLD réalisés -- système d'authentification OK +- **Modèle Conceptuel de Données** : -### Partie 3 - Extensions + -- 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 -- gestion du compte **YANNIS** OK -- durée de vie des messages -- service web en GET qui récupère en JSON les threads du membre identifié et les messages postés sur ces threads -- permettre de poster des images +- **Modèle Logique de données** : -### Partie 4 - Documentation + userAccount(__userID__, username, password) -En Markdown : + msg(__msgID__, #userID_msg, #threadID, msg, posted_at) -- description générale de l'application -- MCD et MLD -- requêtes pertinentes avec signification -- arborescence globale de l'application -- liste des entrée des contrôleurs avec signification -- points techniques difficiles et comment ils ont été réglés \ No newline at end of file + thread(__threadID__, #userID_thread, threadName) + + reactions(__#userID_reactions, #msgID_reactions__, reaction) + + follow(__#userID_follow, #threadID_follow__, followDate) + + +## 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 + │ ├── account.css + │ ├── feed.css + │ ├── form.css + │ └── messages.css + ├── doc + │ ├── doc_appli.md + │ └── mcd_sae.png + ├── index.html + ├── package-lock.json + ├── README.md + ├── s4a021-web-backend.iml + ├── sql + │ ├── createTables.sql + │ ├── data.sql + │ └── testingRequests.sql + └── WEB-INF + ├── src + │ ├── controleurs + │ │ ├── Account.java + │ │ ├── DeleteAccount.java + │ │ ├── Discover.java + │ │ ├── Feed.java + │ │ ├── Following.java + │ │ ├── FollowThread.java + │ │ ├── LikeMessage.java + │ │ ├── LogIn.java + │ │ ├── NewThread.java + │ │ ├── PageGeneration.java + │ │ ├── PostMessage.java + │ │ └── SignUp.java + │ ├── dao + │ │ ├── BDConnection.java + │ │ ├── MessageDAO.java + │ │ ├── ThreadDAO.java + │ │ └── UserDAO.java + │ └── dto + │ ├── Message.java + │ ├── MyThread.java + │ └── 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 visibilité. + +## 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 enregistré dans la session. Si ce n'est pas le cas (par exemple si la page a été bookmarkée et visitée a posteriori, une fois la session échue), les servlet redirigent toutes vers l'écran de connexion.* + +`http://localhost:8080/s4a021-web-backend/Account` + +- Permet de gérer les informations du compte de l'utilisateur (changer son mot de passe ou supprimer son compte) + +`http://localhost:8080/s4a021-web-backend/DeleteAccount` + +- Est appelée par **Account** lorsque l'utilisateur supprime son compte. + +`http://localhost:8080/s4a021-web-backend/Discover` + +- Affiche tous les fils de discussion, sans prendre en compte si l'utilisateur connecté les suit déjà ou non. Un bouton *Follow* ou *Followed* permet d'indiquer à l'utilisateur s'il suit le fil affiché. + +`http://localhost:8080/s4a021-web-backend/Welcome` + +- Affiche le fil d'actualité de l'utilisateur avec les messages des fils de discussion auxquels il est abonné. L'utilisateur peut réagir aux messages avec un bouton *Like* ou *Unlike*. +- L'utilisateur peut poster un message dans un fil de dicussion en dessous de chaque message affiché sur son feed. + +`http://localhost:8080/s4a021-web-backend/Following` + +- Affiche la liste des fils de discussion auxquels l'utilisateur connecté est abonné, et depuis combien de temps il les suit. + +`http://localhost:8080/s4a021-web-backend/FollowThread` + +- N'affiche rien et exécute seulement du code lorsqu'elle est appelée dans **Discover**. +- Avec les paramètres d'un formulaire envoyé en POST, une requête est exécutée pour enregistrer l'abonnement de l'utilisateur à un fil de discussion, puis la servlet redirige vers la page d'origine. + +`http://localhost:8080/s4a021-web-backend/LikeMessage` + +- N'affiche rien et exécute seulement du code lorsqu'elle est appelée dans **Feed**. +- Comme pour **FollowThread**, avec les paramètres d'un formulaire envoyé en POST, une requête est exécutée pour enregistrer la réaction de l'utilisateur à un message d'un fil de discussion, puis la servlet redirige vers la page d'origine. + +`http://localhost:8080/s4a021-web-backend/LogIn` + +- N'affiche rien et exécute du code lorsqu'elle reçoit les paramètres du formulaire de connexion de la page `index.html`. +- Vérifie si l'utilisateur existe bien dans la base de données et si oui, elle redirige vers la page **Welcome**. Si non, elle indique une erreur. +- Si le login ou le mot de passe est vide, la page affiche un message d'erreur en indiquant qu'il est nécessaire, et permet de revenir sur le formulaire de connexion. + +`http://localhost:8080/s4a021-web-backend/NewThread` + +- Affiche un formulaire de création de fil de discussion avec un premier message à poster dedans. Quand le formulaire est envoyé, la page s'appelle elle-même pour exécuter la requête de création et affiche un message de validation si tout a bien fonctionné. + +`http://localhost:8080/s4a021-web-backend/PageGeneration` + +- Ce contrôleur n'est pas une servlet, seulement une classe Java avec une seule méthode statique permettant de générer le menu de navigation pour éviter la redondance d'écriture HTML. + +`http://localhost:8080/s4a021-web-backend/PostMessage` + +- N'affiche rien et exécute le code nécessaire à l'exécution d'une requête d'envoi de message dans un fil de discussion. +- Elle peut être appelée par **Welcome** quand un utilisateur poste un message dans un fil qu'il suit, ou dans **NewThread** quand il crée un nouveau fil. + +`http://localhost:8080/s4a021-web-backend/SignUp` + +- Similairement à **LogIn**, n'affiche rien mais vérifie que le nouveau compte envoyé dans le formulaire de `create.html` n'existe pas dans la base de donnée. S'il n'existe pas déjà, elle exécute la requête de création d'utilisateur. Sinon, elle affiche un message d'information et permet de revenir sur l'écran de connexion. + +### API Rest + +`http://localhost:8080/s4a021-web-backend/CampusTalkDatas/x` (Où `x` est l'id d'un utilisateur) + +- Permet un appel REST en GET renvoyant en JSON les Threads suivis par l'utilisateur ayant pour id : `x` + +## Points techniques difficiles et comment ils ont été réglés + +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. + +L'utilisation des requêtes SQL a étonnemment été le principal point difficile. Nous avions souvent fait des erreurs d'inattention qui finalement avaient beaucoup d'impact sur l'ensemble du code car elles sont utilisées à beaucoup de reprises. En faisant preuve de plus de précision dans nos méthodes et en s'appliquant à prendre le temps de tester manuellement les requêtes, nous avons pris de meilleurs réflexes qui ont permis de coder plus proprement, en limitant la redondance et en se relisant plusieurs fois. diff --git a/doc/doc_appli.md b/doc/doc_appli.md deleted file mode 100644 index 5b36b531747bbb6f14e71f2f5748282abb921d91..0000000000000000000000000000000000000000 --- a/doc/doc_appli.md +++ /dev/null @@ -1,221 +0,0 @@ -# SAé S4.A02.1 : Web Backend - Yannis DEVOS et Charlie DARQUES - -> **Objectif** : Savoir réaliser et mettre en place une architecture MVC - -## 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é (bouton **Home**), les fils de discussions suivis (bouton **Followed**) et ceux à découvrir (bouton **Discover**), et pour gérer les paramètres de son compte (bouton **Account**). - -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 - -- **Modèle Conceptuel de Données** : - - - -- **Modèle Logique de données** : - - userAccount(__userID__, username, password) - - msg(__msgID__, #userID_msg, #threadID, msg, posted_at) - - thread(__threadID__, #userID_thread, threadName) - - reactions(__#userID_reactions, #msgID_reactions__, reaction) - - follow(__#userID_follow, #threadID_follow__, followDate) - - -## 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 - │ ├── account.css - │ ├── feed.css - │ ├── form.css - │ └── messages.css - ├── doc - │ ├── doc_appli.md - │ └── mcd_sae.png - ├── index.html - ├── package-lock.json - ├── README.md - ├── s4a021-web-backend.iml - ├── sql - │ ├── createTables.sql - │ ├── data.sql - │ └── testingRequests.sql - └── WEB-INF - ├── src - │ ├── controleurs - │ │ ├── Account.java - │ │ ├── DeleteAccount.java - │ │ ├── Discover.java - │ │ ├── Feed.java - │ │ ├── Following.java - │ │ ├── FollowThread.java - │ │ ├── LikeMessage.java - │ │ ├── LogIn.java - │ │ ├── NewThread.java - │ │ ├── PageGeneration.java - │ │ ├── PostMessage.java - │ │ └── SignUp.java - │ ├── dao - │ │ ├── BDConnection.java - │ │ ├── MessageDAO.java - │ │ ├── ThreadDAO.java - │ │ └── UserDAO.java - │ └── dto - │ ├── Message.java - │ ├── MyThread.java - │ └── 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 visibilité. - -## 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 enregistré dans la session. Si ce n'est pas le cas (par exemple si la page a été bookmarkée et visitée a posteriori, une fois la session échue), les servlet redirigent toutes vers l'écran de connexion.* - -`http://localhost:8080/s4a021-web-backend/Account` - -- Permet de gérer les informations du compte de l'utilisateur (changer son mot de passe ou supprimer son compte) - -`http://localhost:8080/s4a021-web-backend/DeleteAccount` - -- Est appelée par **Account** lorsque l'utilisateur supprime son compte. - -`http://localhost:8080/s4a021-web-backend/Discover` - -- Affiche tous les fils de discussion, sans prendre en compte si l'utilisateur connecté les suit déjà ou non. Un bouton *Follow* ou *Followed* permet d'indiquer à l'utilisateur s'il suit le fil affiché. - -`http://localhost:8080/s4a021-web-backend/Welcome` - -- Affiche le fil d'actualité de l'utilisateur avec les messages des fils de discussion auxquels il est abonné. L'utilisateur peut réagir aux messages avec un bouton *Like* ou *Unlike*. -- L'utilisateur peut poster un message dans un fil de dicussion en dessous de chaque message affiché sur son feed. - -`http://localhost:8080/s4a021-web-backend/Following` - -- Affiche la liste des fils de discussion auxquels l'utilisateur connecté est abonné, et depuis combien de temps il les suit. - -`http://localhost:8080/s4a021-web-backend/FollowThread` - -- N'affiche rien et exécute seulement du code lorsqu'elle est appelée dans **Discover**. -- Avec les paramètres d'un formulaire envoyé en POST, une requête est exécutée pour enregistrer l'abonnement de l'utilisateur à un fil de discussion, puis la servlet redirige vers la page d'origine. - -`http://localhost:8080/s4a021-web-backend/LikeMessage` - -- N'affiche rien et exécute seulement du code lorsqu'elle est appelée dans **Feed**. -- Comme pour **FollowThread**, avec les paramètres d'un formulaire envoyé en POST, une requête est exécutée pour enregistrer la réaction de l'utilisateur à un message d'un fil de discussion, puis la servlet redirige vers la page d'origine. - -`http://localhost:8080/s4a021-web-backend/LogIn` - -- N'affiche rien et exécute du code lorsqu'elle reçoit les paramètres du formulaire de connexion de la page `index.html`. -- Vérifie si l'utilisateur existe bien dans la base de données et si oui, elle redirige vers la page **Welcome**. Si non, elle indique une erreur. -- Si le login ou le mot de passe est vide, la page affiche un message d'erreur en indiquant qu'il est nécessaire, et permet de revenir sur le formulaire de connexion. - -`http://localhost:8080/s4a021-web-backend/NewThread` - -- Affiche un formulaire de création de fil de discussion avec un premier message à poster dedans. Quand le formulaire est envoyé, la page s'appelle elle-même pour exécuter la requête de création et affiche un message de validation si tout a bien fonctionné. - -`http://localhost:8080/s4a021-web-backend/PageGeneration` - -- Ce contrôleur n'est pas une servlet, seulement une classe Java avec une seule méthode statique permettant de générer le menu de navigation pour éviter la redondance d'écriture HTML. - -`http://localhost:8080/s4a021-web-backend/PostMessage` - -- N'affiche rien et exécute le code nécessaire à l'exécution d'une requête d'envoi de message dans un fil de discussion. -- Elle peut être appelée par **Welcome** quand un utilisateur poste un message dans un fil qu'il suit, ou dans **NewThread** quand il crée un nouveau fil. - -`http://localhost:8080/s4a021-web-backend/SignUp` - -- Similairement à **LogIn**, n'affiche rien mais vérifie que le nouveau compte envoyé dans le formulaire de `create.html` n'existe pas dans la base de donnée. S'il n'existe pas déjà, elle exécute la requête de création d'utilisateur. Sinon, elle affiche un message d'information et permet de revenir sur l'écran de connexion. - -### API Rest - -`http://localhost:8080/s4a021-web-backend/CampusTalkDatas/x` (Où `x` est l'id d'un utilisateur) - -- Permet un appel REST en GET renvoyant en JSON les Threads suivis par l'utilisateur ayant pour id : `x` - -## Points techniques difficiles et comment ils ont été réglés - -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. - -L'utilisation des requêtes SQL a étonnemment été le principal point difficile. Nous avions souvent fait des erreurs d'inattention qui finalement avaient beaucoup d'impact sur l'ensemble du code car elles sont utilisées à beaucoup de reprises. En faisant preuve de plus de précision dans nos méthodes et en s'appliquant à prendre le temps de tester manuellement les requêtes, nous avons pris de meilleurs réflexes qui ont permis de coder plus proprement, en limitant la redondance et en se relisant plusieurs fois. diff --git a/plan.md b/plan.md new file mode 100644 index 0000000000000000000000000000000000000000..ec1d5e6d7d6a2bb80332b6f279a67abb374c5f3c --- /dev/null +++ b/plan.md @@ -0,0 +1,47 @@ +# S4a021 Web Backend + +## Répartition des tâches + +### Partie 1 - Modélisation +- script de création de tables OK +- script de requêtes fréquentes OK +- refaire le MCD proprement OK +- script de remplissage des tables OK +- dao OK +- fonctionnalités du DAO OK + +### Partie 2 - Réalisation +- DAO de gestion de données OK +- construire les fonctionnalités nécessaires (**QUE DU SQL DANS LES DAO**) + +=> créer un fil OK + +=> s'abonner à un fil OK + +=> poster un message OK + +=> réagir à un message OK + +- système d'authentification OK + +### Partie 3 - Extensions + +- 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 +- gestion du compte **YANNIS** OK +- durée de vie des messages +- service web en GET qui récupère en JSON les threads du membre identifié et les messages postés sur ces threads +- permettre de poster des images + +### Partie 4 - Documentation + +En Markdown : + +- description générale de l'application +- MCD et MLD +- requêtes pertinentes avec signification +- arborescence globale de l'application +- liste des entrée des contrôleurs avec signification +- points techniques difficiles et comment ils ont été réglés \ No newline at end of file