mirror of
https://git.roussel.pro/telecom-paris/pact.git
synced 2026-02-09 10:30:17 +01:00
connexion a l'api d'avis
This commit is contained in:
@@ -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);
|
||||
});
|
||||
}
|
||||
@@ -5,9 +5,11 @@ import { addReviewFromRequest } from './borne/post_handler.js';
|
||||
import { addSocialReviewFromRequest } from './reseaux_sociaux/post_handler.js';
|
||||
import { startCronJobs } from './stats/update_stats.js';
|
||||
import * as borneHandler from './borne/get_handler.js';
|
||||
import cors from "cors";
|
||||
|
||||
const app = express();
|
||||
app.use(bodyParser.urlencoded({extended:true}))
|
||||
app.use(cors({origin:'*'}))
|
||||
dotenv.config()
|
||||
app.post('/add_review', (req,res) => addReviewFromRequest(req,res));
|
||||
app.post('/add_social_review', (req,res) => addSocialReviewFromRequest(req,res));
|
||||
|
||||
35
code/reviews_api/package-lock.json
generated
35
code/reviews_api/package-lock.json
generated
@@ -10,6 +10,7 @@
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"body-parser": "^1.20.1",
|
||||
"cors": "^2.8.5",
|
||||
"cron": "^2.1.0",
|
||||
"dotenv": "^16.0.3",
|
||||
"express": "^4.18.2",
|
||||
@@ -108,6 +109,18 @@
|
||||
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
||||
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
|
||||
},
|
||||
"node_modules/cors": {
|
||||
"version": "2.8.5",
|
||||
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
|
||||
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
|
||||
"dependencies": {
|
||||
"object-assign": "^4",
|
||||
"vary": "^1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/cron": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/cron/-/cron-2.1.0.tgz",
|
||||
@@ -491,6 +504,14 @@
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/object-inspect": {
|
||||
"version": "1.12.2",
|
||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
|
||||
@@ -802,6 +823,15 @@
|
||||
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
||||
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
|
||||
},
|
||||
"cors": {
|
||||
"version": "2.8.5",
|
||||
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
|
||||
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
|
||||
"requires": {
|
||||
"object-assign": "^4",
|
||||
"vary": "^1"
|
||||
}
|
||||
},
|
||||
"cron": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/cron/-/cron-2.1.0.tgz",
|
||||
@@ -1101,6 +1131,11 @@
|
||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
|
||||
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
|
||||
},
|
||||
"object-inspect": {
|
||||
"version": "1.12.2",
|
||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"body-parser": "^1.20.1",
|
||||
"cors": "^2.8.5",
|
||||
"cron": "^2.1.0",
|
||||
"dotenv": "^16.0.3",
|
||||
"express": "^4.18.2",
|
||||
|
||||
Reference in New Issue
Block a user