api_git - mathieu-bergeron/aquiletour2021 GitHub Wiki
-
.*Id
est une chaîne où:- taille de 1 à 255 caractères
- est un nom fichier valide en Linux
- en particulier:
[a-zA-Z0-9._-]
-
teacherId
est en minuscule
-
.*Path
est un chemin de la forme/a/b/c/...
oùa
,b
,c
sont desId
valide
-
teacherId
est unique -
(teacherId, courseId)
est unique -
(teacherId, semesterId)
est unique
- Les dates sont en epochTime UTC, en secondes (c-à-d le Unix time)
- 0 == 1 jan 1970 UTC
-
Tableau de bord
== msg ==>
Module Git- un message vers le module Git
- POST à
/_git_api
avec le JSON du message (dans le body) - réponse: 200 OK ou autre
-
Tableau de bord
<== msg ==
Module Git- un message vers le tableau de bord
- POST à
/_http/messages/
avec le JSON du message (dans le body) - réponse: 200 OK ou autre
-
Tableau de bord
== req ==>
Module Git- une requête vers le module Git
- POST à
/_git_api
avec le JSON du message (dans le body) - réponse: 200 OK ou autre + dans le body:
- le JSON d'un modèle
-
Tableau de bord
== msg ==>
Module Git -
Envoyé à chaque fois qu'un prof ajoute un exercice de type Git au calendrier de cours
-
JSON du message
{ "_C": "RegisterExercise", "teacherId": "mathieu.bergeron", "courseId": "StruDon", "semesterId": "MaSession", "groupId": "Mardi", "exercisePath": "/tp1/exercice1" "repoPath": "/tp1" "sourceFolderPath": "/exercice01", "completionKeywords": "Exercice 1", }
-
NOTE:
exercisePath
est toujours à partir de la racine du calendrier
- Tableau de bord
== msg ==>
Module Git - Comme
RegisterExercise
, mais pour supprimer l'exercice
-
Tableau de bord
== msg ==>
Module Git -
Envoyé à chaque fois qu'un prof modifie un exercice de type Git au calendrier de cours
-
JSON du message
{ "_C": "ModifyExercise", "teacherId": "mathieu.bergeron" "courseId": "StruDon", "semesterId": "H2021", "groupId": "01", "exercisePath": "/tp1/exercice1" "oldRepoPath": "/tp1" "oldSourceFolderPath": "/exercice01", "oldCompletionKeywords": "Exerce 1", "repoPath": "/" "sourceFolderPath": "/TP1/exercice01", "completionKeywords": "Exercice 1", }
-
Tableau de bord
== msg ==>
Module Git -
Envoyé à chaque fois qu'un prof ajoute un Git repo à un cours
-
JSON du message
{ "_C": "RegisterGitRepoForCourse", "teacherId": "nicolas.leduc" "semesterId": "H2021", "courseId": "IntroProg", "repoPath": "/tps/depotgit" }
-
Tableau de bord
== msg ==>
Module Git -
Envoyé à chaque fois qu'un étudiant ajoute une URL Git dans son calendrier de cours
-
JSON du message
{ "_C": "RegisterGitRepo", "teacherId": "nicolas.leduc" "courseId": "IntroProg", "semesterId": "H2021", "groupId": "01", "studentId": "bob.berancourt", "repoPath": "/tps/depotgit" "repoUrl": "https://github.com/test/test.git", }
- Tableau de bord
== msg ==>
Module Git - Comme
RegisterGitRepo
, mais pour supprimer le dépôt GIT - Détruit toutes les informations relatives au dépôt dans la BD
-
Tableau de bord
<== msg ==
Module Git -
Envoyé après avoir cloné un dépôt
-
JSON du message
{ "_C": "OnClone", "repoUrl": "https://github.com/test/test.git", "teacherId": "nicolas.leduc" "courseId": "IntroProg", "semesterId": "H2021", "groupId": "01", "studentId": "bob.berancourt", "repoPath": "/Semaine01" }
-
Tableau de bord
<== msg ==
Module Git -
Envoyé si cloner un dépôt a échoué
-
JSON du message
{ "_C": "OnCloneFailed", "repoUrl": "https://github.com/test/test.git", "teacherId": "nicolas.leduc", "courseId": "IntroAlgo", "semesterId": "H2021", "groupId": "01", "studentId": "1234500", "repoPath": "/Semaine 01" }
-
Tableau de bord
<== msg ==
Module Git -
Envoyé après avoir mis à jour un dépôt
-
JSON du message
{ "_C": "OnPull", "repoUrl": "https://github.com/test/test.git", "teacherId": "nicolas.leduc", "courseId": "IntroProg", "semesterId": "H2021", "groupId": "01", "studentId": "bob.berancourt", "repoPath": "/Semaine 01" }
-
Tableau de bord
<== msg ==
Module Git -
Envoyé si la mise à jour d'un dépôt a échoué
-
JSON du message
{ "_C": "OnPullFailed", "repoUrl": "https://github.com/test/test.git", "teacherId": "nicolas.leduc", "courseId": "IntroAlgo", "semesterId": "H2021", "groupId": "01", "studentId": "1234500", "repoPath": "/Semaine 01" }
-
Tableau de bord
<== msg ==
Module Git -
Envoyé si l'url d'un git hook n'existe pas dans la DB
-
JSON du message
{ "_C": "OnUnknownRepoURL", "repoUrl": "https://github.com/test/test.git", }
-
Tableau de bord
<== msg ==
Module Git -
Envoyé après un pull
-
JSON du message
{ "_C": "OnNewCommits", "teacherId": "mathieu.bergeron", "courseId": "StruDon", "semesterId": "H2021", "groupId": "01", "studentId": "1234500", "latestCommitBeforeThis": "asdfasdfw34qfadsfasdrf3", "commits": [ { "_C": "Commit", "commitId": "asdfasdfw34qfadsfasdrf3", "exercisePathIfCompleted": "Semaine 10/Etape 01/Exercice 10", "modifiedFiles": [ { "path": "/src/atelier4/Exercise2.java", "estimatedEffort": 34, "exercisePath": "/Étape 1/Atlier 4/Exercice 2", }, { "path": "/src/atelier2/Exercise3.java", "estimatedEffort": 3, "exercisePath": "/Étape 1/Atlier 2/Exercice 3", } ], "commitMessageFirstLine": "Blah Blah", "commitMessage": "Blah Blah", "timeStamp": "1615215942" }, ] }
-
Tableau de bord
<== msg ==
Module Git -
Envoyé après un pull si un des commentaires de commit match les
completionKeywords
d'un exercice -
JSON du message
{ "_C": "OnExerciseCompleted", "teacherId": "mathieu.bergeron", "courseId": "StruDon", "semesterId": "H2021", "groupId": "01", "studentId": "1234500", "exercisePath": "/TP1/Exercice 1" }
-
Tableau de bord
<== msg ==
Module Git -
Envoyé après un update si le statut d'un exercice a changé (complété <-> incomplet) selon les mots clés
-
JSON du message
{ "_C": "OnExerciseCompletedUpdate", "teacherId": "mathieu.bergeron", "courseId": "StruDon", "semesterId": "H2021", "groupId": "01", "studentId": "1234500", "exercisePath": "/TP1/Exercice 1" "exerciseCompleted" : "False" }
-
Tableau de bord
<== msg ==
Module Git -
Envoyé après un update si l'exercice associé à un fichier dans un commit a changé
-
JSON du message
{ "_C": "OnCommitModelUpdate", "teacherId": "mathieu.bergeron", "courseId": "StruDon", "semesterId": "H2021", "groupId": "01", "studentId": "1234500" }
-
Tableau de bord
== req ==>
Module Git -
JSON de la requête
{ "_C": "GetCommitsForRepo", "teacherId": "mathieu.bergeron", "courseId": "StruDon", "semesterId": "H2021", "groupId": "01", "studentId": "1234500", "repoPath": "/semaine01/depotgit" "fromDate" : 1615215942, "toDate" : 1615216442, "recursive": true }
-
NOTE:
-
/
: les commits de tous les dépôts -
/semaine01
: les commits des dépôts qui match/semaine01
- recursive est à False par défaut s'il est absent de la requête
- fromDate/toDate sont à -1 si non-désiré
-
-
Réponse: un modèle
CommitListModel
-
Tableau de bord
== req ==>
Module Git -
JSON de la requête
{ "_C": "GetCommitsForExercise", "teacherId": "mathieu.bergeron", "courseId": "StruDon", "semesterId": "H2021", "groupId": "01", "studentId": "1234500", "exercisePath": "/Étape 1" "fromDate" : 1615215942, "toDate" : 1615216442, "recursive": false }
-
NOTE:
-
/
: les commits de tous les exercice- retourne vide si aucun exercice
-
/TP1
: les commits des exercices dont le chemin commence par/TP1
- (de tous les dépôts qui match)
- recursive est à True par défaut s'il est absent de la requête
- fromDate/toDate sont à -1 si non-désiré
-
-
DÉSIRÉ: mettre "*" comme courseId et avoir tous les commits de l'étudiant
-
Réponse: un modèle
CommitListModel
-
Tableau de bord
== req ==>
Module Git -
JSON de la requête
{ "_C": "GetLateStudents", "teacherId": "mathieu.bergeron", "courseId": "StruDon", "semesterId": "H2021", "groupId": "Mardi", "exercisePath": "/TP1/Exercice 1", "deadline": 1615215942 }
-
Réponse: un modèle
LateStudentsModel
-
Tableau de bord
== req ==>
Module Git -
JSON de la requête
<pre> { "_C":"GetStudentSummaries", "teacherId": "nicolas.leduc", "courseId": "IntroProg", "semesterId": "H2021", "groupId": "01", "exercisePath": "/Semaine 01/Atelier 1/Exercice 4", "deadline": 1615215942 } </pre>
-
Réponse: un modèle
StudentSummariesModel
{ "_C": "CommitListModel", "teacherId": "nicolas.leduc", "courseId": "IntroProg", "semesterId": "H2021", "groupId": "01", "studentId": "1234500", "fromDate": 16152151235, "toDate": 1615215942, "commits": { "_C": "ObservableCommitList", "value": [ { "_C": "Commit", "commitId": "asdfasdfw34qfadsfasdrf3", "exercisePathIfCompleted": "Semaine 10/Etape 01/Exercice 10", "modifiedFiles": [ { "path": "/src/atelier4/Exercise2.java", "estimatedEffort": 34, "exercisePath": "/Étape 1/Atlier 4/Exercice 2", "message": "Plagiat détecté", }, { "path": "/src/atelier4/Exercise2.java", "estimatedEffort": 34, "exercisePath": "/", "message": "Chemin d'exercice ambigü", }, { "path": "/src/atelier2/Exercise3.java", "estimatedEffort": 3, "exercisePath": "/Étape 1/Atlier 2/Exercice 3", "message": "", } ], "commitMessageFirstLine": "Blah Blah", "commitMessage": "Blah Blah", "timeStamp": "1615215942" }, ] } }
{ "_C":"LateStudentsModel", "semesterId":"H2021", "teacherId":"mathieu.bergeron", "courseId":"StruDon", "groupId":"01", "exercisePath":"/etape1/atelier4/exercice5", "deadline": 1615215942 "studentIds": ["1234567","7654321"] }
{ "_C":"StudentSummariesModel", "semesterId":"H2021", "groupId":"01", "exercisePath":"/etape1/atelier4/exercice5", "summaries": [ { "_C":"StudentSummary", "studentId":"1234567", "lastCommitBeforeDealine": 1615215123, "lastCommitAfterDealine": 1615215123, "exerciseCompleted": true, "exerciseCompletedBeforeDeadline": false }, { "_C":"StudentSummary", "studentId":"7654321", "lastCommitBeforeDealine": 1615215123, "lastCommitAfterDealine": 1615215123, "exerciseCompleted": false, "exerciseCompletedBeforeDeadline": false, } ] }
-
/module1/ateliers/atelier2
matchmodule1/atelier2
-
/module2/ateliers/atelier3
matchmodule2/atelier3
-
/module1/tp3
matchmodule1/src/tp3
-
/module2/tp3
matchmodule2/src/tp3
-
/module1/ateliers/atelier2
matchmodule1/src/atelier2
-
/module2/ateliers/atelier2
matchmodule2/src/atelier2
NOTE:
-
on regarde aussi si on peut générer un
sourceFolderPath
raisonable directement dans le calendrier de cours -
/semaine01/atelier1/exercice1
matchmarwane/atelier1/exercice1
-
/semaine01/atelier1/exercice2
matchmarwane/atelier1/exercice2
-
/semaine02/atelier2/exercice1
matchmarwane/atelier2/exercice1