require('../connections/mysql-server'); require('../helpers/CheckToken'); const express = require('express'); const router = express.Router(); const bodyParser = require('body-parser'); const formidable = require('formidable'); router.use(bodyParser.urlencoded({ limit: '100mb', extended: true })); router.use(bodyParser.json({ limit: '100mb', extended: true })); var routes = function () { router.get('/getAnswers/:idexercisequestions', verifyJWT, (req, res) => { const idexercisequestions = parseInt(req.params.idexercisequestions); execSQLQuery(`SELECT * FROM exerciseanswers WHERE idexercisequestions = ${idexercisequestions};`, res, req.originalUrl); }) router.get('/getAnswersByid/:idexerciseanswers', verifyJWT, (req, res) => { const idexerciseanswers = parseInt(req.params.idexerciseanswers); execSQLQuery(`SELECT * FROM exerciseanswers WHERE idexerciseanswers = ${idexerciseanswers};`, res, req.originalUrl); }); router.get('/getUserAnswersFixed/:idusers/:idunits', verifyJWT, (req, res) => { const idusers = parseInt(req.params.idusers); const idunits = parseInt(req.params.idunits); execSQLQuery(`SELECT * FROM usergivenanswers WHERE idusers = ${idusers} AND idunits = ${idunits} AND fixed = 1;`, res, req.originalUrl); }) router.get('/getUserAnswers/:idusers/:idunits', verifyJWT, (req, res) => { const idusers = parseInt(req.params.idusers); const idunits = parseInt(req.params.idunits); execSQLQuery(`SELECT idusergivenanswers, idusers, idexerciseanswers, date_answered, case when fixed = 0 then 'Não' else 'Sim' end as fixed, idclasses, idunits FROM usergivenanswers WHERE idusers = ${idusers} AND idunits = ${idunits};`, res, req.originalUrl); }) router.get('/getUserAnswersById/:idusergivenanswers', verifyJWT, (req, res) => { const idusergivenanswers = req.params.idusergivenanswers; execSQLQuery(`SELECT * FROM usergivenanswers WHERE idusergivenanswers = ${idusergivenanswers};`, res, req.originalUrl); }) router.get('/getUserAnswersByAnsID/:idanswers/:idusers/:idunits', verifyJWT, (req, res) => { const idanswers = parseInt(req.params.idanswers); const idusers = parseInt(req.params.idusers); const idunits = parseInt(req.params.idunits); execSQLQuery(`SELECT * FROM usergivenanswers WHERE idexerciseanswers = ${idanswers} AND idusers = ${idusers} AND idunits = ${idunits};`, res, req.originalUrl); }) router.get('/getUserAnswersByClass/:idclasses/:idusers/:idunits', verifyJWT, (req, res) => { const idclasses = parseInt(req.params.idclasses); const idusers = parseInt(req.params.idusers); const idunits = parseInt(req.params.idunits); execSQLQuery(`SELECT * FROM usergivenanswers WHERE idclasses = ${idclasses} AND idusers = ${idusers} AND idunits = ${idunits};`, res, req.originalUrl); }) router.get('/getUserAnswersNotFixed/:idusers/:idunits', verifyJWT, (req, res) => { const idusers = parseInt(req.params.idusers); const idunits = parseInt(req.params.idunits); execSQLQuery(`SELECT ua.idusergivenanswers, ua.idusers, ua.idexerciseanswers, ua.date_answered, 'Não' as fixed, ua.idclasses, c.name as 'classname' FROM usergivenanswers ua INNER JOIN classes c ON ua.idclasses = c.idclasses WHERE ua.idusers = ${idusers} AND ua.idunits = ${idunits} AND fixed = 0;`, res, req.originalUrl); }) router.get('/getHomeworkNotFixed/:idusers', verifyJWT, (req, res) => { let idusers = req.params.idusers; execSQLQuery(` SELECT 0 as idexerciseanswers, sc.idusers, c.name as 'classname', 'Lição de casa' as 'date_answered', 'Não' as 'fixed', sc.idclasses FROM stepclass sc INNER JOIN classes c ON c.idclasses = sc.idclasses WHERE sc.homework AND sc.completedClass = 1 AND sc.note is null AND sc.idusers = ${idusers} AND false;`, res, req.originalUrl ); }) router.post('/insertuseranswer', verifyJWT, (req, res) => { const usergivenanswerid = parseInt(req.body.usergivenanswerid); const idusers = parseInt(req.body.idusers); const idexerciseanswers = parseInt(req.body.idexerciseanswers); const date_answered = req.body.date_answered; const fixed = req.body.fixed ? 1 : 0; const idclasses = parseInt(req.body.idclasses); const idunits = parseInt(req.body.idunits); mysqlConnection.query('select * from usergivenanswers order by idusergivenanswers desc limit 1;', function (error, results, fields) { let IDuserGivenAnswers = 0; if (!results || results == "" || results.length == 0) IDuserGivenAnswers = 1; else IDuserGivenAnswers = results[0]['idusergivenanswers'] + 1; execSQLQuery(`INSERT INTO usergivenanswers(idusergivenanswers, idusers, idexerciseanswers, date_answered, fixed, idclasses, idunits) VALUES (?, ?, ?, ?, ?, ?, ?);`, res, req.originalUrl, [IDuserGivenAnswers, idusers, idexerciseanswers, date_answered, fixed, idclasses, idunits], function(Retorno) { if (Retorno.status == 500) { console.log(Retorno.error); } }); }); }); router.patch('/fixAnswer', verifyJWT, (req, res) => { const idexerciseanswers = parseInt(req.body.idexerciseanswers); const iscorrect = req.body.iscorrect ? 1 : 0; execSQLQuery(`UPDATE exerciseanswers SET iscorrect = ${iscorrect} WHERE idexerciseanswers = ${idexerciseanswers}`, res, req.originalUrl); }); router.get('/fixUserAnswer/:idusergivenanswers', verifyJWT, (req, res) => { const idusergivenanswers = parseInt(req.params.idusergivenanswers); execSQLQuery(`UPDATE usergivenanswers SET fixed = 1 WHERE idusergivenanswers = ${idusergivenanswers};`, res, req.originalUrl); }); router.delete('/delete/:idexerciseanswers', verifyJWT, (req, res) => { const idexerciseanswers = parseInt(req.params.idexerciseanswers); execSQLQuery(`DELETE FROM exerciseanswers WHERE idexerciseanswers = ${idexerciseanswers}`, res, req.originalUrl); }); router.post('/insert', verifyJWT, (req, res) => { const idexercisequestions = parseInt(req.body.idexercisequestions); const hasmedia = req.body.hasmedia ? 1 : 0; const content = req.body.content; const iscorrect = req.body.iscorrect ? 1 : 0; const orientation = req.body.orientation ? 1 : 0; execSQLQuery(`INSERT INTO exerciseanswers(idexercisequestions, hasmedia, content, iscorrect, orientation) VALUES (?, ?, ?, ?, ?);`, res, req.originalUrl, [idexercisequestions, hasmedia, content, iscorrect, orientation]); }); router.patch('/update', verifyJWT, function (req, res) { const idexerciseanswers = parseInt(req.body.idexerciseanswers); const idexercisequestions = parseInt(req.body.idexercisequestions); const hasmedia = req.body.hasmedia ? 1 : 0; const content = req.body.content; const iscorrect = req.body.iscorrect; const orientation = req.body.orientation; execSQLQuery(`UPDATE exerciseanswers SET hasmedia = ?, content = ?, iscorrect = ?, orientation = ?, idexercisequestions = ? WHERE idexerciseanswers = ?;`, res, req.originalUrl, [hasmedia, content, iscorrect, orientation, idexercisequestions, idexerciseanswers]); }); router.post('/copy', verifyJWT, (req, res) => { var base64ToImage = require('base64-to-image'); var img64 = req.body.src; var idexerciseanswers = req.body.idexerciseanswers; var Name = 'ans_' + idexerciseanswers; var Obj = {'fileName': Name, 'type':'jpg'}; var path = Variables('src_media') + 'images/'; if(base64ToImage(img64,path,Obj)) { res.send(true); } else { res.send(false); } //res.send("images uploaded with success!"); }); router.post('/copy2', verifyJWT, (req, res) => { let form = new formidable.IncomingForm(); form.maxFileSize = 600 * 1024 * 1024; form.parse(req, function(err,fields,files){ const fs = require('fs'); var name = fields.name; var dir = Variables('src_media') + 'images/' + name; var oldpath = files.file.path; if(fs.existsSync(dir)) { fs.unlink(dir, function(err) { fs.rename(oldpath, dir, function (err) { res.send(true); }) }); } else { fs.rename(oldpath, dir, function (err) { res.send(true); }) } }); }); router.patch('/removerRespostas', verifyJWT, function (req, res, next) { let idexerciseanswers = req.body.idexerciseanswers; let ids = idexerciseanswers.split(','); index1 = 0; removeAnswers(ids, res); }); return router; }; index1 = 0; function removeAnswers(ids, res) { if (index1 < ids.length - 1) { let sqlQuery = `UPDATE exerciseanswers SET idexercisequestions = null WHERE idexerciseanswers = ${ids[index1]};`; console.log(sqlQuery); mysqlConnection.query(sqlQuery, function (error, results, fields) { console.log("QuestionID " + ids[index1] + " removed"); index1++; removeAnswers(ids, res); }); } else { res.send("answers removed"); } } module.exports = routes;