jalon03 - mathieu-bergeron/aquiletour2021 GitHub Wiki

Jalon03

Notes importantes

  1. Comme au jalon02, il faut installer les __test_data__ après une fusion

     $ rm -rf aquiletour_server/__data__
     $ cp -rf aquiletour_server/__test_data__ aquiletour_server/__data__
    
  2. Chaque classe sérialisable en JSON doit être déclrée, p.ex.

     Ntro.jsonService().registerSerializableClass(DashboardModel.class);
     
    • Voir AquiletourMain.registerSerializableClass

Aperçu du projet

On est rendu à la semaine 7 de 15.

  • (✓) jalon01: prototype en ligne
  • (✓) jalon02: billetterie minimalement fonctionnelle
  • (✓) hors série
  • jalon03:
    • version ?js pleinnement fonctionnelle
    • connexion usager par courriel
    • importation des usagers par fichier .csv de ColNet
    • ajout des heures de rendez-vous dans la billetterie
  • jalon04: ajout du calendrier de cours
  • jalon05:
    • intégration du module Git
    • ajout de la messagerie
  • jalon06: config prod finale (p.ex. mongoDB, https)
  • hors série: finition (+ écrire rapports de stage)

Objectifs du jalon03

Aiguilleur.ca:

Semaine 1:

  1. version JS complétement fonctionnelle
  2. importation des usagers par fichier .csv de ColNet
  3. version mobile) déplacer les rendez-vous

Semaine 2:

  1. connexion usager par courriel et permissions des usagers
  2. ajout des heures de rendez-vous dans la billetterie

Ntro.ca:

  1. version JS complétement fonctionnelle
  2. authToken et permissions des usagers
  3. observer un modèle qui est sur le serveur

Objectifs détaillés

  • Marwane (Aiguilleur) et Benjamin (Ntro):

    • version JS complétement fonctionnelle
      • ajouter les capteurs d'événements
      • réagir ET ajuster la barre d'adresse avec pushState
      • déterminer l'usager avec les cookies
  • Joseph (Js):

    • version mobile) déplacer les rendez-vous
  • Marwane (Java), Joseph (Html/JS):

    • importation des usagers par fichier .csv de ColNet
      • (chargement du fichier)
    • ajout des heures de rendez-vous dans la billetterie
  • Marwane (Java), Joseph (Html) et mroussel (Serveur):

    • connexion usager par courriel
  • Benjamin:

    • authToken et permissions des usagers
  • mbergeron:

    • fusion
    • modèle de données pour le calendrier de cours
    • observation d'un modèle qui réside sur le serveur
    • dette technique
      • continuer la reconception Ntro.service()
      • MessageFactory et connexions WebSocket
      • séquence d'initialisation
      • NtroTaskTests: le GraphTrace est écrit mais pas testé
  • mroussel:

    • configuration du nom aiguilleur.ca (+ https et smpts)
    • sauvegarde des données MariaDB et MongoDB
  • nleduc:

    • base de données module Git
    • extraction des données de Git

Élus de la semaine

  • Semaine 7: Benjamin
  • Semaine 8: Marwane

Notes importantes

  • Pour afficher les graphes de tâches, il faut installer https://graphviz.org/ et le mettre dans le PATH
  • Pour désactiver la génération des graphes de tâches:
    • DynamicHandler.java, s'assurer d'avoir les lignes suivantes en commentaire (autour de ligne 154)
      • //backendTrace.addGraphWriter(new GraphTraceWriterJdk(new File("__backend_task_graphs__", path.toFileName())));
      • //trace.addGraphWriter(new GraphTraceWriterJdk(new File("__task_graphs__", path.toFileName())));

