formations/cesi/architecture_n_tiers/ressources/exercices/ex_microbloggr_solution/services/sessions/app/server.js

103 lines
2.5 KiB
JavaScript

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const sessions = {};
let sessionCounter = 0;
// On utilise le middleware "body-parser"
// pour désérialiser automatiquement
// les objets JSON potentiellement
// fournis par les requêtes
app.use(bodyParser.json());
// GET /sessions
// Permet de récupérer la liste des sessions en cours
app.get('/sessions', (req, res) => {
res.json(sessions);
});
// GET /sessions/:id
// Permet de récupérer une session via son identifiant
app.get('/sessions/:id', (req, res) => {
// On récupère l'identifiant de session
// depuis l'URL
const sessionId = req.params.id;
// On vérifie que la session existe.
// Si ce n'est pas le cas, on retourne un code
// HTTP 404 pour indiquer que la ressource
// n'existe pas
if (!sessions.hasOwnProperty(sessionId)) {
return res.status(404).end('Not found.');
}
// On retourne la session sérialisée en JSON
return res.json(sessions[sessionId]);
})
// POST /sessions
// Body: {"user": <user_id> }
// Permet de créer une nouvelle session pour l'utilisateur donné
app.post('/sessions', (req, res) => {
const payload = req.body;
// On valide la présence de l'attribut "user"
// sur les données fournies.
// Si il n'est pas présent, on retourne un code HTTP
// 400 pour indiquer que la requête est invalide.
if (!payload.user) {
return res.status(400).end('Bad request.');
}
// On créait une nouvelle session
const sess = {
user: payload.user,
id: getSessionId(),
};
// On la "stocke" dans notre registre
sessions[session.id] = sess;
// On retourne la session
// nouvellement créée
res.json(sess);
})
// DELETE /sessions/:id
// Permet de supprimer une session dans le registre via son identifiant
app.delete('/sessions/:id', (req, res) => {
// On récupère l'identifiant de session
// depuis l'URL
const sessionId = req.params.id;
// On vérifie que la session existe.
// Si ce n'est pas le cas, on retourne un code
// HTTP 404 pour indiquer que la ressource
// n'existe pas
if (!sessions.hasOwnProperty(sessionId)) {
return res.status(404).end('Not found.');
}
delete sessions[sessionId];
// On retourne un code HTTP 204 pour indiquer que l'opération
// s'est déroulée correctement mais qu'aucun "contenu" n'est disponible
return res.status(204);
});
app.listen(8080, () => console.log('listening on port 8080'));
function getSessionId() {
return `${Date.now()}-${sessionCounter++}`;
}