Created
November 2, 2020 21:19
-
-
Save justinehell/ab80cebbbac19289b2bbe50f07398b87 to your computer and use it in GitHub Desktop.
Express & SQL - Atelier Fil Rouge
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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