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)