From 77f2cea46c54ad5c93de9cd13060ced8590f3a42 Mon Sep 17 00:00:00 2001 From: Quentin Roussel Date: Mon, 2 Jan 2023 20:54:03 +0100 Subject: [PATCH] ajout routes sur express Liaison entre les handler et les routes --- code/server/README.md | 27 ++++++++++++- code/server/borne/get_handler.js | 69 ++++++++++++++++++++++++++++++-- code/server/index.js | 8 ++++ 3 files changed, 99 insertions(+), 5 deletions(-) diff --git a/code/server/README.md b/code/server/README.md index d230a0d..6b194e3 100644 --- a/code/server/README.md +++ b/code/server/README.md @@ -3,4 +3,29 @@ 1. Installer node js : https://nodejs.org/en/download/ 2. Ouvrir un terminal et aller dans ce dossier (code/server) et tapper `npm install` pour installer les pacakges nécessaires 3. copier le fichier `.env_template` et le nommer `.env` et remplir les variables (cela est fait pour le pas mettre les mots de passes sur le gitlab, faites attention de ne jamais commit le fichier .env !!) -4. pour lancer le serveur faire `node index.js` \ No newline at end of file +4. pour lancer le serveur faire `node index.js` + +# Utilisation + +## Routes GET : +- `/get_last_reviews?limit=LIM` : renvoie les LIM derniers avis sur la borne +- `/get_review?id=ID` : renvoie les infos sur l'avis d'in ID +- `/get_criteres` : renvoie les criteres de notations valide pour les notes autres +- `/notes_autres?critere=CRIT&limit=LIM` : renvoie les LIM dernières notes sur le critère CRIT +- `/notes_autres?id=ID&limit=LIM` : renvoie toutes les notes spécifiques liées à l'avis ID + +## Routes POST +- `/add_review` : Ajoute une review et un auteur, paramètres POST : + * [OBLIGATOIRE] `note` : note principale de la review entre 0 et 10 compris + * [OBLIGATOIRE] `source` : nom de la source de l'avis, doit être `borne` ou `website` pour resp la borne et le site + * `auteur_age` : age de l'auteur + * `auteur_sexe` : sexe de l'auteur (valeurs valide 'f', 'h', 'a') + * `commentaire` : Commentaire laissé avec l'avis + * `notes autres` : sous la forme + ```json + { + "critere1": 8, + "critere2": 2, + "critere3": 0 + } + ``` diff --git a/code/server/borne/get_handler.js b/code/server/borne/get_handler.js index 82c33a7..1e2eb83 100644 --- a/code/server/borne/get_handler.js +++ b/code/server/borne/get_handler.js @@ -7,7 +7,7 @@ import conn from '../database.js'; */ const getLastReviews = (limit=10) => { return new Promise((resolve, reject) => { - let sql = `SELECT id,date,note_principale,commentaire,sources.nom as nom_source, borne_auteurs.sexe as sexe_auteur, borne_auteurs.age as age_auteur + let sql = `SELECT borne_avis.id,date,note_principale,commentaire,sources.nom as nom_source, borne_auteurs.sexe as sexe_auteur, borne_auteurs.age as age_auteur FROM borne_avis JOIN sources ON sources.id = source_id JOIN borne_auteurs ON borne_auteurs.id = id_auteur @@ -134,11 +134,72 @@ const getStats = (interval, limit=10) => { }) } -/*^ - * TODO: FOnction gerer requêtes get +/* * /get_last_review?limit=LIM * /get_review?id=ID * /get_criteres * /notes_autres?critere=CRIT&limit=LIM * /notes_autres?id=ID&limit=LIM -*/ \ No newline at end of file +*/ + +export const handleGetLastReviews = (req, res) => { + getLastReviews(req.query.limit) + .then((reviews) => { + res.send(reviews); + }) + .catch((err) => { + res.status(500).send("Error: " + err.message); + }); +} + +export const handleGetReview = (req, res) => { + getReviewFromId(req.query.id) + .then((review) => { + res.send(review); + }) + .catch((err) => { + res.status(500).send("Error: " + err.message); + }); +} + +export const handleGetCriteres = (req, res) => { + getCriteres() + .then((criteres) => { + res.send(criteres); + }) + .catch((err) => { + res.status(500).send("Error: " + err.message); + }); +} + +export const handleGetNotesAutres = (req, res) => { + if(req.query.critere) { + getNotesAutresFromCritere(req.query.critere, req.query.limit) + .then((notes) => { + res.send(notes); + }) + .catch((err) => { + res.status(500).send("Error: " + err.message); + }); + }else if(req.query.id) { + getNotesAutresFromReview(req.query.id) + .then((notes) => { + res.send(notes); + }) + .catch((err) => { + res.status(500).send("Error: " + err.message); + }); + }else { + res.status(500).send("Error: no critere or id specified"); + } +} + +export const handleGetStats = (req, res) => { + getStats(req.query.interval, req.query.limit) + .then((stats) => { + res.send(stats); + }) + .catch((err) => { + res.status(500).send("Error: " + err.message); + }); +} \ No newline at end of file diff --git a/code/server/index.js b/code/server/index.js index 7abfecd..a9958de 100644 --- a/code/server/index.js +++ b/code/server/index.js @@ -4,6 +4,7 @@ import bodyParser from 'body-parser'; import { addReviewFromRequest } from './borne/post_handler.js'; import { addSocialReviewFromRequest } from './reseaux_sociaux/post_handler.js'; import { startCronJobs } from './stats/update_stats.js'; +import * as borneHandler from './borne/get_handler.js'; const app = express(); @@ -12,6 +13,13 @@ dotenv.config() app.post('/add_review', (req,res) => addReviewFromRequest(req,res)); app.post('/add_social_review', (req,res) => addSocialReviewFromRequest(req,res)); +app.get('/get_last_reviews', borneHandler.handleGetLastReviews); +app.get('/get_review', borneHandler.handleGetReview); +app.get('/get_criteres', borneHandler.handleGetCriteres); +app.get('/notes_autres', borneHandler.handleGetNotesAutres); +app.get('/get_stats', borneHandler.handleGetStats); + + startCronJobs(); app.listen(process.env.PORT, () => {