mirror of
https://git.roussel.pro/telecom-paris/pact.git
synced 2026-02-09 10:30:17 +01:00
ajout du support pour les réseaux sociaux
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import { Auteur, Review } from './structures.js';
|
import { Auteur, Review } from './structures.js';
|
||||||
import conn from '../database.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
|
* 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
|
//Ajoute un avis a la base de donnée
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import requests
|
import requests
|
||||||
|
#Exemple ajout d'un commentaire depuis la borne (site ou geste)
|
||||||
avis = {
|
avis = {
|
||||||
"note": 8,
|
"note": 8,
|
||||||
"source": "borne",
|
"source": "borne",
|
||||||
@@ -10,5 +10,20 @@ avis = {
|
|||||||
"commentaire": "Commentaire"
|
"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)
|
print(res.text)
|
||||||
@@ -2,12 +2,14 @@ import * as dotenv from 'dotenv';
|
|||||||
import express from 'express';
|
import express from 'express';
|
||||||
import bodyParser from 'body-parser';
|
import bodyParser from 'body-parser';
|
||||||
import { addReviewFromRequest } from './borne/handler.js';
|
import { addReviewFromRequest } from './borne/handler.js';
|
||||||
|
import { addSocialReviewFromRequest } from './reseaux_sociaux/handler.js';
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
||||||
app.use(bodyParser.urlencoded({extended:true}))
|
app.use(bodyParser.urlencoded({extended:true}))
|
||||||
dotenv.config()
|
dotenv.config()
|
||||||
app.post('/add_review', (req,res) => addReviewFromRequest(req,res));
|
app.post('/add_review', (req,res) => addReviewFromRequest(req,res));
|
||||||
|
app.post('/add_social_review', (req,res) => addSocialReviewFromRequest(req,res));
|
||||||
|
|
||||||
app.listen(process.env.PORT, () => {
|
app.listen(process.env.PORT, () => {
|
||||||
console.log("Server démaré sur le port " + process.env.PORT)
|
console.log("Server démaré sur le port " + process.env.PORT)
|
||||||
60
code/server/reseaux_sociaux/handler.js
Normal file
60
code/server/reseaux_sociaux/handler.js
Normal file
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
39
code/server/reseaux_sociaux/structures.js
Normal file
39
code/server/reseaux_sociaux/structures.js
Normal file
@@ -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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
19
code/server/utils.js
Normal file
19
code/server/utils.js
Normal file
@@ -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);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user