formations/cesi/architecture_n_tiers/ressources/exercices/ex_microbloggr_solution/services/statuses/src/server.js

74 lines
1.5 KiB
JavaScript

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const morgan = require('morgan');
// Pour cette démo, les statuts sont uniquement conservés en
// mémoire
const statuses = {};
app.use(morgan('combined'));
// On utilise le module "body-parser"
// pour faciliter la désérialisation des données
// des appels à l'API
app.use(bodyParser.json());
// POST /statuses
// Ajoute un nouveau statut pour l'utilisateur donné
app.post('/statuses', (req, res) => {
const newStatus = req.body;
if(!newStatus.username || !newStatus.text) {
return res.status(200).send({
ok: false,
error: "Invalid status.",
});
}
if(newStatus.text.length > 200) {
return res.status(200).send({
ok: false,
error: "Status text too long.",
});
}
const userStatuses = statuses[newStatus.username] || [];
userStatuses.unshift({
text: newStatus.text,
createdAt: new Date(),
});
statuses[newStatus.username] = userStatuses;
return res.status(200).send({
ok: true,
});
});
// GET /statuses/:username
// Retourne les status de l'utilisateur donné
app.get('/statuses/:username', (req, res) => {
const username = req.params.username;
if(!username) {
return res.status(200).send({
ok: false,
error: "Invalid username.",
});
}
const userStatuses = statuses[username] || [];
return res.status(200).send({
ok: true,
statuses: userStatuses,
});
});
app.listen(8080, () => console.log('listening on port 8080'));