connexion a l'api d'avis

This commit is contained in:
2023-02-12 14:58:39 +01:00
parent 4e807430d1
commit 096f056e41
12 changed files with 195 additions and 83 deletions

View File

@@ -5,7 +5,7 @@ import conn from '../database.js';
* @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) => {
const getLastReviews = (limit = 10) => {
return new Promise((resolve, reject) => {
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
@@ -13,9 +13,9 @@ const getLastReviews = (limit=10) => {
JOIN borne_auteurs ON borne_auteurs.id = id_auteur
ORDER BY borne_avis.id DESC LIMIT ?`;
conn.query(sql, [limit], (err, res) => {
if(err) {
if (err) {
reject(err);
}else {
} else {
resolve(res)
}
})
@@ -29,19 +29,24 @@ const getLastReviews = (limit=10) => {
*/
const getReviewFromId = (id) => {
return new Promise((resolve, reject) => {
let sql = `SELECT * FROM borne_avis WHERE id = ? LIMIT 1`;
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
WHERE borne_avis.id = ?
LIMIT 1`;
conn.query(sql, [id], (err, res) => {
if(err) {
if (err) {
reject(err);
}else {
if(res.length != 1) {
} else {
if (res.length != 1) {
reject(new Error("Avis avec cet ID non trouvé"))
}else {
} else {
resolve(res[0])
}
if(res.length != 1) {
if (res.length != 1) {
reject(new Error("Avis avec cet ID non trouvé"))
}else {
} else {
resolve(res[0])
}
}
@@ -57,9 +62,9 @@ const getCriteres = () => {
return new Promise((resolve, reject) => {
let sql = `SELECT * FROM borne_criteres`;
conn.query(sql, [limit], (err, res) => {
if(err) {
if (err) {
reject(err);
}else {
} else {
resolve(res)
}
})
@@ -72,17 +77,17 @@ const getCriteres = () => {
* @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) => {
const getNotesAutresFromCritere = (critere, limit = 10) => {
return new Promise((resolve, reject) => {
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.nom = ?
ORDER BY borne_notes_autre.id DESC LIMIT ? ;`;
conn.query(sql, [critere,limit], (err, res) => {
if(err) {
conn.query(sql, [critere, limit], (err, res) => {
if (err) {
reject(err);
}else {
} else {
resolve(res)
}
})
@@ -102,9 +107,9 @@ const getNotesAutresFromReview = (reviewId) => {
WHERE avis_id = ?
ORDER BY borne_notes_autre.id DESC`;
conn.query(sql, [reviewId], (err, res) => {
if(err) {
if (err) {
reject(err);
}else {
} else {
resolve(res)
}
})
@@ -117,17 +122,17 @@ const getNotesAutresFromReview = (reviewId) => {
* @param {Number} 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) => {
const getStats = (interval, limit = 10) => {
return new Promise((resolve, reject) => {
if(!["jour","mois","semaine","annee"].includes(interval)) {
if (!["jour", "mois", "semaine", "annee"].includes(interval)) {
reject(new Error("Invalid time interval"));
return;
}
let sql = `SELECT * FROM stats_general_${interval} ORDER BY id DESC LIMIT ?;`;
conn.query(sql, [limit], (err, res) => {
if(err) {
if (err) {
reject(err);
}else {
} else {
resolve(res)
}
})
@@ -139,62 +144,64 @@ Ces fonction sont des handlers pour les routes express, elles sont appelées par
*/
export const handleGetLastReviews = (req, res) => {
getLastReviews(req.query.limit)
.then((reviews) => {
res.send(reviews);
})
.catch((err) => {
res.status(500).send("Error: " + err.message);
});
.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);
});
.then((review) => {
getNotesAutresFromReview(req.query.id).then((notesAutres) => {
res.send({ ...review, notes_autres: notesAutres });
})
})
.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);
});
.then((criteres) => {
res.send(criteres);
})
.catch((err) => {
res.status(500).send("Error: " + err.message);
});
}
export const handleGetNotesAutres = (req, res) => {
if(req.query.critere) {
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) {
.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 {
.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);
});
.then((stats) => {
res.send(stats);
})
.catch((err) => {
res.status(500).send("Error: " + err.message);
});
}