-
Notifications
You must be signed in to change notification settings - Fork 2
2.2 Backlog
Notre projet est de créer une porte coulissante connectée en Wi-Fi. La gestion des portes sera possible via une application mobile, contenant toutes les fonctionnalités nécessaire à son bon fonctionnement (ouverture/fermeture des portes, tags de porte, historique de fréquentation, ...)
Les différents User Stories ci-dessous vont expliquer les différents fonctionnalités possibles par et via cette porte.
Les User Stories ci-dessous ont été numérotées dans l'ordre auquel les fonctionnalités nous sont venues. L'ordre d'importance, et donc de réalisation des fonctionnalités est le suivant :
- US 1 : Inscription (Lucas)
- US 2 : Connexion (Nathan)
- US 5 : Liste des portes (Tom)
- US 6 : Détails d'une porte
- US 7 : Ouverture et fermeture des portes (Damien)
- US 4 : Ajout d'une porte (Gauthier)
- US 10 : Historique porte (Matthieu)
- US 8 : Nom et tag des portes (Arnaud)
- US 9 : Suppression porte
- US 3 : Réinitialisation mot de passe
- US 12 : Déconnexion
- US 13 : Porte favorite
- US 14 : Création d'une porte
- US 11 : Informations personnelles
Remarque : Certaines US sont apparues plus tard dans le projet. Il se peut donc que certaines US avec une plus grosse importance apparaissent plus bas dans la liste d'importance.
En tant qu’utilisateur, je veux pouvoir me créer un compte sur l’application. Lorsque j’ouvre l’application j'atterris sur l’écran de connexion sur lequel se trouve un bouton d’inscription me renvoyant sur formulaire me permettant de m’inscrire.
Dans ce formulaire je désire indiquer :
- Nom
- Prénom
- Téléphone
- Sexe
- Mon adresse mail
- Mon mot de passe
- La confirmation de mon mot de passe
Je veux aussi pouvoir y trouver un bouton renvoyant l'utilisateur vers la page de connexion au cas où je me serai trompé.
Finalement en cas de soucis dans le remplissage du formulaire, je veux que celui-ci prévienne l'utilisateur (ex : “mot de passe de confirmation non correct” ) .
Cette fonctionnalité me permettra par la suite de me connecter à l’application (US 2) afin de récupérer les différentes portes étant attribuées à cet utilisateur.

Post - /newUser : me permettant de rajouter un user dans la base de données.
Post - /userMail : me permettant de vérifier si le mail qui essaye de s'inscrire n'existe pas déjà.
Bien entendu le mot de passe de confirmation ne sera pas envoyé vers la base de données, celui-ci ne sert qu’à la vérification.
Tous les autres champs par contre sont à envoyer à l’API pour être enregistrés en base de données.
ETANT DONNÉ que je suis sur la page du formulaire d'inscription, QUAND je clique sur le bouton valider et que le formulaire est correct ALORS celui-ci est envoyé au back-end qui l'enregistre dans la base de données et je suis redirigé vers l’écran de connexion
ETANT DONNÉ que je suis sur la page du formulaire d'inscription, QUAND je clique sur le bouton valider et que le formulaire est incorrect ALORS celui-ci est bloqué et un message d'erreur apparaît en rouge au-dessus du bouton d'inscription reprenant les différents champs à modifier ceux-ci pouvant être :
- Nom → seulement en lettres
- Prénom → seulement en lettres
- Téléphone → seulement en chiffres
- e-mail → dans le format e-mail
- mot de passe → 8 caractères contenant au minimum 1 majuscule, 1 minuscule, 1 chiffre et 1 caractère spécial
ETANT DONNÉ que je suis sur la page du formulaire d'inscription, QUAND je clique sur le bouton “Déjà un compte” ALORS je suis redirigé vers la page me permettant de me connecter (US 2).
En tant qu’utilisateur, je veux pouvoir me connecter à mon compte pour accéder aux fonctionnalités de l’application.
Lors du démarrage de l’application, la page de connexion s'affiche. Celle-ci est composée de :
- Un formulaire de connexion avec adresse mail et mot de passe
- Un bouton de connexion.
- Un bouton d’inscription pour un nouvel utilisateur
- Un bouton de récupération de mot de passe.