Exemples d'interaction avec module Git

  • NOTES:

    • le "_C" est le type d'objet (la classe Java)
    • les dates sont en epoch time
  • Au moment où l'étudiant ajout un URL de dépôt Git dans le calendrier

    • requête POST /_gitapi avec ce JSON dans le body

        {
            "_C":"RegisterGitRepo",
            "repoUrl":"https://github.com/patate/atelier.git",
            "semesterId":"H2021",
            "studentId":"1234567",
            "courseId":"3C6",
            "groupId":"01",
            "exercisePath":"/etape1/atelier",
        }
        
      • NOTE: "exercicePath":"/" pour dire que c'est le dépôt pour tout le cours
    • réponse:

      • 200 OK
      • ou erreur si le dépôt existe déjà
  • Demander une liste de commits

    • requête POST /_gitapi avec ce JSON dans le body

        {
            "_C":"GetCommitListMessage",
            "semesterId":"H2021",
            "studentId":"1234567",
            "exercisePath":"/3C6/etape1/*",
            "fromDate": "16152151235"
            "toDate": "1615215942"
        }
        
    • réponse en JSON

        {
            "_C":"CommitList",
            "semesterId":"H2021",
            "studentId":"1234567",
            "exercisePath":"/3C6/etape1/*",
            "fromDate": "16152151235"
            "toDate": "1615215942"
            "commits": {
                "_C":"ObservableCommitList",
                "value":[
                    {
                        "_C":"Commit",
                        "exercicePath":"/3C6/etape1/atelier4/exercice2",
                        "modifiedFiles": ["/src/atelier4/Exercise2.java",".project"],
                        "estimatedEffort": 34,
                        "commitMessage": "Blah blah",
                        "timestamp": "1615215942"
                    },
                    {
                        "_C":"Commit",
                        "exercicePath":"/3C6/etape1/atelier1/exercice3",
                        "modifiedFiles": ["/src/atelier2/Exercise3.java","REAMDE.md"],
                        "estimatedEffort": 2,
                        "commitMessage": "Blih blih",
                        "timestamp": "1615215234"
                    }
                ]
            }
        }
        
    • requête POST /_gitapi avec ce JSON dans le body

        {
            "_C":"GetLateStudentsMessage",
            "semesterId":"H2021",
            "groupId":"01",
            "exercisePath":"/3C6/etape1/atelier4/exercice5",
            "completionKeywords":"Exercice 5"
            "deadline": "1615215942"
        }
        
    • réponse en JSON:

        {
            "_C":"LateStudents",
            "semesterId":"H2021",
            "groupId":"01",
            "exercisePath":"/3C6/etape1/atelier4/exercice5",
            "deadline": "1615215942"
            "studentIds": ["1234567","7654321"]
        }
        
    • requête POST /_gitapi avec ce JSON dans le body

        {
            "_C":"GetStudentSummariesMessage",
            "semesterId":"H2021",
            "groupId":"01",
            "exercisePath":"/3C6/etape1/atelier4/exercice5",
            "completionKeywords":"Exercice 5"
            "deadline": "1615215942"
        }
        
    • réponse en JSON:

        {
            "_C":"StudentSummaries",
            "semesterId":"H2021",
            "groupId":"01",
            "exercisePath":"/3C6/etape1/atelier4/exercice5",
            "deadline": "1615215942"
            "summaries": [
                {
                    "_C":"StudentSummary",
                    "studentId":"1234567",
                    "lastCommit": "1615215123",
                    "exerciceCompleted: true
                },
                {
                    "_C":"StudentSummary",
                    "studentId":"7654321",
                    "lastCommit": "1615215123",
                    "exerciceCompleted: false
                }
            ]
        }
        

Exemples de visualisation du progrès en Git

En html (copier-coller dans un fichier local et ouvrir avec un navigateur)

Animations

  1. Cliquer sur un lien ET la page destination est en mémoire
    • on veut animer légèrement le contenu réel de la page
  2. Cliquer sur un lien ET la page destination n'est PAS en mémoire
    • on veut animer un sablier, PUIS animer légèrement le contenu une fois qu'il est disponible
  3. Cas particulier: animer légèrement un sous-ensemble du contenu (p.ex. une seule carte).
⚠️ **GitHub.com Fallback** ⚠️