2.4 - Laboratoire 2


Développer un service web pour répondre aux besoins d'une page web existante et fournir des fonctionnalités complémentaires via un client en ligne de commande.

Taskor

Créer l'application serveur qui supporte les fonctionnalités de ce client web.

  • Créer la route qui permet d'accéder au client web
  • Implémenter les fonctionnalités CUDL pour les tâches
    • Les mutations, CUD, retournent une string vide lors d'une opération qui a fonctionnée, sinon le message d'erreur
    • Les tâches sont enregistrées dans un fichier en format JSON correctement typé
  • Lors de la création d'une tâche, son id est assigné par le serveur
require "securerandom"
p Random.uuid
  • Lors de la mise à jour du status d'une tâche, le serveur reçoit un booléen indiquant si la tâche est complétée ou non. C'est le serveur qui assigne ensuite nil si faux, sinon la date-heure actuelle.
require "date"
p DateTime.now.to_s
  • Assurez-vous d'insérer des données de tests cohérentes lorsque le fichier est vide

Serveur

Affichage du client web

GET /

===

___Fichier taskor.html___

Liste des tâches

GET /tasks

=== Toutes les tâches, telles que dans le fichier

[
    { id: "...", name: "...", completed_at: null | "yyyy-mm-ddThh:mm:ss-0z:00" },
    ...
]

Créer une tâche, une tâche n'est PAS complétée par défaut

POST /new-task

{ name: "..." }

===

""

~~~ Si erreur de validation

"Message d'erreur"

Compléter ou non une tâche

POST /set-completed

{ id: "...", completed: true | false }

===

""

~~~ Si erreur de validation

"Message d'erreur"

Mettre à jour le nom

POST /update-name

{ id: ..., name: "..." }

===

""

~~~ Si erreur de validation

"Message d'erreur"

Supprimer une tâche

POST /remove-task

{ id: ... }

===

""

~~~ Si erreur de validation

"Message d'erreur"

Client

Le client offre une interface console minimale pour permettre de manipuler les données via les routes existantes.

  • Liste des tâches supporte plusieurs paramètres d'URL optionnels pour ajuster les items affichés

    • sort trie par le nom en ordre croissant ou décroissant
    • name filtre les tâches dont le nom contient le critère fourni
    • status affiche seulement les tâches non-complétées, pending, ou complétées, done
GET /tasks?sort=___asc | desc___&name=___critère___&status=___pending | done___

===

[
    ...
]

~~~ Si erreur de validation

"Message d'erreur"
  • Le client console doit également offrir l'accès à au moins une autre opération à votre choix(ajout, changement de statut, modification du nom ou suppression)


Exemple d'exécution

Paramètres vides, si les paramètres sont vides, ils ne sont pas envoyés

Taskor
------

Liste ou Ajout (L, A): L

Tri: 
Recherche:
Status:

[ ] Nom A
[x] Nom B yyyy-mm-ddThh:mm:ss-0z:00
...

Validations

Taskor
------

Liste ou Ajout (L, A): L

Tri: patate
Recherche: 
Status:

tri invalide, asc ou desc
Taskor
------

Liste ou Ajout (L, A): L

Tri: patate
Recherche: 
Status: coucou

tri invalide, asc ou desc
status invalide, pending ou done

Paramètres

Taskor
------

Liste ou Ajout (L, A): L

Tri: desc
Recherche: ruby
Status: pending

...Seulement les tâches correspondantes...

Ajout

Taskor
------

Liste ou Ajout (L, A): A

Nom: Tâche C

Ajout réussis
Taskor
------

Liste ou Ajout (L, A): A

Nom: 

Nom requis

Remise

17 octobre, 8h AM via LÉA

  • Envoyer uniquement vos fichiers Ruby nommés server.rb et client.rb
  • Inscrire votre nom en commentaire sur la première ligne

Critères d’évaluation

Laboratoire 2 - 5% / 25

Nom: ____________________________________

Qualité de rédaction: Nomenclature, Formatage, Syntaxe 0 1 1.5 2
Serveur
GET /, fichier html 0 0.5 1
GET /tasks, toutes les tâches, données complètes, données de test 0 0.5 1 1.5 2
Paramètres optionnels: sort, name, status, réponse 0 0.5 1 1.5 2
POST /new-task, body json, validations, réponse, persistence 0 0.5 1 1.5 2
POST /set-completed, body json, validations, réponse, persistence 0 0.5 1 1.5 2
POST /update-name, body json, validations, réponse, persistence 0 0.5 1 1.5 2
POST /remove-task, body json, validations, réponse, persistence 0 0.5 1 1.5 2
Client
Menu: liste, ajout 0 0.5 1
Liste: saisie tri, recherche, status, affichage résultat 0 0.5 1 1.5 2
Requête Liste: route, paramètres url 0 0.5 1 1.5 2
Opération: saisie, affichage résultat 0 0.5 1 1.5 2
Requête Opération: route, paramètres json 0 0.5 1 1.5 2
UI/UX cohérent 0 0.5 1