GET /doorHistory/user/ (userId a déjà été récupéré) : permettant de récupérer les 3 portes les plus utilisées par l'utilisateur
POST /userConnection/ : permettant de vérifier si le créateur existe bien en base de données
ÉTANT DONNÉ que je suis sur la page de connexion, QUAND je clique sur le bouton “connexion” et que les formulaires 'e-mail' et 'mot de passe' sont remplis ALORS
- L'application envoie les valeurs que l'utilisateur à donné dans le formulaire (POST /userConnection/)
- L'application vérifie la cohérence entre les données envoyées depuis le formulaire et les données enregistrées dans la base de données.
- L'application compare les mots de passes enregistrés et hachés en base de données et le mot de passe envoyé dans le formulaire
- Traitement des données
-
SI les données correspondent, l'application récupère toutes les données liées à l'utilisateur :
- Les 3 portes les plus souvent utilisées par l'utilisateur (GET /userDoors/:userId (userId a déjà été récupéré))
- L'identifiant de l'utilisateur
Les données récupérées sont stockées par l'application tant que la session utilisateur est ouverte.
-
SI les données ne correspondent pas, l'application affiche un message sous le formulaire : 'E-mail ou mot de passe incorrect'.
ÉTANT DONNÉ que je suis sur la page de connexion, QUAND je clique sur le bouton “connexion” et que les formulaires 'e-mail' et 'mot de passe' sont vides ALORS l'application indique un message d'erreur: 'Veuillez renseigner une valeur dans chaque champ'.
ÉTANT DONNÉ que je suis sur la page de connexion, QUAND je clique sur le bouton “mot de passe oublié” ALORS j’arrive sur la page de récupération de mot de passe. (US n°3)
ÉTANT DONNÉ que je suis sur la page de connexion, QUAND je clique sur le bouton “Pas encore de compte ?” ALORS j’arrive sur la page d'inscription. (US n°1)
En tant qu’utilisateur, je veux pouvoir réinitialiser mon mot de passe en cas d’oubli.
- Lors de la demande de connexion à l’entrée de l’application, un bouton “Réinitialiser mon mot de passe” doit me renvoyer vers une formulaire qui demande l’adresse mail de l’utilisateur.
- Un mail sera ensuite envoyé à l’adresse mail correspondante, pour confirmer la demande de réinitialisation de mot de passe.
- Si la personne confirme via mail, l’application s’ouvrira avec un nouveau formulaire qui demandera 2 fois le nouveau mot de passe.
En tant qu’utilisateur, je souhaite pouvoir ajouter une porte via un id et un mot de passe.
- Lorsque l’utilisateur veut ajouter une porte, il doit d’abord l’ajouter grâce à l’id et au mot de passe propre à la porte et ensuite, il cliquera sur un bouton pour soumettre son formulaire.
- Si le mot de passe correspond bien à l’id, l’utilisateur est amené vers une page qui lui permettra de définir le tag et le nom de la porte.
- Le tag est un moyen de regrouper plusieurs portes ensemble spécial à l’utilisateur. (Exemple: “Maison Papa”).
- Le nom est un moyen d’identifier spécifiquement une porte en fonction du tag. (Exemple : “Porte de la chambre”).
- Ensuite, l’utilisateur devra valider son formulaire.
POST /door/check : Cette requête nous dira si les informations rentrées correspondent bien à celle d'une porte existante en base de données.
POST /door/newaccess: Cette requête ajoutera une entrée dans la table "access" de notre base de données, avec toutes les données fournies par l'utilisateur lors du dernier formulaire ainsi que l'ID de l'utilisateur ayant fait la requête.
ÉTANT DONNÉ que je suis dans le menu de navigation, QUAND j'appuie sur le bouton "Ajouter une porte" ALORS j'arrive sur la page adéquate à savoir un formulaire de détection de la porte contenant un champs "ID" et un champ "Mot de passe".
ÉTANT DONNÉ que je suis sur la page de détection de porte, QUAND j'entre des données dans le formulaire de détection et valide mon formulaire ALORS une requête est effectuée sur notre API (GET 82.165.248.136:8081/door/check). Cette requête nous dira si les informations rentrées correspondent bien à celle d'une porte existante en base de donnée.
- Si la requête n'aboutit pas (pas d'envoi ou délai de réponse dépassé), un message d'erreur est donné au client en fonction de l'erreur produite.
- Si la requête aboutit et qu'aucune porte ne coïncide, un message d'erreur informera l'utilisateur que ces informations sont incorrectes.
ÉTANT DONNÉ que je suis sur la page de détection de porte, QUAND j'envoie des données valides dans le formulaire de détection ALORS je suis redirigé vers le formulaire d'encodage qui me permettra de personnaliser la porte nouvellement ajoutée. Les champs sont les suivants : "Nom", "Tag" .
ÉTANT DONNÉ que je suis sur le formulaire d'encodage de la nouvelle porte, QUAND j'insère des données valides dans le formulaire et que je l'envoie ALORS une requête est effectuée sur notre API (POST 82.165.248.136:8081/newaccess). Cette requête ajoutera une entrée dans la table "access" de notre base de données, avec toutes les données fournies par l'utilisateur lors du dernier formulaire ainsi que l'ID de l'utilisateur ayant fait la requête.
- Si la requête n'aboutit pas (pas d'envoi ou délai de réponse dépassé) ou qu'elle aboutit mais que les données sont invalides, un message d'erreur est donné au client en fonction de l'erreur produite.
- Si la requête aboutit, l'entrée est bien ajoutée et l'utilisateur reçoit un message de succès et est redirigé vers la page initiale d'ajout de porte.
En tant qu’utilisateur, je veux pouvoir avoir accès à la liste des portes pour lesquelles j’ai accès.
- Dans le menu de navigation, l’utilisateur aura un onglet “Mes portes” .
- Tout d’abord, l’utilisateur aura accès à une des boutons reprenant tous ses tags enregistrés.
- Une fois que l’utilisateur a choisi son tag, une liste de toutes ses portes apparaît à l’écran les unes en dessous des autres.
- La liste des portes s’affichent par leur nom et lors d’un clic sur celle-ci, on accède aux détails de cette porte.(cfr US6)
Get- /listeTag: me permettant de récupérer tous les tags de l'utilisateur de la base de données.
Get- /doorTag: me permettant de récupérer toutes les portes reliées au tag depuis la base de données.
ÉTANT DONNÉ que je clique sur le bouton "Mes portes", QUAND je souhaite voir l'ensemble de mes portes ALORS je suis redirigé vers cette page.
ÉTANT DONNÉ que je sélectionne un tag parmi ceux disponible, QUAND je souhaite voir les portes qui lui sont attribuées ALORS la liste de ces portes s'affichent.
- Si la requête n'aboutit pas (pas d'envoi ou délai de réponse dépassé), un message d'erreur est donné au client en fonction de l'erreur produite.
ÉTANT DONNÉ que je souhaite voir les détails d'une porte, QUAND je clique sur celle-ci, ALORS je serais redirigé vers une page comprenant les détails de cette porte.(cfr US6)
En tant qu’utilisateur, je veux pouvoir cliquer sur une porte et interagir avec.
- Lorsque l’utilisateur cliquera sur une des portes, il aura d’abord cela l'amènera sur une page contenant les informations de cette porte.
- Tout d’abord l'utilisateur aura l’information du statut de la porte, ouverte ou fermée.
- Ensuite, il aura accès au bouton “historique”
- Ensuite, il aura accès au bouton "modification"
- Enfin, l’utilisateur aura accès à un bouton qui sera “ouvrir” ou “fermer” selon l’état de la porte.
En tant qu’utilisateur, je veux pouvoir ouvrir ou fermer une porte choisie à distance via l'application.
- Lorsque l’utilisateur arrive sur la page de la porte, il y verra un bouton qui sera soit “Ouverture” soit “Fermeture” en fonction de l’état de la porte.
- Lorsque l'utilisateur cliquera sur le bouton cela aura pour effet d’envoyer une requête à notre µcontroleur pour ouvrir ou fermer la porte.
- Lorsque l’utilisateur cliquera sur le bouton, cela aura pour effet de le rendre inaccessible en changeant le texte du bouton en "Ouverture../Fermeture.."
- Lorsque l’opération est terminée, le bouton redevient plein et son texte a changé(ouverture/fermeture).
- Lorsque l’opération est terminée, le statut de la porte a été modifié.
En tant qu’utilisateur, je veux pouvoir modifier le nom ainsi que le tag de chaque porte enregistrée au sein de mon compte afin de la reconnaître.
- Sur la vue contenant les informations de la porte l’utilisateur aura accès à un bouton “édition”.
- Ce bouton dirigera l’utilisateur vers une vue lui permettant de modifier le tag, le nom.
Patch - /access/update : permet de modifier les données de la porte
- US n°6 : Détails d'une porte (point de départ pour accéder à la modification du nom & tag)
-
ÉTANT DONNÉ que je suis sur la page détails d'une porte, QUAND je clique sur le bouton “édition” ALORS j’arrive sur la page de modification.
-
ÉTANT DONNÉ que je suis sur la page de modification d'une porte et que je clique sur le bouton "sauvegarder" et que le champ nom et/ou tag est vide alors je reçois une notification d'erreur et je reste sur la vue de modification.
-
ÉTANT DONNÉ que je suis sur la page de modification d'une porte et que je clique sur le bouton "annuler" alors je reviens sur la vue de la porte en question.
-
ÉTANT DONNÉ que je suis sur la page de modification d'une porte et que j'ai modifié le nom et/ou le tag de la porte QUAND je clique sur le bouton “sauvegarder” et que les données ont été envoyées et sauvegardé sur la DB ALORS je reçois une notification de confirmation et ensuite je reviens sur la vue de la porte en question.
En tant qu’utilisateur, je veux pouvoir supprimer (une porte de ma liste afin de réduire le nombre de portes dans ma liste.)
En tant qu’utilisateur, je veux pouvoir accéder à l’historique d’utilisation d’une porte afin d’être au courant de tous les changements d'état de celle-ci qui y ont été effectués depuis sa création au sein de l'application. Le bouton d'accès à cet historique est situé sur la page des détails de la porte pour laquelle je désire voir ces informations (cf. US n°6). Lorsque la page de l'historique est chargée, je désire voir le surnom de la porte en en-tête de la page, ainsi qu'une liste de tous les changements d'états de la porte concernée. Au sein de chaque point de cette liste, je veux y retrouver ces différentes informations :
- La définition du changement d'état qui a été réalisée sur la porte (Ouverture ou Fermeture)
- L’heure et la date à laquelle le changement d'état a été réalisé
- Le nom et le prénom de l’utilisateur ayant effectué le changement d'état
Dans le cas où l'historique est vide (lorsqu'aucun changement d'état n'a été enregistré depuis la création de la porte au sein de l'application), alors à la place des différents changements d'état, ce message s'affiche : "Cette porte n'a enregistré aucun changement d'état jusqu'à maintenant."
En bas de la page historique, un bouton "Retour" est présent, celui-ci permettant de revenir à la page précédente, soit la page affichant les détails de la porte.
- US n°6 : Détails d'une porte (C'est à cet endroit que l'accès à la page Historique est possible)
- GET /doorHistory/door/:doorId => Renvoie l'ensemble de l'historique lié à une certaine porte (identifiée grâce à son identifiant appelé doorId dans la requête)
- GET /users/name => Renvoie l'ensemble des noms et prénoms afin d'annoter quelle personne a modifier l'état de la porte
- ÉTANT DONNÉ que je suis sur la page d'une porte, QUAND j'appuie sur le bouton 'Historique' de celle-ci, ALORS une page 'Historique' s'ouvrira .
- ÉTANT DONNÉ que je suis sur la page historique d'une certaine porte, ALORS l'historique de cette porte s'affichera dans la page en question.
- ÉTANT DONNÉ que je suis sur la page historique, ALORS je désire voir l'ensemble des heures auxquelles les actions ont été réalisées, le nom de l'utilisateur, et les différentes actions qui ont été réalisées.
En tant qu’utilisateur, je veux pouvoir consulter et modifier mes données personnelles. Une page “Mon compte” y serait dédiée. Elle reprendrait toutes les données de l’utilisateur (nom, prénom, mail, mdp,...) ainsi qu’un bouton permettant à l’utilisateur de modifier ses informations personnelles.
En tant qu’utilisateur, je veux pouvoir me déconnecter de l'application afin de laisser la possibilité à d'autres utilisateur de se connecter sur mon appareil.
L'US 2 : Connexion doit être terminée avant de commencer celle-ci.
- Etant donné que le menu de navigation est ouvert et que je suis connecté, quand j'appuie sur le bouton "déconnexion", alors je suis redirigé vers la page de connexion.
En tant qu'utilisateur, je souhaite avoir un accès plus direct aux portes que j'ai l'habitude d'ouvrir.
- Un composant porte favorite serra affiché par défaut.
- Ce composant reprendra les 3 portes les plus ouvertes/fermées par l'utilisateur.
- L'utilisateur pourra ensuite ouvrir et fermer ces portes à sa guise.
En tant qu'administrateur, je veux pouvoir créer une nouvelle porte afin que celle-ci puisse par après être accessible aux utilisateurs.
- Tout d'abord, je dois être authentifié avec un compte administrateur pour atteindre la fonctionnalité.
- Si cela est bien le cas, un bouton avec une case à cocher sont présentées. La case à cocher permettra éventuellement à l'administrateur de choisir l'id qu'aura la porte. Si cela n'est pas coché, l'id sera choisi dynamiquement.
- Un bouton permet d'enclencher la procédure de création après une dernière confirmation via un pop-up.
- Si tout se passe correctement, l'id et le mot de passe de la nouvelle porte sont affichés à l'administrateur.

