User_Stories - AllanFontaine/Pot-App GitHub Wiki
- Application qui permet de gérer son potager
- Un recueil d'informations sur les plantes
- La meilleure période pour planter et quelles plantes planter
- Anciennes versions des User Stories
-
Version actuelle :
⚠️ L'ordre des US est défini par #Px.y où x.y représente le numéro de l'épic que l'us divise suivi du numéro de priorité (croissant) et P la lettre du type d'utilisateur. Elles sont aussi triées par rapport au type d'utilisateur.
| US N° (x.y) | Personne en charge du détails |
|---|---|
| 1.2 | Emmanuel Fourreau |
| 2.1 | Allan Fontaine |
| 4.1 | Kevin Vandenede |
| 6.1 | Celia Hassaine |
| 7.2 | Florent Theys |
| 8.1 | Glenn Crompton |
| Type d'utilisateur | Abréviation | Description |
|---|---|---|
| Administrateur | A | Gestionnaire du site web |
| Visiteur | V | Personne qui n'a pas encore de compte |
| Utilisateur | U | Personne qui possède un compte |
- Accès à un wiki reprenant les infos de pleins de plantes
- Processus d'inscription
- Processus d'authentification
- Espace personnel
- Gestion du potager
- Conseil sur quoi planter
- Automatisation de l'arrosage
- Graphiques reprenant diverses infos (consommation d'eau etc)
- Accès à un historique de plantaison
V 1.1 En tant que visiteur, je veux avoir accès à une page d'accueil afin d'avoir des infos sur ce que le produit proposé prend en charge.
En tant que visiteur, je veux avoir accès à une page détaillée de chaque plante
La base de données doit possèder les infos nécessaires : informations sur chaque plante. Création d'une page détaillée pour chaque plante<\i>- Cette page possèdera une carte d'informations de la plante choisie. Celle-ci contiendra plusieurs informations visibles directement comme le nom, le nom scientifique. Elle contiendra aussi l'image de la plante.
- En-dessous des informations générales se trouveront des accordéons. Ces accordéons possèderont chacun des informations plus précises sur la plante. Quand on click sur l'accordéon, les informations apparaîssent en-dessous
- Certains accordéons possèderont des informations venant de wikipédia ( librairie angular : wtf_wikipeedia ).
- Le bouton "retour" se trouve en bas à gauche de la page
- https://api.pot-app.be/api/plante/?id' + id + '/:url_wiki' + url_wiki + '/'
- Bouton "retour" pour retourner à la page précedente
- Liste d'accordéons
- La page est responsive
- Les données arrivent correctement
- Page de détail d'une plante
- Page de détail d'une plante avec 1 accordéon ouvert
- Page de détail d'une plante avec 2 accordéons ouverts



En tant que visiteur, je veux pouvoir accéder à un moteur de recherche spécialisé
- Ce moteur de recherche est accessible par tout le monde sur le site, inscrit ou non-inscrit. Il se trouve tout au-dessus de la page.
- Le moteur est en réalité un input qui effectue une recherche quand l'utilisateur n'a pas écrit pendant 1 seconde.
- Si l'input contient une chaîne de caractère vide, les 10 premières plantes sont affichés
- Un select en-dessous de la barre de recherche permet de trier la liste de plantes selon 1 critère. On peut effectuer 6 tris différents:
- Nom par ordre croissant
- Nom par ordre décroissant
- Récolte en jours par ordre croissant
- Récolte en jours par ordre décroissant
- Saison par ordre croissant
- Saison par ordre décroissant
En tant que visiteur, je veux avoir accès à une liste des plantes proposées
- Chaque plante de la liste possèdera plusieurs informations affichées. Ces informations sont le nom, nom scientifique, saison, et récolte en jours.
- Chaque élément de la liste possèdera un bouton "Voir plus". Ce bouton renverra vers une nouvelle page. Cette page permettra d'avoir plus d'informations sur la plante sélectionnée.
- La liste est gérée par un paginator. Ce paginator limite la liste à 10 éléments par page, connait le nombre de plantes totale dans la base de données. Le paginator se trouve en-dessous de la page, possèdant 2 flèches pour effectuer "page suivante" ou "page précédente".
A 1.5 En tant qu'administrateur, je veux pouvoir facilement avoir accès aux infos dans le wiki afin d'en ajouter/enlever/modifier.
En tant que visiteur, je veux pouvoir m'inscrire au site afin de pouvoir utiliser le produit.
La base de données devra posséder une table d'utilisateur pour pouvoir enregistrer les données. Il s'agit ici d'un formulaire d'inscription que l'utilisateur pourra remplir avec les infos demandées pour permettre l'enregistrement de ce dernier dans notre base de données. La navbar de la page d'accueil possède un bouton "S'enregistrer".-
Cliquer sur le bouton amène à une page avec un formulaire à remplir.
- Le stepper empêche l'utilisateur de remplir le prochain champ tant que les précédents sont pas remplis.
- Chaque étape possède un bouton précédent pour revenir à celle d'avant et un bouton suivant pour passer à l'étape d'après une fois les champs nécessaire remplis.
- La première étape du stepper comprendra les informations d'ordre générale tel que le nom, le prénom et l'adresse.
- Les champs nom et prénom seront obligatoire et le champ adresse sera facultatif.
- La seconde étape du stepper comprendra les informations propre au compte, c'est-à-dire le nom d'utilisateur, l'email et le mot de passe.
- Tout les champs ici sont obligatoire avec en prime l'email qui doit être sous format email et le mot de passe qui doit être sous format password.
- La dernière étape du fomulaire possède un bouton reset en plus des boutons précédent et suivant. Ce bouton remet à zéro le formulaire et refait faire toutes les étapes à l'utilisateur.
- Lorsqu'on appuie sur le bouton suivant lors de la dernière étape, cela envoi le formulaire.
Lorsque le formulaire est envoyé, les informations de ce dernier sont enregistrés en base de données.
- Les données sont envoyées de manière chiffrées à la base de donnée.
- Un nouvel utilisateur est créé en base de données avec les données remplis dans le formulaire.
- Enregistrement des données utilisateur : "post('https://api.pot-app.be/api/register', user)"
- Création du profil utilisateur : "post("https://api.pot-app.be/api/profile/", user)"
- Chaque étape du stepper doit bien être bloquée avant de pouvoir remplir l'étape d'après.
- Le champ email ne peut pas être validé s'il est mal rempli (pas de @).
- Le champ password ne peut pas être validé s'il n'est pas de minimum 8 caractères.
- Une fois une étape passée, l'utilisateur peut revenir en arrière (bouton précédent). Et revenir à l'étape d'après une fois voulu (bouton suivant).
- La réinitialisation du formulaire remet à zéro tout les champs de ce dernier et ramène à la première étape du stepper.
- Lors de l'appui du bouton "envoyer" le formulaire envoi les données en base de donnée.
- Le profil est ainsi créé en base de donnée.
- L'envoi du formulaire renvoi vers le dashboard de l'utilisateur nouvellement créé.
-
Première étape sans erreur.
-
Deuxième étape avec erreur au niveau du mail.
-
Troisième étape de validation.
V 2.2 En tant que visiteur, je veux recevoir un mail de confirmation de mon inscription au site.
U 2.3 En tant qu'utilisateur nouvellement inscrit, je veux arriver sur la page de mon espace personnel.
U 3.1 En tant qu'utilisateur, je veux pouvoir m'identifier afin d'avoir accès à mon espace personnel.
U 3.2 En tant qu'utilisateur, je veux pouvoir réinitialiser mon mot de passe afin d'en créer un nouveau et d'accéder à mon espace personnel.
U 3.3 En tant qu'utilisateur, je veux être redirigé vers ma page d'espace personnel une fois connecté.
A 3.4 En tant qu'administrateur, je veux pouvoir limité le nombre de tentatives de connexion autorisé afin d'éviter les attaques par force brute.
En tant qu'utilisateur, je veux avoir accès à un espace personnel afin de gérer mes infos.
L'utilisateur devra déjà être enregistré en base de donnée et devra être connecté à son compte. Ce qui est attendu ici c'est un espace personnel permettant à l'utilisateur de pouvoir modifier ces informations tel que son nom, prénom, adresse e-mail, nom d'utilisateur... Création d'un nouveau bouton sur le dashboard.- Ce bouton sera affiché dans la sidebar du dashboard.
- Lorsqu'on clique sur ce bouton, nous sommes redirigé vers la page personnel de l'utilisateur.
- Ce formulaire possède plusieurs champs qu'il est possible de modifier.
- Ces champs doivent être pré-remplis par les infos actuelles de l'utilisateur (celles qui sont actuellement enregistrés en base de donnée).
- L'utilisateur peut appuyer sur un bouton pour confirmer les changements fait.
- Ces changements sont envoyés en base de donnée et les champs non-changé sont envoyés avec leurs anciennes valeurs.
- Le formulaire possèdera une en-tête avec une image arrondi en haut de ce dernier.
- Le formulaire sera composé de deux colonnes possédant les champs à remplir ainsi que d'un bouton permettant de switcher entre le mode "changement de donnée" et le mode affichage des données actuelles.
- put('https://api.pot-app.be/api/users/'+ user_id +'/', data)
- Les données une fois envoyées doivent être modifié en base de donnée.
- Les champs doivent être pré-rempli avec les informations actuellement en base de donnée.
- Lorsque l'utiliateur clique sur le bouton submit ce dernier doit envoyer seulement la modification des champs changés.
U 4.2 En tant qu'utilisateur, je veux être capable de modifier mes informations personnelles afin d'effectuer des changements si besoin.
U 5.1 En tant qu'utilisateur, je veux avoir la possibilité d'accéder à mon potager virtuel afin d'ajouter/enlever une parcelle.
U 5.2 En tant qu'utilisateur, je veux pouvoir assigner des plantes à ma/mes parcelle(s).
U 5.3 En tant qu'utilisateur, je veux pouvoir modifier mon assignation des plantes afin de pouvoir changer les plantes.
U 5.4 En tant qu'utilisateur, je veux pouvoir recevoir des informations sur les plantes que j'ai décidé de planter afin de savoir comment régler l'arrosage.
En tant qu'utilisateur, je veux pouvoir demander des conseils sur ce que je dois planter afin d'optimiser mon rendement.
La base de données doit posséder les infos nécessaires : la consommation des plantes, les anciennes plantes plantées dans une certaine parcelle par un certain utilisateur avec sa date de plantation et les dates correspondant au début et à la fin de récolte des plantes. Les conseils seront accessible via un bouton "conseillez-moi" qui une fois appuyé, affiche une extension de la popup "ajout d'une parcelle". Ces conseils vont consister en la proposition de plantes à planter qui correspondent à plusieurs critères expliqués ci-dessous. Création d'un bouton conseillez-moi.- Ce bouton n'est accessible que lorsque l'utilisateur commence le processus d'ajout d'une parcelle. Il se trouve en-dessous de l'input de la plante.
- Ce bouton n'est accessible que lorsque la date de plantation est insérée. Ceci est visible car lorsque l'utilisateur appuie sur le bouton sans avoir ajouter de date, le bouton alors se voit attribuer l'animation "shake" et un tooltip communique le critère nécessaire pour débloquer le bouton.
- Lorsque l'utilisateur entre la date de plantation, il est alors possible d'appuyer sur le bouton. Lorsque cette date est insérée, la liste des plantes conseillées est déterminée. Les étapes sont:
- Tout d'abord, une première requête api (url api numéro 1) renvoie la liste des plantes qui ont été récoltées dans cette même parcelle par l'utilisateur avant la date de plantation donnée dans l'input. Ce résultat étant trié sur la date de plantation, il nous suffit de prendre la première plante de l'array.
- Ensuite, il faut initialiser à une string vide la variable qui représente le nom de la dernière plante plantée dans la parcelle avant la date de plantation (on l'appellera B ici) et la variable qui sera utilisé pour la prochaine requête (on l'appellera A ici).
- Il faut, par après, déterminer quel élément parmis ceux présent dans la terre et nécessaire aux plantes est le plus ou le moins consommé ainsi que reprendre le mois, assigner le nom de la plante à B et le jour de la date de plantation. La variable A devra être enregistrée sous la forme "hTaT100": "h" précise si nous sommes face à une plante qui ne consomme pas beaucoup de cet élément ("l" signifie le contraire, on le choisi lorsque tout les composant de la plante ne dépasse pas un seuil prédéfini et que par conséquent, on veut conseiller une plante qui en consomme plus), "a" détermine quel élément sera pris en compte ("a" pour l'azote, "ph" pour phosphore et "po" pour potassium), 100 représente la valeur de l'élément pris en compte pour la plante et le tout séparé par des T en majuscule. Il est important de laisser à cette variable une string vide si, par hasard, aucune plante n'a été plantée donc si le premier item du résultat est undefined.
- Enfin, la deuxième requête (url api numéro 2 ou 3 si "donnee" est une string vide) renvoie une liste de plantes que répondent aux critères. Il faut ensuite éventuellement enlever le nom de la plante précédemment plantée dans cette parcelle et mélanger l'ordre de la liste pour garantir des options variées.
- si la liste est vide en prenant en compte les composant, ré-assigner une string vide à la variable A. Dés lors, nous retournons une liste de légumes de saison.
- Appuyer sur le bouton va dévoiler une extension de l'ajout de parcelle. Celle-ci va donc être deux fois plus grande et elle va dévoiler à sa droite les conseils.
- L'extension présente alors sous la forme de bouton radio, les trois premières plantes de l'array -mélangée au préalable.
- un petit texte dynamique présente quels critères ont été pris en compte:
- la saison dans tout les cas
- le composant pris en compte et le nom de la plante si il y en avait une et si ça renvoie minimum une plante.
- le choix d'une des options du conseil va ajouter le nom de la plante dans l'input du nom et permettra l'ajout de la parcelle en définitive.
- 'https://api.pot-app.be/api/parcelle-plantes/?numparcel='+parcel+'&userid='+this.get_user_id()+'&date='+date
- 'https://api.pot-app.be/api/plante/?month='+month+'&day='+day+'&comp='+donnee
- 'https://api.pot-app.be/api/plante/?month='+month+'&day='+day+'
- Bouton présent dans le processus de l'assignement d'une parcelle
- Bouton annuler pour annuler le conseil
- Demande de la date de plantation
- Impossibilité d'appuyer sur le bouton sans la date de plantation
- Le conseil prend en compte la saison et l'ancien plant si il y en a
- liste de maximum trois plantes conseillées
- Ne pas conseiller la même plante qui a été plantée en dernière
- Le conseil prend en compte un seuil, si l'ancienne plante ne consomme jamais au dessus, on conseille des plantes qui consomme beaucoup. Sinon, on prend le composant le plus consommé et on conseille des plantes qui en consomme moins
- mélange de la liste de plantes conseillées pour des choix variés
- possibilité d'ajouter la parcelle en choisissant l'une des options
- si aucune plante n'est retournée lorsqu'on demande une liste en fonction des composant, il faut donner 3 légumes de saisons
- Message qui demande la date de plantation et une animation lorsqu'on appuie en ayant le champ vide.
- Proposition des plantes en fonction de l'ancienne plante et de la saison en supprimant l'ancienne plante de la liste si elle y est et en donnant une liste de légume de saisons si la liste est vide, tout en mélangeant l'ordre pour un choix varié.
- Ajout des données
- Ajout de la parcelle en sélectionnant une proposition de la partie conseil



U 6.2 En tant qu'utilisateur, je veux pouvoir annuler mon choix afin de pouvoir planter ce dont j'ai envie.
U 7.1 En tant qu'utilisateur, je veux pouvoir gérer la hauteur de l'arrosage afin d'arroser la plante à bonne hauteur.
En tant qu'utilisateur, je veux que le taux d'humidité du sol détermine s'il faut arroser la parcelle.
Avoir le matériel nécessaire à la bonne réalisation de l'user story. Il faut donc être équipé d'un arduino, d'une sonde mesurant le taux d'humidité du sol, de la terre assez sèche et des cables en cuivre reliant la sonde à l'arduino. Une sonde récupère les infos d'humidité du sol et ces infos vont ensuite être utilisés pour ajuster la quantité d'arrosage requis. Mise en place du matériel utiliséLa mise en place consiste en:
- Brancher la PIN VCC de la sonde à la PIN 5 Volts de l'arduino.
- Brancher la PIN Ground de la sonde à la PIN GND de l'arduino.
- Brancher la PIN analogique de la sonde à une des PIN anologique de l'arduino.
- Enfoncer la sonde dans la terre sèche.
Récupération des valeurs que nous indique la sonde
Il s'agit d'une valeur analogique allant de 0 à 1000 calculant la résistance qui rencontre le courant qui passe de l'anode à la cathode de la sonde. Plus la valeur sera petite moins il y aura de résistance et par conséquence moins il y aura d'eau dans la terre. Lors du processus de récupération nous allons faire passer les données reçues par la sonde dans une fonction qui convertira la valeur analogique en pourcentage pour avoir une facilité de lecture et un pourcentage d'humidité.
Déterminer un seuil d'humidité
Il nous faut déterminer un seuil acceptable qui nous permettra de déterminer en dessous de quel pourcentage d'humidité nous voulons que notre système arrose la parcelle. Pour ce faire nous avons pris de la terre relativement sèche. Nous avons mesuré le pourcentage d'humidité de la terre sèche, sa valeur étant de 50%. L'étape suivante étant d'arroser progressivement la terre. Une fois la terre bien gorgé d'eau la valeur d'humidité était à 75%. On a donc décidé que si la terre était en dessous de 55%, le système devra prendre en charge l'arrosage de cette parcelle.
Traitement des données que nous a envoyé les sondes
Tout d'abord, nous allons enregistrer le pourcentage d'humidité que nous recevons des sondes dans un array d'integer. Nous allons ensuite identifier la valeur la plus basse pour voir quelle parcelle a prioritairement le plus besoin d'eau. Nous comparons ensuite cette valeur avec notre seuil minimal. Si elle est plus petite on demande à notre arduino de calculer le besoin en eau de la parcelle pour qu'elle soit ensuite arrosé de cette quantité. Si elle est plus grande on continue à récupérer les informations des sondes jusqu'à ce que la valeur la plus prioritaire passe en dessous de notre valeur seuil.
- Bonne réception des données transmise par les sondes.
- La valeur analogique est transformé en pourcentage d'humidité.
- La parcelle ayant le taux d'humidité le plus bas et en dessous du seuil rentrera dans le calcule du besoin d'eau.
- Mise en place du matériels nécessaires pour la bonne mise en oeuvre de l'user story:
- ajoute progressif de l'eau afin de déterminer un seuil:


U 7.3 En tant qu'utilisateur, je veux que mes parcelles soient arrosées de la quantité d'eau optimale selon le besoin de la plante.
En tant qu'utilisateur, je veux pouvoir avoir accès à des graphiques sur la consommation de ma parcelle afin d'en observer l'évolution.
Les sondes doivent récupérer les données de la quantité d'eau déjà écoulée. Le but ici est de créer une page où l'on peut avoir accès à des graphes représentant la consommation d'eau de nos parcelles sous différentes forme. Je veux que deux types de graphiques soient disponible en fonction des données que je veux visualiser.- Les graphiques en ligne (voir mockup) pour les données qui varient en fonction du temps, comme la température extérieure, l'humidité extérieure ou encore l'humidité du sol.
- Les graphiques en colonne (voir mockup) pour pouvoir voir la quantité d'eau qui a été déjà deversée sur ma parcelle pour chaque jour.
- Sur l'axe de abscisses se trouve l'unité de temps qui sera affichée par sa date et son heure. C'est l'axe qui ordonnera les données dans le temps. Les anciennes données seront proche de 0 et les nouvelles à gauche.
- Sur l'axe des ordonnées se trouve l'unité selon laquelle nous voulons faire le graphique. Les plus petites données tendent vers 0 et elles montent en fonction de l'ordonnée. Les possibilités de valeurs sont :
- L'humidité du sol de notre parcelle en %, ou l'ordonnée sera bloquée à 100 pour une meilleur visibilité des données.
- L'humidité extérieure en %, ou l'ordonnée sera bloquée à 100 pour une meilleur visibilité des données.
- La température extérieure en °C.
- Pour le taux d'humidité dans le sol, celui-ci se trouve dans la partie "information supplémentaire de ma parcelle". (Voir US 5.4)
- Pour le taux d'humidité dans l'air, celui-ci se trouve dans "mon profil d'utilisateur". (Voir US 4.1)
- Pour la température extérieure, celui-ci se trouve dans "mon profil utilisateur". (voir US 4.1)
- Sur l'axe des abscisses se trouve chacun des jours de la semaine.
- Sur l'axe des ordonnées se trouve la quantité d'eau déversée en L ayant un maximum de "x".
- Quand je clique sur plus d'infos pour une de mes parcelles, une requête est faite pour récuperer la quantité d'eau qui a été deversée les 7 derniers jours sur cette parcelle. Ce qui permettra de comparer la quantité d'eau utilisée chaque jour.
- Je veux que la graphique d'eau déversée soit accessible depuis la partie "information supplémentaire de ma parcelle". (Voir US 5.4)
- Les donnees liées à la au user: https://api.pot-app.be/api/donnees-user/{user-id}/
- Les donnees liées à la parcelle filtrer sur la date: https://api.pot-app.be/api/donnees-parcelle/{user-id}/?date={a partir de} - Les graphiques affichés affiche les données correctes et dans le bon ordre.
- L'utilisateur peut visualiser ses données de maniere claire.
- L'utilisateur peut décider de combien de temps en arrière il veut aller pour visualiser ses données.
A 8.2 En tant qu'administrateur, je veux pouvoir récupérer les données de chaque utilisateur afin de calculer la quantité d'eau économisée.
U 9.1 En tant qu'utilisateur, je veux pouvoir avoir accès à un historique de ce que j'ai planté.
A 9.2 En tant qu'administrateur, je veux pouvoir avoir des statistiques sur ce qui a le plus été planté et à quel période.
U 10.1 En tant qu'utilisateur, je veux avoir accès a un magasin pour acheter l’arroseur automatique.