From 75d37f44d70b6d758de217cb122cf8d9fdf50ba7 Mon Sep 17 00:00:00 2001 From: Quentin Roussel Date: Sat, 24 Dec 2022 22:29:49 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20du=20support=20pour=20les=20r=C3=A9seau?= =?UTF-8?q?x=20sociaux?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/server/borne/handler.js | 17 +------ code/server/exemple_utilisation.py | 19 ++++++- code/server/{main.js => index.js} | 2 + code/server/reseaux_sociaux/handler.js | 60 +++++++++++++++++++++++ code/server/reseaux_sociaux/structures.js | 39 +++++++++++++++ code/server/utils.js | 19 +++++++ 6 files changed, 138 insertions(+), 18 deletions(-) rename code/server/{main.js => index.js} (73%) create mode 100644 code/server/reseaux_sociaux/handler.js create mode 100644 code/server/reseaux_sociaux/structures.js create mode 100644 code/server/utils.js diff --git a/code/server/borne/handler.js b/code/server/borne/handler.js index 506eb45..445ad03 100644 --- a/code/server/borne/handler.js +++ b/code/server/borne/handler.js @@ -1,5 +1,6 @@ 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, auteur doit être une instance de Auteur @@ -19,22 +20,6 @@ const addAuteur = (author) => { }) } -/** - * REnvoei l'ID dans la BDD d'une source de donnée - * @param {String} source la source dont on veut récup l'id - * @returns une promise qui renvoie l'id de la source - */ -const getSourceId = (source) => { - return new Promise((resolve, reject) => { - const sql = "SELECT id from sources WHERE nom = ?"; - conn.query(sql, [source], (err, res) => { - if(res.length == 0) { - throw new Error("Source invalide") - } - resolve(res[0].id); - }) - }) -} //Ajoute un avis a la base de donnée /** diff --git a/code/server/exemple_utilisation.py b/code/server/exemple_utilisation.py index c65b6d1..32722d9 100644 --- a/code/server/exemple_utilisation.py +++ b/code/server/exemple_utilisation.py @@ -1,5 +1,5 @@ import requests - +#Exemple ajout d'un commentaire depuis la borne (site ou geste) avis = { "note": 8, "source": "borne", @@ -10,5 +10,20 @@ avis = { "commentaire": "Commentaire" } -res = requests.post("http://localhost:8080/add_review", data=avis) +# res = requests.post("http://localhost:8080/add_review", data=avis) +# print(res.text) + +#Exemple ajout d'un commentaire trouvé sur les réseaux sociaux +avis = { + "auteur_nom": "michel", + "source": "instagram", + "note": 8, + "date": "2022-12-24", + #Optionel + "commentaire": "J'ai beaucoup aimé !", + "lien": "https://instagram.com/si_insta_avait_des_liens_vers_des_commentaires_faudrait_le_mettre_ici", + "auteur_lien": "https://instagram.com/michel", +} + +res = requests.post("http://localhost:8080/add_social_review", data=avis) print(res.text) \ No newline at end of file diff --git a/code/server/main.js b/code/server/index.js similarity index 73% rename from code/server/main.js rename to code/server/index.js index 204c3f0..46db3c6 100644 --- a/code/server/main.js +++ b/code/server/index.js @@ -2,12 +2,14 @@ import * as dotenv from 'dotenv'; import express from 'express'; import bodyParser from 'body-parser'; import { addReviewFromRequest } from './borne/handler.js'; +import { addSocialReviewFromRequest } from './reseaux_sociaux/handler.js'; const app = express(); app.use(bodyParser.urlencoded({extended:true})) dotenv.config() app.post('/add_review', (req,res) => addReviewFromRequest(req,res)); +app.post('/add_social_review', (req,res) => addSocialReviewFromRequest(req,res)); app.listen(process.env.PORT, () => { console.log("Server démaré sur le port " + process.env.PORT) diff --git a/code/server/reseaux_sociaux/handler.js b/code/server/reseaux_sociaux/handler.js new file mode 100644 index 0000000..a6975da --- /dev/null +++ b/code/server/reseaux_sociaux/handler.js @@ -0,0 +1,60 @@ +import { ReseauxAuteur, ReseauxReview } from './structures.js'; +import conn from '../database.js'; +import {getSourceId} from '../utils.js'; + +/** + * ajoute un auteur de commentaire sur les réseaux sociaux a la bdd + * @param {ReseauxAuteur} author + * @returns Une Promise qui donne l'id de l'utilisateur + */ +const addAuteur = (author, sourceId) => { + return new Promise((resolve,reject) => { + const sql = "INSERT INTO reseaux_sociaux_auteurs (nom_utilisateur, source_id, lien) VALUES (?);" + conn.query(sql, [[author.nom,sourceId, author.lien]], (err, res) => { + if(err) { + reject(new Error(err.message)) + }else { + resolve(res.insertId); + } + }) + }) +} + +/** + * Ajoute un avis dans la BDD + * @param {ReseauxReview} review L'avis a ajouter + * @param {Number} authorId ID de l'auteur dans la bdd + * @param {Number} sourceId ID Du réseau social source dans la bdd + * @returns une Promise qui renvoie l'ID de la review + */ +const addReview = (review, authorId, sourceId) => { + return new Promise((resolve, reject) => { + const sql = "INSERT INTO reseaux_sociaux_avis (source_id, note, commentaire, auteur_id, lien_source, date) VALUES (?);" + conn.query(sql, [[sourceId, review.note, review.commentaire, authorId, review.lien, review.date]], (err, res) => { + if(err) { + reject(new Error(err.message)) + }else { + resolve(res.insertId); + } + }) + }) +} + +/** + * Traite une requête POST pour ajouter un avis récupéré sur les réseaux sociaux + * @param {*} req + * @param {*} res + */ +export const addSocialReviewFromRequest = async (req,res) => { + try { + const author = new ReseauxAuteur(req.body.auteur_nom, req.body.source, req.body.auteur_lien); + const review = new ReseauxReview(author,req.body.note, req.body.source, req.body.date, req.body.commentaire, req.body.lien) + let sourceId = await getSourceId(review.source); + let authorId = await addAuteur(author, sourceId); + console.log(review.note) + await addReview(review, authorId, sourceId); + res.send("success") + }catch(err) { + res.status(500).send("Error : " + err.message) + } +} \ No newline at end of file diff --git a/code/server/reseaux_sociaux/structures.js b/code/server/reseaux_sociaux/structures.js new file mode 100644 index 0000000..d3ca251 --- /dev/null +++ b/code/server/reseaux_sociaux/structures.js @@ -0,0 +1,39 @@ +import { Review } from "../borne/structures.js"; + +export class ReseauxReview extends Review{ + /** + * + * @param {ReseauxAuteur} auteur Auteur de l'avis + * @param {String} source La source de l'avis + * @param {String} date La date de l'avis au format YYYY-MM-DD + * @param {Number} note Nombre entre 0 et 10, la note attribuée + * @param {String} commentaire Le commentaire laissé par l'utilisateur + * @param {String} lien Lien vers le commentaire + */ + constructor(auteur, source, date, note=null, commentaire=null, lien=null,) { + super(auteur,note,source,commentaire); + this.lien = lien; + this.date = date; + if(!lien instanceof String && lien != null) { + throw new Error("Lien invalide"); + } + } +} + +export class ReseauxAuteur { + /** + * + * @param {String} nom Nom de l'utilisateur + * @param {String} source Réseau social de provenance de l'utilisateur + * @param {String} lien Lien vers le profil de l'utilisateur + */ + constructor(nom, source, lien=null) { + this.nom = nom; + this.source = source; + this.lien = lien; + + if(!this.nom instanceof String || !this.source instanceof String || !this.lien instanceof String) { + throw new Error("Auteur invalide"); + } + } +} \ No newline at end of file diff --git a/code/server/utils.js b/code/server/utils.js new file mode 100644 index 0000000..2a1930d --- /dev/null +++ b/code/server/utils.js @@ -0,0 +1,19 @@ +import conn from './database.js'; + +/** + * Renvoie l'ID dans la BDD d'une source de donnée + * @param {String} source la source dont on veut récup l'id + * @returns une promise qui renvoie l'id de la source + */ +export const getSourceId = (source) => { + return new Promise((resolve, reject) => { + const sql = "SELECT id from sources WHERE nom = ?"; + conn.query(sql, [source], (err, res) => { + if(res.length == 0) { + reject(new Error("Invalid source")) + }else { + resolve(res[0].id); + } + }) + }) +}