cours/applications_internet_2APP/projet_tennis

Projet : réservation tennis

Spécification

  • implémenter une API REST /api/users et /api/reservations
  • afficher le tableau des réservations pour les 3 jours à venir, par créneaux de 1h qui commencent au début de chaque heure
  • 6 cours : “Cours 1”,… “Cours 6”
  • 16 créneaux par jour : 8h-9h, …, 23h-00h
  • clic dans un créneau du tableau : réservation avec un partenaire inscrit, dans la limite du quota de réservation
  • quand la réservation est faite, un email d’information est envoyé au partenaire. Il ne contient aucun lien.

Administrateur

La création / suppression d’utilisateurs et les modifications de mots de passe sont réalisées par un CLI qui agit directement sur la base de données sans faire d’appel back-end

Sécurité

  • système d’authentification à base de JWT
  • l’api back-end ne doit être utilisable que si on est authentifié.
  • Un appel à /api/users GET est autorisé à tous les utilisateurs authentifiés
  • Un appel à /api/users PUT/PATCH n’est autorisé que pour soit-même
  • Un appel à /api/users POST/DELETE n’est autorisé pour aucun utilisateur (seul le CLI peut créer / supprimer des utilisateurs)
  • Un appel à /api/reservations GET est autorisé à tous les utilisateurs authentifiés
  • Un appel à /api/reservations PUT/PATCH/POST/DELETE n’est autorisé que si on est un des deux membres de la réservation

Squelette de CLI

#!/usr/bin/env node

const program = require('commander')
const inquirer = require('inquirer')

// add user
program
   .command('adduser <username>')
   .alias('add')
   .description('Add a new user')
   .action(async function(username) {
      let questionAnswer = await inquirer.prompt([
         {
            name: 'password',
            type: 'password',
            message: "Enter password:",
         },
      ])
      let password = questionAnswer.password
      console.log(`Creating user ${username}...`)
      // your code here
   })

// delete existing user
program
   .command('deluser <username>')
   .alias('del')
   .description('Delete an existing user')
   .action(function(username) {
      console.log(`Deleting user ${username}...`)
      // your code here
   })

// change password
program
   .command('change_password <username>')
   .alias('pwd')
   .description("Change a user's password")
   .action(async function(username) {
      let questionAnswer = await inquirer.prompt([
         {
            name: 'password',
            type: 'password',
            message: "Enter password:",
         },
      ])
      let password = questionAnswer.password
      console.log(`Changing user ${username} password...`)
      // your code here
   })


program
   .command('*')
   .action(function () {
      program.help()
   })

program.parse(process.argv)