Skip to content

Instantly share code, notes, and snippets.

@justinehell
Created November 2, 2020 21:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save justinehell/ab80cebbbac19289b2bbe50f07398b87 to your computer and use it in GitHub Desktop.
Save justinehell/ab80cebbbac19289b2bbe50f07398b87 to your computer and use it in GitHub Desktop.
Express & SQL - Atelier Fil Rouge
let express = require("express");
let app = express();
const port = 3000;
const db = require("./conf");
app.use(express.json());
app.use(
express.urlencoded({
extended: true,
})
);
// GET (light) - Récupération de quelques champs spécifiques (id, names, dates, etc...)
app.get("/light-characters", (req, res) => {
db.query(
"SELECT id, firstname, lastname, birthday FROM wizard",
(err, results) => {
if (err) {
res.status(500).send("Can't get specific wizard !", err);
}
res.status(200).send(results);
}
);
});
// GET - Récupération de l'ensemble des données de ta table
app.get("/characters", (req, res) => {
let request = "SELECT id, firstname, lastname, birthday, biography, is_muggle FROM wizard";
db.query(request, (err, results) => {
if (err) {
res.status(500).send("Can't get all wizards !", err);
}
res.status(200).send(results);
});
});
// GET - Récupération d'un ensemble de données en fonction de certains filtres :
// Un filtre "contient ..." (ex: nom contenant la chaîne de caractère 'wcs')
app.get("/characters/contains", (req, res) => {
db.query(
`SELECT id, firstname, lastname FROM wizard WHERE biography LIKE '%${req.query.contains}%`,
[req.query.contains],
(err, results) => {
if (err) {
res.status(500).send("Can't get wizards !", err);
}
res.status(200).send(results);
});
});
// Un filtre "commence par ..." (ex: nom commençant par 'campus')
app.get("/characters/starts", (req, res) => {
db.query(
`SELECT id, firstname, lastname FROM wizard WHERE lastname LIKE '%${req.query.starts}%`,
[req.query.starts],
(err, results) => {
if (err) {
res.status(500).send("Can't get wizards !", err);
}
res.status(200).send(results);
});
});
// Un filtre "supérieur à ..." (ex: date supérieure à 18/10/2010)
app.get("/characters/older", (req, res) => {
db.query(
`SELECT id, firstname, lastname FROM wizard WHERE birthday > '%${req.query.older}%`,
[req.query.older],
(err, results) => {
if (err) {
res.status(500).send("Can't get wizards !", err);
}
res.status(200).send(results);
});
});
// GET - Récupération de données ordonnées (ascendant, descendant)
// L'ordre sera passé en tant que paramètre de la route
app.get("/characters/:order", (req, res) => {
db.query(
`SELECT id, lastname, firstname FROM wizard ORDER BY lastname, firstname ${req.params.order} `,
(err, results) => {
if (err) {
res.status(500).send("Can't get filtered wizards !", err);
}
res.status(200).send(results);
}
);
});
// POST - Sauvegarde d'une nouvelle entité
app.post("/characters", (req, res) => {
db.query(`INSERT INTO wizard SET ?`, [req.body], (err, results) => {
if (err) {
res.status(500).send("Can't post a wizard !", err);
}
res
.status(200)
.send(
`The wizard ${req.body.firstname} ${req.body.lastname} with id ${results.insertId} was added`
);
});
});
// PUT - Modification d'une entité
app.put("/characters/:id", (req, res) => {
db.query(
`UPDATE wizard SET ? WHERE id = ?`,
[req.body, req.params.id],
(err, results) => {
if (err) {
res.status(500).send("Can't post a wizard !", err);
}
res
.status(200)
.send(
`The wizard ${req.body.firstname} ${req.body.lastname} was updated`
);
}
);
});
// PUT - Toggle du booléen
app.put("/characters/:id", (req, res) => {
db.query(
`UPDATE wizard SET is_muggle = !is_muggle WHERE id = ?`,
[req.params.id],
(err, results) => {
if (err) {
res.status(500).send("Can't update a wizard !", err);
}
res.status(200).send(`The wizard's property 'is_muggle' was toggled`);
}
);
});
// DELETE - Suppression d'une entité
app.delete("/characters/:id", (req, res) => {
db.query(
`DELETE FROM wizard WHERE id = ?`,
[req.params.id],
(err, results) => {
if (err) {
res.status(500).send("Can't delete a wizard !", err);
}
res
.status(200)
.send(
`The wizard ${req.body.firstname} ${req.body.lastname} was deleted`
);
}
);
});
// DELETE - Suppression de toutes les entités dont le booléen est false
app.delete("/characters/:id", (req, res) => {
db.query(`DELETE FROM wizard WHERE is_muggle = 0`, (err, results) => {
if (err) {
res.status(500).send("Can't delete a wizard !", err);
}
res.status(200).send(results.affectedRows + " wizards was deleted.");
});
});
app.listen(port, (err) => {
if (err) {
throw new Error("Something bad happened...");
}
console.log(`Server is listening on ${port}`);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment