MBDS EMSI Marrakech et Côte d'Ivoire 2020-2021

De $1

Version de 08:17, 19 Avr 2024

cette version.

Revenir à liste des archives.

Voir la version actuelle

Introduction

Dans ce cours on va utiliser la "MEAN STACK" dans le cloud, c'est-à-dire MongoDB + Express + Angular + NodeJS. Ce sera l'occasion de voir les avantages et les inconvénients de cette solution, et comparer Angular + TypeScript à des solutions concurrentes.

Outils nécessaires

Pour ce cours vous aurez besoin des outils suivants :

  • NodeJS et npm à jour (installer depuis Nodejs.org)
  • Visual Studio Code ou équivalent (WebStorm par ex.)
  • Une connexion internet.

Séance 1 : introduction aux WebComponents et aux front-ends modernes

Séance 2 : suite intro angular (data binding, formulaires, communication parents/enfants)

On continue... On utilise le même support de cours à partir de la page 53.

Séance 3 : services et router Angular 

On continue, on utilise le même support de cours à partir du tansparent 101 

Séance 4 : routeur suite (gestion des autorisations) et mise en place d'une BD MongoDB dans le cloud

On continue, on utilise le même support de cours à partir du tansparent 169 

Séance 5 : Présentation de RxJS puis hébergement dans le cloud sur heroku.com

RxJS :

Mongoose :

  • Mongoose site officiel (faire le tutoriel, puis dans un second temps regarder la partie "plugins", en particulier la pagination).

Hébergement sur github et déploiement sur Heroku:

  • Projet zippé de la fin de la séance. Dezipper, cd dans le dossier assignment-app, ng serve. Pour tester la version "heroku", faire npm install, ng build, node server.js (et ça va utiliser MON api sur heroku, si vous déployez votre propre api sur heroku, penser à changer l'url dans assignments-service.ts dans le code angular).
     
  • Vidéo du cours (18h-22h)  

Séance 6 : peupler la base avec des données de test, scrolling infini etc.

Travail à faire :

  1. Ajouter du code pour "peupler la base Mongo, disont, avec 300 à 500 assignments dont vous aurez généré les valeurs aléatoirement",
    • Ajoutez un bouton "Peupler Base" qui va générer des centaines d'assignments avec des valeurs aléatoires. Vous pourrez utiliser par exemple le site https://www.generatedata.com/ ou mieux https://mockaroo.com/ comme nous l'avions fait l'an dernier.
    • Vous génererez un tableau JSON d'assignments que vous mettre dans un fichier assignementData.js dans votre projet.
    • Vous l'importerez dans le composant qui affiche le bouton et écrirez une méthode supplémentaire "peuplerBD" dans le service assignments.
    • Vous testerez cela ensuite...
       
  2. Etudiez comment on pourrait implémenter un "scrolling infini" à la Facebook.... on fait défiler la page et quand on arrive en bout cela envoie automatiquement une nouvelle requête au serveur qui récupère de nouvelles données, et on peut continuer à scroller. Voir doc angular ici et aussi un tuto qui montre comment on peut encore améliorer les choses en ajoutant à la liste des assignments de nouvelles données qu'on va chercher dans la base au fur et à mesure qu'on scrolle... la méthode fetchmore proposée doit être chez nous (sans doute avec un autre nom) dans l'assignment service... 
  3. Regarder comment ajouter la pagination au code serveur (avec Mongoose), par exemple grace à ce tutoriel ou encore grace à celui-là.

Correction :

Sujet du mini projet : améliorer le TP sur les Assignments

A faire an Angular.

Contraintes :

  • A faire en binôme.
     
  • Au moins 500 assignments dans la base de données (utilisez un générateur de données)
     
  • A rendre sur github, gros bonus si hébergé sur Heroku.com. Penser à faire un README qui détaille vos contributions et qui m'explique en détail ce que je dois faire pour le faire tourner sur ma machine.
     
  • Vidéo pas trop longue illustrant une démo et un point remarquable de votre projet (ce que vous avez fait mais que les autres n'ont pas fait, un point difficile dont vous êtes fiers, etc.)
     
  • Date de rendu : le 7 Mars 2021, non nénociable. Je mets zéro après cette date.
  • Pompage = zéro (je l'ai fait pour 4 personnes l'an dernier)  Vous avez le droit de récupérer des bouts d'un autre groupe mais en le disant clairement ("J'ai repris ce bout de code ici sur le net voilà l'URL, et ça du groupe xxx et yyy qui m'ont aidé")

Détail du travail attendu

Vous apporterez les améliorations suivantes à ce TP :

  • Ajouter une gestion de login/password
    • Cas simple : vous codez en dur dans le service d'authentification une liste de login/passwords valides.
    • Cas mieux : en créant une collection Utilisateurs dans MongoDB, et en validant que le user/password est correct.
    • Pour les très forts: regardez comment utiliser l'authentification à l'aide de Json Web Tokens (JWT), en suivant par exemple ce tutoriel
    • Comme dans le TP on gérera le cas particulier admin.
       
  • Ajouter de nouvelles propriétés au modèle des Assignments:
    • Auteur (nom de l'élève)
    • Matière (Base de données, Technologies Web, Grails, etc.)
      • Une image sera associée à chaque matière et une photo du prof
    • Note sur 20, on ne peut marquer "rendu" un Assignment qui n'a pas été noté.
    • Remarques
       
  • Améliorer l'affichage des Assignments
    • Puisqu'on a ajouté de nouvelles propriétés, il faudra mettre à jour les différents endroits où les Assignments sont affichés/édités/saisis, en particulier :
      • Par exemple, afficher dans la liste des Assignments chaque Assignment sous forme d'une Material Card, avec le titre, la date, l'élève, une petite image illustrant la matière, la photo du prof en petit en haut à droite.
    • La vue détails montrera en plus les remarques, la note s'il a été rendu, etc.
    • Les formulaires d'ajout et de détails proposeront un choix fixe de matières (et associeront automatiquement le prof et l'image illustrant la matière)
       
  • Afficher les Assignments dans deux onglets séparés selon qu'ils ont été rendus ou pas encore rendus
    • Lorsqu'on met une note à un Assignment et il devient rendu et apparaitra dans l'onglet "Rendu"
       
  • Optionnel (mais simple à faire): utiliser un Formulaire de type Stepper (formulaire en plusieurs étapes) pour l'ajout d'Assignments (éventuellement pour la modification)
     
  • Rendre le tout plus joli, essayez de ne faire tous la même chose.
     
  • Bonus : hébergement sur Heroku.com

  • Le sujet est ouvert, vous pouvez ajouter ce qui vous semble amusant/pertinent:
    • (difficulté moyenne) drag and drop entre la liste des Assignments non rendus et rendus, qui déclenchera la notation,
    • (facile) Ajout de messages de notification (SnackBar Material)
    • (bcp de travail) Collection d'élèves et de profs pour faciliter l'association devoir/élève et matières/profs
    • Etc.