diff --git a/code/server/borne/handler.js b/code/server/borne/handler.js index 60a02f5..906214f 100644 --- a/code/server/borne/handler.js +++ b/code/server/borne/handler.js @@ -26,7 +26,6 @@ const addAuteur = (author) => { 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 = ?), ?, ?)" - console.log(sql); conn.query(sql, [label,reviewId, value], (err, res) => { if(err) { reject(err); diff --git a/code/server/database.js b/code/server/database.js index 7a8ad78..22d7b94 100644 --- a/code/server/database.js +++ b/code/server/database.js @@ -7,6 +7,7 @@ const conn = mysql.createConnection({ user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, + multipleStatements: true, }); conn.connect(); diff --git a/code/server/stats/update_stats.js b/code/server/stats/update_stats.js index da62a6c..cabf62c 100644 --- a/code/server/stats/update_stats.js +++ b/code/server/stats/update_stats.js @@ -1,6 +1,21 @@ -import conn from '../database'; +import conn from '../database.js'; +import fs from "fs"; -export const udpateDay = () => { - const sql = "SELECT AVG(note_principale) INTO @moyenne_globale FROM borne_avis WHERE date > DATE_ADD(NOW(), INTERVAL -1 DAY);"; +export const computeStats = async (timePeriod, generalTableName, otherTableName) => { + return new Promise((resolve, reject) => { + let sql = fs.readFileSync("stats/update_stats.sql").toString(); + sql = sql + .replace(new RegExp("DAY_COUNT_DELAY",'g'), timePeriod.toString()) + .replace(new RegExp("STATS_GENERAL_TABLE_NAME", 'g'), generalTableName) + .replace(new RegExp('STATS_AUTRES_TABLE_NAME', 'g'), otherTableName) + conn.query(sql, (err, res) => { + if(err) { + reject(err) + }else { + resolve(res.insertId); + } + }); + }) +} -} \ No newline at end of file +// computeStats(7,"stats_general_semaine","stats_autres_semaine").then(() => {console.log("OK")}); \ No newline at end of file diff --git a/code/server/stats/update_stats.sql b/code/server/stats/update_stats.sql index 1171eeb..c88ddb3 100644 --- a/code/server/stats/update_stats.sql +++ b/code/server/stats/update_stats.sql @@ -1,37 +1,46 @@ -SET @date_limite = DATE_ADD(NOW(), INTERVAL -1 DAY); +/* +Dans cette requête il faut replacer DAY_COUNT_DELAY par le nombre de jours sur lequel calculer les stats, STATS_GENERAL_TABLE_NAME par la table dans laquelle mettre les stats globales (par exemple stats_general_jour si les valeurs sont calculées sur 1 jour) et pareil pour STATS_AUTRES_TABLE_NAME +C'est un peu bizzare comme technique mais j'ai pas trouvé de meilleur solution +*/ +SET @date_limite = DATE_ADD(NOW(), INTERVAL -DAY_COUNT_DELAY DAY); + +/* +On récupère les notes notes moyennes sur la periode, en séparant global, borne et site +*/ --- On récupère les notes notes moyennes sur la periode, en séparant global, borne et site SELECT @moyenne_globale:=AVG(note_principale) FROM borne_avis - WHERE date > @date_limite; + WHERE borne_avis.date > @date_limite; SELECT @moyenne_borne:=AVG(note_principale) FROM borne_avis JOIN sources ON sources.id = borne_avis.source_id - WHERE date > @date_limite AND sources.nom = "borne"; + WHERE borne_avis.date > @date_limite AND sources.nom = "borne"; SELECT @moyenne_site:=AVG(note_principale) FROM borne_avis JOIN sources ON sources.id = borne_avis.source_id - WHERE date > @date_limite AND sources.nom = "website"; + WHERE borne_avis.date > @date_limite AND sources.nom = "website"; + +/* +On récupère la distribution de sexes +*/ --- On récupère la distribution de sexes SELECT @stats_f:=COUNT(*) FROM borne_avis JOIN borne_auteurs ON borne_avis.id_auteur = borne_auteurs.id - WHERE sexe='f' WHERE date > @date_limite; + WHERE sexe='f' AND date > @date_limite; SELECT @stats_h:=COUNT(*) FROM borne_avis JOIN borne_auteurs ON borne_avis.id_auteur = borne_auteurs.id - WHERE sexe='h' WHERE date > @date_limite; + WHERE sexe='h' AND date > @date_limite; SELECT @stats_a:=COUNT(*) FROM borne_avis JOIN borne_auteurs ON borne_avis.id_auteur = borne_auteurs.id - WHERE sexe='a' WHERE date > @date_limite; + WHERE sexe='a' AND date > @date_limite; SET @dist_sexe = CONCAT(@stats_f,",",@stats_h,",",@stats_a); -INSERT INTO stats_general_jour (moyenne_globale, moyenne_borne, moyenne_site) VALUES (@moyenne_globale, @moyenne_borne, @moyenne_site); +INSERT INTO STATS_GENERAL_TABLE_NAME (moyenne_globale, moyenne_borne, moyenne_site, dist_sexe) VALUES (@moyenne_globale, @moyenne_borne, @moyenne_site, @dist_sexe); - -INSERT INTO stats_autres_jour (critere_id, note) - SELECT critere_id, AVG(note) as moyenne FROM `borne_notes_autre` - GROUP BY critere_id - WHERE date > @date_limite \ No newline at end of file +INSERT INTO STATS_AUTRES_TABLE_NAME (critere_id, note) + SELECT critere_id, AVG(note) as moyenne FROM borne_notes_autre + WHERE borne_notes_autre.date > @date_limite + GROUP BY critere_id \ No newline at end of file