diff --git a/code/server/borne/get_handler.js b/code/server/borne/get_handler.js index 176831b..6f4b7fd 100644 --- a/code/server/borne/get_handler.js +++ b/code/server/borne/get_handler.js @@ -1,7 +1,11 @@ import conn from '../database.js'; -// TODO: Fct qui renvoie les X avis les plus récents, Fct qui renvoie les X dernières stats journalières/hebdo/etc, handler de requète, documenter le format de requête -const getLastReview = (limit) => { +/** + * Renvoie les derniers avis laissés sur la borne trié par ordre chronologque décroissant + * @param {Number} limit Nombre d'avis a afficher + * @returns Une liste d'objets de la forme {id: id de l'avis, date: date de l'avis, note_principale: note sur 10, commentaire: avis textuel, nom_source, sexe_auteur, age_auteur} + */ +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 FROM borne_avis @@ -18,6 +22,11 @@ const getLastReview = (limit) => { }) } +/** + * Renvoie les informations sur un avis avec un ID spécifique + * @param {Number} id Id de la review + * @returns Un objet de la forme des objets dans la table borne_avis ayant l'id id s'il existe, renvoie une erreur sinon + */ const getReviewFromId = (id) => { return new Promise((resolve, reject) => { let sql = `SELECT * FROM borne_avis WHERE id = ? LIMIT 1`; @@ -25,12 +34,21 @@ const getReviewFromId = (id) => { if(err) { reject(err); }else { - resolve(res) + if(res.length != 1) { + reject(new Error("Avis avec cet ID non trouvé")) + }else { + resolve(res[0]) + } } }) }) } -const getCriteres = (limit) => { + +/** + * Renvoie tout les critères de notation valides + * @returns Une liste d'objets de la forme {id,nom} + */ +const getCriteres = () => { return new Promise((resolve, reject) => { let sql = `SELECT * FROM borne_criteres`; conn.query(sql, [limit], (err, res) => { @@ -43,14 +61,20 @@ const getCriteres = (limit) => { }) } -const getNotesAutresFromCritere = (critere,limit) => { +/** + * Renvoie les "limit" notes les plus récentes laissées pour un critère spécifié + * @param {String} critere Nom de critère + * @param {Number} limit Nombre max de note a afficher + * @returns une liste d'objets de la forme {id,date,critere,note,avis_id:id de l'avis lié a cette note} + */ +const getNotesAutresFromCritere = (critere,limit=10) => { return new Promise((resolve, reject) => { - let sql = `SELECT borne_notes_autre.id,date,borne_criteres.nom as critere, note, avis_id + let sql = `SELECT borne_notes_autre.id as id,date,borne_criteres.nom as critere, note, avis_id FROM borne_notes_autre JOIN borne_criteres ON borne_criteres.id = critere_id - WHERE borne_criteres = ? - ORDER BY borne_notes_autre.id DESC LIMIT ?;`; - conn.query(sql, [[critere, limit]], (err, res) => { + WHERE borne_criteres.nom = ? + ORDER BY borne_notes_autre.id DESC LIMIT ? ;`; + conn.query(sql, [critere,limit], (err, res) => { if(err) { reject(err); }else { @@ -60,14 +84,19 @@ const getNotesAutresFromCritere = (critere,limit) => { }) } -const getnotesautresfromreview = (reviewid) => { - return new promise((resolve, reject) => { - let sql = `select borne_notes_autre.id,borne_criteres.nom as critere, note, avis_id - from borne_notes_autre - join borne_criteres on borne_criteres.id = critere_id - where avis_id = ? - order by borne_notes_autre.id desc`; - conn.query(sql, [limit], (err, res) => { +/** + * Renvoie toutes les notes sur des critères spécifiques laissée pour un avis spécifique + * @param {Number} reviewId Id de l'avis + * @returns une liste d'objets de la forme {id,critere:nom du critère, note:note sur 10} + */ +const getNotesAutresFromReview = (reviewId) => { + return new Promise((resolve, reject) => { + let sql = `SELECT borne_notes_autre.id as id,borne_criteres.nom as critere, note + FROM borne_notes_autre + JOIN borne_criteres on borne_criteres.id = critere_id + WHERE avis_id = ? + ORDER BY borne_notes_autre.id DESC`; + conn.query(sql, [reviewId], (err, res) => { if(err) { reject(err); }else { @@ -77,9 +106,14 @@ const getnotesautresfromreview = (reviewid) => { }) } - -const getStats = (interval, limit) => { - return new promise((resolve, reject) => { +/** + * Renvoie les dernières statistiques + * @param {String} interval Interval de temps de la statistique, valeurs possibles : "jour","mois","semaine","annee" + * @param {*} limit Nombre max de stats a renvoyer + * @returns Une liste d'objet ou chaque objet correspond a une stat sur une periode donnée (par ex une stat hebdo datée du 07/01 correspond a une stat sur la semaine du 01/01 au 07/01), ces objets sont de la forme + */ +const getStats = (interval, limit=10) => { + return new Promise((resolve, reject) => { if(!["jour","mois","semaine","annee"].includes(interval)) { reject(new Error("Invalid time interval")); return; @@ -93,8 +127,4 @@ const getStats = (interval, limit) => { } }) }) -} - - - -getLastReview(5).then(rows => console.log(rows)) \ No newline at end of file +} \ No newline at end of file