Skip to content

7. Chapitre 6 - Conclusion et étapes suivantes

7.1. Ce qui a été construit

Ce document a porté vers des technologies actuelles le cœur fonctionnel et l’authentification de l’application [RdvMedecins] du document original de 2014 :

  • un serveur [NestJS] complet (entités [TypeORM], DAO, couche métier, couche web), exposant les 11 mêmes routes métier JSON que le serveur Spring 4 original, sur le même port (8080), toutes désormais protégées par un jeton JWT ;
  • une couche d’authentification ([@nestjs/passport] + [@nestjs/jwt]) : connexion par login/mot de passe (POST /login), jeton signé présenté à chaque requête suivante, et contrôle d’accès par rôle ([@Roles]('ADMIN') + [RolesGuard]) sur les deux routes qui modifient des données ;
  • un client [Angular] (composants standalone, signaux) offrant les mêmes fonctionnalités que le client AngularJS 1.x original - choix d’un médecin et d’un jour, consultation de l’agenda, réservation et annulation d’un rendez-vous - complété d’un écran de connexion, d’une session persistée (localStorage), d’une interface Bootstrap qui s’adapte au rôle de l’utilisateur connecté (boutons de réservation masqués pour un rôle USER), et du passage français/anglais de l’interface ([@ngx-translate/core] + [@ngx-translate/http-loader]).

La base de données n’a pas changé dans son cœur (mêmes tables medecins/clients/creneaux/rv, mêmes contraintes), à l’ajout près de la table [users] ; l’architecture générale en couches non plus - seuls les outils qui la mettent en œuvre ont été renouvelés.

Deux différences assumées avec l’authentification du document original, documentées en détail au chapitre 3 : un jeton JWT plutôt que l’entête HTTP Basic envoyé à chaque requête, et une seule colonne [role] par utilisateur plutôt qu’une relation plusieurs-à-plusieurs sur trois tables. Une troisième différence, fonctionnelle celle-ci, a été choisie délibérément pour ce portage : le rôle USER peut désormais consulter les agendas (en lecture seule), alors qu’il ne servait dans l’original qu’à illustrer un refus d’accès total.

7.2. Ce qui reste hors périmètre ou à porter

Le document original couvrait, au-delà de ce qui précède, deux sujets supplémentaires - l’un désormais traité, l’autre délibérément laissé de côté, le troisième reporté à une étape ultérieure :

7.2.1. L’internationalisation français/anglais - traitée dans ce document

Le document original proposait de basculer l’interface entre le français et l’anglais, à l’aide de la bibliothèque angular-translate. Ce portage reprend cette fonctionnalité avec son équivalent dans l’écosystème [Angular] actuel, [@ngx-translate/core] (accompagné de [@ngx-translate/http-loader], qui charge les dictionnaires fr.json/en.json par HTTP depuis le dossier public/i18n/) - cf. chapitre 5. @angular/localize, l’autre solution possible, a été écartée : elle exige une compilation séparée par langue, alors qu’ngx-translate permet de changer de langue à la volée, sans recharger la page - un comportement plus proche de celui du document original.

7.2.2. Le mode « debug » du client - délibérément hors périmètre

Le document original incluait un mode d’affichage technique, activable depuis l’interface, qui donnait accès au modèle brut (le $scope AngularJS 1.x) de la vue courante - un dispositif utile en 2014, quand les outils de développement disponibles pour inspecter une application AngularJS restaient limités. Ce portage ne le reconstruit pas : les outils de développement [Angular] actuels ([Angular] DevTools, extension officielle pour navigateur) offrent aujourd’hui, en dehors de l’application elle-même, une inspection bien plus complète des composants, de leurs signaux et de leurs entrées/sorties, que ne le ferait un panneau de débogage maison réintégré dans l’interface. Ajouter un tel panneau reviendrait à dupliquer, moins bien, un outil déjà fourni par l’écosystème - ce choix est donc définitif, et non une simple remise à plus tard.

7.2.3. Un délai réseau artificiel - reporté

Le document original permettait de régler un délai artificiel avant chaque réponse du serveur, pour observer le comportement de l’interface sur un réseau lent (indicateurs de chargement, désactivation temporaire des boutons…). Cette fonctionnalité n’a pas encore d’équivalent dans ce portage.

7.3. Un mot sur la méthode suivie dans ce document

Ce document a été écrit en s’appuyant systématiquement sur le code réellement exécuté : chaque route du serveur a été testée (y compris les scénarios d’authentification : connexion réussie/échouée, accès sans jeton, accès avec le mauvais rôle), et chaque capture d’écran du client (chapitre 5) a été obtenue en manipulant l’application réellement démarrée - navigateur Chromium piloté automatiquement, données de démonstration du script SQL fourni. Cette démarche a d’ailleurs mis au jour, pendant la préparation du document, un point d’attention concret sur l’utilisation de [TypeORM] avec les colonnes calculées ([@RelationId]) - signalé et corrigé au chapitre 3, directement dans le code livré. C’est aussi cette exigence qui explique pourquoi les captures d’écran de Postman ne figurent pas dans ce document : plutôt que de les simuler, il a semblé préférable de laisser cette étape à l’auteur du document, qui pourra les réaliser directement depuis son propre poste de travail.

7.4. Pour aller plus loin dès maintenant

En attendant les étapes suivantes de ce portage, le serveur et le client livrés avec ce document constituent une base directement utilisable pour expérimenter par soi-même :

  • ajouter un nouveau médecin ou un nouveau patient (actuellement, cela se fait uniquement en modifiant le script SQL - une route /ajouterMedecin, protégée elle aussi par [@Roles]('ADMIN'), pourrait être un premier exercice) ;
  • ajouter un troisième rôle, ou un utilisateur cumulant plusieurs rôles - l’occasion de mesurer ce que coûterait, très concrètement, l’abandon de la simplification à une seule colonne [role] (cf. chapitre 3) ;
  • modifier la présentation du client (couleurs, mise en page) sans toucher au serveur - une bonne façon de vérifier que le découpage en couches du client fonctionne comme annoncé ;
  • relire le README de chaque dossier du serveur et du client livrés : chacun explique, dans son contexte, le rôle des fichiers qu’il contient.