mirror of
https://git.roussel.pro/telecom-paris/pact.git
synced 2026-02-09 10:30:17 +01:00
Début test interface borne
This commit is contained in:
@@ -1,200 +1,200 @@
|
||||
import conn from '../database.js';
|
||||
|
||||
/**
|
||||
* Renvoie les derniers avis laissés sur la borne trié par ordre chronologque décroissant
|
||||
* @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) => {
|
||||
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
|
||||
JOIN sources ON sources.id = source_id
|
||||
JOIN borne_auteurs ON borne_auteurs.id = id_auteur
|
||||
ORDER BY borne_avis.id DESC LIMIT ?`;
|
||||
conn.query(sql, [limit], (err, res) => {
|
||||
if(err) {
|
||||
reject(err);
|
||||
}else {
|
||||
resolve(res)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Renvoie les informations sur un avis avec un ID spécifique
|
||||
* @param {Number} id Id de la review
|
||||
* @returns Un objet de la forme des objets dans la table borne_avis ayant l'id id s'il existe, renvoie une erreur sinon
|
||||
*/
|
||||
const getReviewFromId = (id) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
let sql = `SELECT * FROM borne_avis WHERE id = ? LIMIT 1`;
|
||||
conn.query(sql, [id], (err, res) => {
|
||||
if(err) {
|
||||
reject(err);
|
||||
}else {
|
||||
if(res.length != 1) {
|
||||
reject(new Error("Avis avec cet ID non trouvé"))
|
||||
}else {
|
||||
resolve(res[0])
|
||||
}
|
||||
if(res.length != 1) {
|
||||
reject(new Error("Avis avec cet ID non trouvé"))
|
||||
}else {
|
||||
resolve(res[0])
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Renvoie tout les critères de notation valides
|
||||
* @returns Une liste d'objets de la forme {id,nom}
|
||||
*/
|
||||
const getCriteres = () => {
|
||||
return new Promise((resolve, reject) => {
|
||||
let sql = `SELECT * FROM borne_criteres`;
|
||||
conn.query(sql, [limit], (err, res) => {
|
||||
if(err) {
|
||||
reject(err);
|
||||
}else {
|
||||
resolve(res)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Renvoie les "limit" notes les plus récentes laissées pour un critère spécifié
|
||||
* @param {String} critere Nom de critère
|
||||
* @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) => {
|
||||
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) {
|
||||
reject(err);
|
||||
}else {
|
||||
resolve(res)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Renvoie toutes les notes sur des critères spécifiques laissée pour un avis spécifique
|
||||
* @param {Number} reviewId Id de l'avis
|
||||
* @returns une liste d'objets de la forme {id,critere:nom du critère, note:note sur 10}
|
||||
*/
|
||||
const getNotesAutresFromReview = (reviewId) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
let sql = `SELECT borne_notes_autre.id as id,borne_criteres.nom as critere, note
|
||||
FROM borne_notes_autre
|
||||
JOIN borne_criteres on borne_criteres.id = critere_id
|
||||
WHERE avis_id = ?
|
||||
ORDER BY borne_notes_autre.id DESC`;
|
||||
conn.query(sql, [reviewId], (err, res) => {
|
||||
if(err) {
|
||||
reject(err);
|
||||
}else {
|
||||
resolve(res)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Renvoie les dernières statistiques
|
||||
* @param {String} interval Interval de temps de la statistique, valeurs possibles : "jour","mois","semaine","annee"
|
||||
* @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) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
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) {
|
||||
reject(err);
|
||||
}else {
|
||||
resolve(res)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/*
|
||||
Ces fonction sont des handlers pour les routes express, elles sont appelées par les routes et renvoient les données au format JSON
|
||||
*/
|
||||
export const handleGetLastReviews = (req, res) => {
|
||||
getLastReviews(req.query.limit)
|
||||
.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);
|
||||
});
|
||||
}
|
||||
|
||||
export const handleGetCriteres = (req, res) => {
|
||||
getCriteres()
|
||||
.then((criteres) => {
|
||||
res.send(criteres);
|
||||
})
|
||||
.catch((err) => {
|
||||
res.status(500).send("Error: " + err.message);
|
||||
});
|
||||
}
|
||||
|
||||
export const handleGetNotesAutres = (req, res) => {
|
||||
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) {
|
||||
getNotesAutresFromReview(req.query.id)
|
||||
.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);
|
||||
});
|
||||
import conn from '../database.js';
|
||||
|
||||
/**
|
||||
* Renvoie les derniers avis laissés sur la borne trié par ordre chronologque décroissant
|
||||
* @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) => {
|
||||
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
|
||||
JOIN sources ON sources.id = source_id
|
||||
JOIN borne_auteurs ON borne_auteurs.id = id_auteur
|
||||
ORDER BY borne_avis.id DESC LIMIT ?`;
|
||||
conn.query(sql, [limit], (err, res) => {
|
||||
if(err) {
|
||||
reject(err);
|
||||
}else {
|
||||
resolve(res)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Renvoie les informations sur un avis avec un ID spécifique
|
||||
* @param {Number} id Id de la review
|
||||
* @returns Un objet de la forme des objets dans la table borne_avis ayant l'id id s'il existe, renvoie une erreur sinon
|
||||
*/
|
||||
const getReviewFromId = (id) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
let sql = `SELECT * FROM borne_avis WHERE id = ? LIMIT 1`;
|
||||
conn.query(sql, [id], (err, res) => {
|
||||
if(err) {
|
||||
reject(err);
|
||||
}else {
|
||||
if(res.length != 1) {
|
||||
reject(new Error("Avis avec cet ID non trouvé"))
|
||||
}else {
|
||||
resolve(res[0])
|
||||
}
|
||||
if(res.length != 1) {
|
||||
reject(new Error("Avis avec cet ID non trouvé"))
|
||||
}else {
|
||||
resolve(res[0])
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Renvoie tout les critères de notation valides
|
||||
* @returns Une liste d'objets de la forme {id,nom}
|
||||
*/
|
||||
const getCriteres = () => {
|
||||
return new Promise((resolve, reject) => {
|
||||
let sql = `SELECT * FROM borne_criteres`;
|
||||
conn.query(sql, [limit], (err, res) => {
|
||||
if(err) {
|
||||
reject(err);
|
||||
}else {
|
||||
resolve(res)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Renvoie les "limit" notes les plus récentes laissées pour un critère spécifié
|
||||
* @param {String} critere Nom de critère
|
||||
* @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) => {
|
||||
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) {
|
||||
reject(err);
|
||||
}else {
|
||||
resolve(res)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Renvoie toutes les notes sur des critères spécifiques laissée pour un avis spécifique
|
||||
* @param {Number} reviewId Id de l'avis
|
||||
* @returns une liste d'objets de la forme {id,critere:nom du critère, note:note sur 10}
|
||||
*/
|
||||
const getNotesAutresFromReview = (reviewId) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
let sql = `SELECT borne_notes_autre.id as id,borne_criteres.nom as critere, note
|
||||
FROM borne_notes_autre
|
||||
JOIN borne_criteres on borne_criteres.id = critere_id
|
||||
WHERE avis_id = ?
|
||||
ORDER BY borne_notes_autre.id DESC`;
|
||||
conn.query(sql, [reviewId], (err, res) => {
|
||||
if(err) {
|
||||
reject(err);
|
||||
}else {
|
||||
resolve(res)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Renvoie les dernières statistiques
|
||||
* @param {String} interval Interval de temps de la statistique, valeurs possibles : "jour","mois","semaine","annee"
|
||||
* @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) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
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) {
|
||||
reject(err);
|
||||
}else {
|
||||
resolve(res)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/*
|
||||
Ces fonction sont des handlers pour les routes express, elles sont appelées par les routes et renvoient les données au format JSON
|
||||
*/
|
||||
export const handleGetLastReviews = (req, res) => {
|
||||
getLastReviews(req.query.limit)
|
||||
.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);
|
||||
});
|
||||
}
|
||||
|
||||
export const handleGetCriteres = (req, res) => {
|
||||
getCriteres()
|
||||
.then((criteres) => {
|
||||
res.send(criteres);
|
||||
})
|
||||
.catch((err) => {
|
||||
res.status(500).send("Error: " + err.message);
|
||||
});
|
||||
}
|
||||
|
||||
export const handleGetNotesAutres = (req, res) => {
|
||||
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) {
|
||||
getNotesAutresFromReview(req.query.id)
|
||||
.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);
|
||||
});
|
||||
}
|
||||
@@ -1,84 +1,84 @@
|
||||
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)
|
||||
}
|
||||
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)
|
||||
}
|
||||
}
|
||||
@@ -1,52 +1,52 @@
|
||||
//Liste des valeurs valides pour le sexe d'un utilisateur
|
||||
const validSexes = ["h","f","a"];
|
||||
|
||||
//Classe pour représenter un avis laissé sur la borne que ce soit par l'interface web ou par un geste
|
||||
export class Review {
|
||||
/**
|
||||
* Constructeur
|
||||
* @param {Auteur} auteur L'auteur de l'avis
|
||||
* @param {Number} note La note principale entre 0 et 10 compris
|
||||
* @param {String} source La source de l'avis, doit être une entrée dans la table soruces de la bdd
|
||||
* @param {String} commentaire Le commentaire lié a l'avis
|
||||
* @param {Object} notesAutre Les notes secondaires laissées, sous la forme d'un object ou les clés sont les labels de chaque notes et les valeurs sont des notes entre 0 et 10 compris
|
||||
*/
|
||||
constructor(auteur, note, source, commentaire=null, notesAutre={}) {
|
||||
this.auteur = auteur;
|
||||
this.note = note;
|
||||
this.source = source;
|
||||
this.commentaire = commentaire;
|
||||
this.notesAutre = notesAutre;
|
||||
|
||||
//On vérifie si toutes les données sont correctes
|
||||
if(note < 0 || note > 10) {
|
||||
throw new Error("Note principale invalide");
|
||||
}
|
||||
for(let nom in notesAutre) {
|
||||
if(notesAutre[nom] < 0 || notesAutre[nom] > 10) {
|
||||
throw new Error("Note " + notesAutre[nom] +"/10 invalide");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Classe qui représente l'auteur d'un avis
|
||||
export class Auteur {
|
||||
/**
|
||||
* Constructeur
|
||||
* @param {Number} age L'age de l'auteur
|
||||
* @param {String} sexe Le sexe de la personne (doit être dans l'array validSexes défini au début de ce fichier)
|
||||
*/
|
||||
constructor(age=null, sexe=null) {
|
||||
this.age = age;
|
||||
this.sexe = sexe;
|
||||
|
||||
//Verification des données
|
||||
if(sexe != undefined && !validSexes.includes(sexe) ) {
|
||||
throw new Error("Sexe invalide");
|
||||
}
|
||||
if(age != undefined && age <= 0) {
|
||||
throw new Error("Age invalide");
|
||||
}
|
||||
}
|
||||
//Liste des valeurs valides pour le sexe d'un utilisateur
|
||||
const validSexes = ["h","f","a"];
|
||||
|
||||
//Classe pour représenter un avis laissé sur la borne que ce soit par l'interface web ou par un geste
|
||||
export class Review {
|
||||
/**
|
||||
* Constructeur
|
||||
* @param {Auteur} auteur L'auteur de l'avis
|
||||
* @param {Number} note La note principale entre 0 et 10 compris
|
||||
* @param {String} source La source de l'avis, doit être une entrée dans la table soruces de la bdd
|
||||
* @param {String} commentaire Le commentaire lié a l'avis
|
||||
* @param {Object} notesAutre Les notes secondaires laissées, sous la forme d'un object ou les clés sont les labels de chaque notes et les valeurs sont des notes entre 0 et 10 compris
|
||||
*/
|
||||
constructor(auteur, note, source, commentaire=null, notesAutre={}) {
|
||||
this.auteur = auteur;
|
||||
this.note = note;
|
||||
this.source = source;
|
||||
this.commentaire = commentaire;
|
||||
this.notesAutre = notesAutre;
|
||||
|
||||
//On vérifie si toutes les données sont correctes
|
||||
if(note < 0 || note > 10) {
|
||||
throw new Error("Note principale invalide");
|
||||
}
|
||||
for(let nom in notesAutre) {
|
||||
if(notesAutre[nom] < 0 || notesAutre[nom] > 10) {
|
||||
throw new Error("Note " + notesAutre[nom] +"/10 invalide");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Classe qui représente l'auteur d'un avis
|
||||
export class Auteur {
|
||||
/**
|
||||
* Constructeur
|
||||
* @param {Number} age L'age de l'auteur
|
||||
* @param {String} sexe Le sexe de la personne (doit être dans l'array validSexes défini au début de ce fichier)
|
||||
*/
|
||||
constructor(age=null, sexe=null) {
|
||||
this.age = age;
|
||||
this.sexe = sexe;
|
||||
|
||||
//Verification des données
|
||||
if(sexe != undefined && !validSexes.includes(sexe) ) {
|
||||
throw new Error("Sexe invalide");
|
||||
}
|
||||
if(age != undefined && age <= 0) {
|
||||
throw new Error("Age invalide");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user