Bonjour, nouvelle stagiaire inside,
L'idée de mon stage étant d'étudier le besoin et de proposer une
solution visant à synchroniser le temps saisi dans jTimer avec
la gestion de projet dans chorem, voici les différentes
idées/réflexions que j'ai noté par rapport à ce qui m'a été
donné comme informations et ce que j'ai pu comprendre qui était
demandé.
A chaque tâche/projet, on pourrait associer une URL de synchro,
qui pourra soit être configurée automatiquement lors de
l'utilisation d'un template soit être ajoutée manuellement à la
tâche/projet associé par l'utilisateur.
Pour enregistrer la synchronisation d'une tache/projet, un
fichier texte "nomfichier.extension.sync" contiendrait l'URL de
synchronisation ainsi que la date de dernière synchronisation.
On garde l'extension du fichier de tache/projet parce que sous
jTimer les fichiers de tache sont en .task et les projets en
.project.
La synchronisation s'effectuerait par l'intermédiaire d'un envoi
de fichier JSON. L'id de l'utilisateur envoyant ses temps serait
transmis via un token dans l'URL.
L'envoi d'une requête GET sur l'URL de
synchronisation d'une tâche(/projet) si elle aboutit
correctement renvoie la date de dernière synchronisation côté
serveur (avec la réponse 200 - OK) permet ensuite de vérifier
dans le fichier de synchronisation s'il s'agit de la même,
sinon il y a alors envoi d'une requête POST avec un json des
données de la tâche en question, suivi d'une mise à jour de la
date de dernière synchronisation dans le fichier si tout se
passe bien (ce qui permet l'édition à posteriori des temps sur
les tâches aussi). (et renvoie des messages d'erreurs avec
codes adaptés dans les cas contraires).
J'ai réfléchi à un schema json qui permettrait de pouvoir
vérifier la validité des données et avoir une définition de la
structure à envoyer, les récepteurs pouvant ensuite choisir
d'ignorer une partie des données à leur convenance.
Format JSON proposé :
on envoie la tâche avec son chemin, éventuellement son
annotation, les dates associées aux temps passés sur cette
tâche, le temps total pour cette tâche, et ses sous-tâches s'il
y en a.
Les dates seront au format YYYY-MM-DDTHH:MM:SS:sssZ
(2012-04-23T18:25:43.511Z), le format renvoyé par
JSON.stringify() en Javascript, et aussi conforme à la norme ISO
8601 et reconnu par notamment le w3c. Et surtout, facile à
trier.
Les temps seront sous la forme d'une
clé selon la date et d'une valeur en secondes de temps, la
date représentant la date de début pour la tâche (et les
secondes la durée de travail sur la tâche). Pour les envois
à partir de jTimer, la partie HH:MM:SS:sssZ sera
systématiquement 00:00:00.000Z, puisque jTimer ne fait pas
la distinction sur une même journée de plusieurs suivis
d'une même tâche, mais que d'autres pourraient le faire (par
exemple pour gérer les demi-journées).