const express = require('express') const mysql = require("mysql") const dotenv = require('dotenv') const app = express() const path = require("path") const publicDir = path.join(__dirname, './public') var bodyParser = require('body-parser') /* Connexion à la BDD MySQL */ dotenv.config({ path: './.env'}) const db = mysql.createConnection({ host: process.env.DATABASE_HOST, port: process.env.DATABASE_PORT, user: process.env.DATABASE_USER, password: process.env.DATABASE_PASSWORD, database: process.env.DATABASE }) db.connect((error) => { if(error) { console.log(error) } else { console.log("MySQL connected!") } }) app.set('view engine', 'hbs'); app.use(express.static(publicDir)); /* Pour utiliser le bootstrap local */ app.use('/css', express.static(__dirname + '/node_modules/bootstrap/dist/css')); /* configure the Express.js server to receive the form values as JSON */ app.use(bodyParser.urlencoded({extended: false})); app.use(express.json()) app.get("/", (req, res) => { db.query('SELECT c.id as "id", c.libelle as "libelle", c.prix, c.photo as "photo", c.lien, p.prenom as "acheteur", c.achete as "achete", c.paye as "paye", p2.prenom as "responsableAchat", c.pour_noel as "pourNoel" FROM cadeau c LEFT OUTER JOIN participations pc on pc.cadeau = c.id LEFT OUTER JOIN participant p on p.id = pc.offrant LEFT OUTER JOIN participant p2 on p2.id = pc.responsable_achat ORDER BY c.prix', async (error, resultCadeaux) => { let message; if(error){ console.log(error); } if (resultCadeaux && resultCadeaux.length == 0) { console.log("Aucun cadeau"); message = "Aucun cadeau pour l'instant"; } res.render('index', { message: message, cadeaux: resultCadeaux }) }) }); app.get("/choix-offrant", (req, res) => { let cadeau = req.query.cadeau; db.query('SELECT id, prenom FROM participant ORDER BY prenom', async (error, result) => { if(error) { console.log(error); } if (result && result.length > 0) { res.render('offrant', { "cadeau" : cadeau, "listeOffrants": result}); } }) }) app.get("/reservation", (req, res) => { let reqCadeau = req.query.cadeau; let reqOffrant = req.query.offrant; let totalAchats; db.query('SELECT id, libelle, prix, photo, lien, achete, paye, pour_noel as "pourNoel" FROM cadeau WHERE id = ?', [reqCadeau], async (error, infosCadeau) => { if(error) { console.log(error); } if (infosCadeau.length > 0) { db.query('SELECT COALESCE(sum(c.prix),0) as "total" FROM cadeau c RIGHT OUTER JOIN participations pc ON pc.cadeau = c.id INNER JOIN participant p ON p.id = pc.offrant WHERE p.id=?', [reqOffrant], async (error, result) => { if(error) { console.log(error); } if (result && result.length > 0) { totalAchats = result[0] } db.query('SELECT id, prenom FROM participant WHERE id=?', [reqOffrant], async (error, result) => { if(error) { console.log(error); } if (result && result.length > 0) { offrant = result[0]; } }); db.query('SELECT id, prenom FROM participant ORDER BY prenom', async (error, listeResponsables) => { if(error) { console.log(error); } res.render('reservation', { "infosCadeaux": infosCadeau[0], "offrant" : offrant, "totalAchats": totalAchats.total, "listeResponsables" : listeResponsables} ); }) }) } }) }); app.post("/confirm-reservation", (req, res) => { const { cadeau, offrant, achete, paye, occasion, responsableAchat } = req.body db.query('UPDATE cadeau SET achete=?, paye=?, pour_noel=? WHERE ID=?', [achete, paye, occasion, cadeau], function (err, result) { if (err) throw err; console.log("1 record updated"); }); db.query('INSERT INTO participations (offrant, cadeau, responsable_achat) VALUES (?, ?, ?)', [offrant, cadeau, responsableAchat], function (err, result) { if (err) throw err; console.log("1 record inserted"); }); res.redirect('/'); }); // Pour voter sur la présence à son anniversaire app.get("/presence-anniversaire", (req, res) => { let enfant = req.query.e; let present = req.query.p; let messageNotif = enfant + (present == 'true' ? "" : " ne") + " sera" + (present == 'true' ? "" : " pas") + " là le 17 décembre"; db.query("DELETE FROM anniversaire WHERE enfant = ?", [enfant], function (err, result) { if (err) throw err; db.query("INSERT INTO anniversaire (enfant, present) VALUES (?, ?)", [enfant, (present == 'true' ? 1 : 0)], function (err, result) { if (err) throw err; fetch('https://ntfy.thecoredev.fr/anniv-louisa', { method: "POST", body: messageNotif }) res.render('votre-vote', { "enfant": enfant, "present": (present == 'true' ? 1 : 0) }); }); }); }); app.listen(5006, ()=> { console.log("server started on port 5006") });