LICHTFELD Noam et ZHANG Pascal
Ce projet a été réalisé dans le cadre du semestre S6 à l'IMT Atlantique.
L'objectif principal était de rendre l'application fonctionnelle en établissant la liaison entre le frontend et le backend. Mon rôle s'est concentré sur :
L'implémentation de l'API : Création des routes backend pour répondre aux requêtes spécifiques du frontend.
La persistence des données : Utilisation de l'EntityManager (Java/JPA) pour la gestion et la manipulation de la base de données.
Nous avons implémenté toutes les routes qui étaient à implémenter. Nous avions terminé les routes très tôt ce qui nous a permit de prendre le temps de commenter, notamment grâce à un gros effort de travail personnel chez soi car c'est un projet qui nous intéressait. Pour en savoir plus sur une route en particulier, vous pouvez consulter les commentaires très fournis pour chacune des routes implémentées.
Nous avons pris soin de se documenter sur l'ouverture et la fermeture d'une transaction en bonne et due forme avec la database lorsqu'on utilise les méthodes post, put et delete. Nous avons donc importé l'EntityTransaction pour ces cas précis et nous avons toujours suivi le même schéma : transaction.begin(), db.persist(x) avec x l'objet qu'on veut faire persister dans la database et enfin db.flush pour assurer la persistance suivi de transaction.commit() pour mettre fin à la transaction, en ayant bien sûr pris le soin de définir EntityTransaction transaction = db.getTransaction() en amont. Pour chacune des routes où on avait à get les paramètres dans l'URL, nous utilisons event.pathParam(...) et lorsque nous avons besoin de récupérer le corps d'une requête envoyée (pour les méthodes post et put), nous utilisons event.body().asJsonObject(). On s'est efforcé aussi d'envoyer nos réponses au bon format, ceci aussi afin de s'assurer que notre frontend fonctionne correctement car nous nous sommes rendu compte par exemple que la moindre minuscule, majuscule ou tiret du bas de différence avec ce que le frontend attend fait qu'il nous renvoie automatiquement une erreur.
Pour simplifier le code, nous avons aussi créé quelques méthodes toJSON en récupérant les objets dont on a besoin dans les classes du modèle pour augmenter la clarté du code.
Au niveau des tests, nous avons pour les méthodes get utilisé directement notre navigateur internet et regardé si cela fonctionne correctement sur le frontend également. Pour les méthodes put, post et delete nous avons utilisé postman ainsi que le frontend sur lequel on peut notamment modifié les sensors et les users ainsi qu'ajouter des users ou supprimer des users.
Pour les gets, nous avons observé que tout marchait parfaitement sauf quand bien sûr nous cherchions quelque chose qui n'existait pas ou que nous ne mettions pas des paramètres au bon format. On a donc implémenté des try/catch pour gérer toutes les erreurs de format ou d'objet inexistants possible. C'est d'ailleurs la même chose que nous ferons par la suite pour les autres méthodes mais comme nous avons commencé par les gets, nous préférons dire cela en premier.
Pour le delete, nous avons observé que cela supprimait bien la personne sans soucis et les sensors se dissociaient de lui, cela marchait très bien. Nous avons testé pas mal de choses sur le frontend ; par exemple nous avions vu que lorsqu'on enlève une personne là-bas et qu'on allait sur la page d'accueil de la smart grid application, on voyait que le nb_users ne s'était pas mis à jour et lorsqu'on cliquait dessus il y avait une erreur du type "java.lang.Exception: http://host.docker.internal:8080/person/2 404 NOT_FOUND". On s'est rendu compte que c'est très probablement un problème de configuration du frontend car il tente toujours de chercher la personne 2 alors qu'elle a été supprimée. C'est peut être parce que tant que nous n'avons pas arrêté puis relancé le serveur, le frontend garde les personnes supprimées dans une sorte de cache et tente quand même de récupérer des informations sur toutes les personnes, qu'elles soient supprimées ou non, avant d'afficher les infos mais par conséquent cela ne fonctionne pas comme la personne n'existe plus. Nous constatons même que bizarrement le Nb. users reste à 2 alors qu'il ne reste plus qu'une personne (sauf quand on arrête puis relance le serveur dans ce cas cela se met bien à jour et affiche 1, il n'y a d'ailleurs plus aucune erreur lorsque nous arrêtons puis relancons le serveur) et pourtant quand nous appuyons sur Nb. users il n'y a aucune erreur qui s'affiche.
Pour le put, on check que les paramètres obligatoires sont bien présents et que la liste des owned_sensors est au bon format avec des try/catch sinon nous envoyons des messages d'erreur.
Pour les posts, comme tous les paramètres sont facultatifs on a fait les tests paramètres par paramètres pour voir si cela fonctionnait bien, notamment au niveau de l'UpdateSensorHandler où c'est là que nous avons du faire le plus attention à ce qu'il n'y ait aucune erreur qui arrive (par exemple un paramètre d'EVCharger qui tente de s'affecter à un panneau solaire) mais on a bien codé notre handler donc nous n'avons pas eu de soucis. Nous avons réglé le problème des formats en faisant des try/catch pour avoir tout au bon format encore une fois, sinon nous signalons à l'utilisateur ce qui n'est pas au bon format pour qu'il le corrige dans sa requête.
On s'est aussi rendu compte, en cohérence avec ce que d'autres groupes ont trouvé, qu'il y a à 95% de chances un problème de configuration du frontend sur un cas précis. Lorsque nous allons dans Producers ou Consumers et que nous appuyons sur Nb. grids, il y a une erreur qui s'affiche mais sans message d'erreur. Pourtant quand on clique sur Nb. grids sur la page des Users la description de la grid avec ses users, ses sensors, la production totale d'énergie et la consommation totale d'énergie sont bien affichés. Nous sommes donc quasiment certains qu'il n'y a pas de problème pour nos handlers concernant cela.
On précise que nous avons été très motivé pour finir ce projet rapidement et que cela nous a bien stimulé et challengé. Nous sommes content de notre travail.