import { Auteur, Review } from './structures.js'; import conn from '../database.js'; import {getSourceId} from '../utils.js'; /** * Ajoute un nouvel auteur de commentaire a la BDD * @param {Auteur} author L'auteur a ajouter * @returns une Promise qui renvoie l'id de l'utilisateur */ const addAuteur = (author) => { return new Promise((resolve,reject) => { const sql = "INSERT INTO borne_auteurs (age, sexe) VALUES (?);" conn.query(sql, [[author.age, author.sexe]], (err, res) => { if(err) { reject(err) }else { resolve(res.insertId); } }) }) } //Ajoute une note sur un critère spécifique dans la BDD const addSpecificRating = (reviewId, label, value) => { return new Promise((resolve, reject) => { const sql = "INSERT INTO borne_notes_autre(critere_id, avis_id, note) VALUES ((SELECT id FROM borne_criteres WHERE borne_criteres.nom = ?), ?, ?)" conn.query(sql, [label,reviewId, value], (err, res) => { if(err) { reject(err); }else { resolve(res.insertId); } }) }) } /** * Ajoute un avis a la base de donnée * @param {Review} review la review a ajouter * @param {Number} authorId l'ID de l'auteur de l'avis dans la BDD * @param {Number} sourceId l'ID de la source de l'avis dans la BDD * @returns une Promise qui renvoie l'id de l'avis */ const addReview = (review, authorId, sourceId) => { return new Promise((resolve, reject) => { const sql = "INSERT INTO borne_avis (id_auteur, note_principale, commentaire, source_id) VALUES (?);" conn.query(sql, [[authorId, review.note, review.commentaire, sourceId]], (err, res) => { if(err) { reject(err) }else { resolve(res.insertId); } }) }) } /** * Traite une requête POST qui contient les valeurs nécessaires pour ajouter un nouvel avis dans la BDD * Essaie d'ajouter l'avis et l'auteur dans la BDD, sinon renvoie l'erreur avec un code 500 * @param {*} req requete * @param {*} res reponse */ export const addReviewFromRequest = async (req,res) => { try { let notes_autre = {} try{ notes_autre = JSON.parse(req.body.notes_autre); }catch(err){}; const author = new Auteur(req.body.auteur_age,req.body.auteur_sexe); const review = new Review(author, req.body.note, req.body.source, req.body.commentaire, notes_autre) let authorId = await addAuteur(author); let sourceId = await getSourceId(review.source); let reviewId = await addReview(review, authorId, sourceId ); for(let label in review.notesAutre) { await addSpecificRating(reviewId, label, review.notesAutre[label]); } res.send("success") }catch(err) { res.status(500).send("Error : " + err.message) } }