require('../connections/mysql-server'); require('../helpers/CheckToken'); require('../helpers/config'); const formidable = require('formidable'); const express = require('express'); const router = express.Router(); const bodyParser = require('body-parser'); router.use(bodyParser.urlencoded({ parameterLimit: 100000, limit: '350mb', extended: true })); router.use(bodyParser.json({ parameterLimit: 100000, limit: '350mb', extended: true })); const routes = function () { //#region ANIMATIONS router.get('/getAllAnimations', verifyJWT, (req, res) => { execSQLQuery(`SELECT * FROM animations;`, res, req.originalUrl); }); router.get('/getAnimation/:idanimations', verifyJWT, (req, res) => { const idanimations = req.params.idanimations; execSQLQuery(`SELECT * FROM animations WHERE idanimations = ${idanimations};`, res, req.originalUrl); }); router.post('/insertAnimation', verifyJWT, (req, res) => { const idanimations = req.body.idanimations; const description = req.body.description; execSQLQuery(`INSERT INTO animations(description) VALUES (?);`, res, req.originalUrl, [description]); }); router.patch('/updateAnimation', verifyJWT, (req, res) => { const idanimations = req.body.idanimations; const description = req.body.description; execSQLQuery(`UPDATE animations SET description = ? WHERE idanimations = ?;`, res, req.originalUrl, [description, idanimations]); }); router.delete('/removeAnimation/:idanimations', verifyJWT, (req, res) => { const idanimations = req.params.idanimations; execSQLQuery(`DELETE FROM animations WHERE idanimations = ${idanimations};`, res, req.originalUrl); }); router.post('/CopiarArquivo', verifyJWT, (req, res) => { let form = new formidable.IncomingForm(); form.maxFileSize = 1024 * 1024 * 1024; form.parse(req, function(err,fields,files){ const fs = require('fs'); var idanimations = fields.idanimations; var dir = Variables('src_media') + 'animations/' + idanimations; var oldpath = files.file.path; fs.rename(oldpath, dir + '.mp4', function (err) { if (err) throw err; if(fs.existsSync(dir + '.zip')) { fs.unlink(dir + '.zip', function(err) { zipArquivo(idanimations, dir, res); }); } else { zipArquivo(idanimations, dir, res); } }); }); }); router.get('/backAnimation/:idanimations', (req, res) => { var idanimations = req.params.idanimations; var dir = Variables('src_media') + 'animations/tmp/var/www/html/animations/' + idanimations + '.mp4'; const fs = require('fs'); if(fs.existsSync(dir)) { const fs = require('fs'); fs.readFile(dir, (err, data) => { if (err) throw err; console.log("Requisição de animação: " + idanimations); res.setHeader('Content-Type', 'video/mp4'); res.send(data); }); } else { require('all-unpacker').unpack(Variables('src_media') + 'animations/' + idanimations + '.zip', { targetDir: Variables('src_media') + 'animations/tmp/', password: Variables('passdecrypt'), forceOverwrite: true, }, function(err, files, text) { if (err) return console.error(err); if (files) console.log('files', files); if (text) { console.log('text', text) fs.readFile(dir, (err, data) => { if (err) throw err; console.log("Requisição de animação: " + idanimations); res.setHeader('Content-Type', 'video/mp4'); res.send(data); }); }; }); } }); //#endregion //#region ANIMATIONEXERCISES router.get('/getAllAnimationExercises', verifyJWT, (req, res) => { execSQLQuery(`SELECT * FROM animationexercises;`, res, req.originalUrl); }); router.get('/getAnimationExercises/:idanimations', verifyJWT, (req, res) => { const idanimations = req.params.idanimations; execSQLQuery(` SELECT ae.*, CASE WHEN ae.idexercises IS NOT NULL THEN (SELECT e.description FROM exercises e WHERE e.idexercises = ae.idexercises) WHEN ae.idconversationtree IS NOT NULL THEN (SELECT ct.description FROM alexaconversationtree ct WHERE ct.idconversationtree = ae.idconversationtree) WHEN ae.idzoechattime IS NOT NULL THEN (SELECT z.description FROM zoechattime z WHERE z.idzoechattime = ae.idzoechattime) END AS 'description', CASE WHEN ae.idexercises IS NOT NULL THEN 'Exercício' WHEN ae.idconversationtree IS NOT NULL THEN 'Conversação' WHEN ae.idzoechattime IS NOT NULL THEN 'ChatTime' END AS 'type' FROM animationexercises ae WHERE ae.idanimations = ${idanimations} ORDER BY ae.seconds;`, res, req.originalUrl); }); router.delete('/removeAnimationExercise/:idanimationexercises', verifyJWT, (req, res) => { const idanimationexercises = req.params.idanimationexercises; execSQLQuery(`DELETE FROM animationexercises WHERE idanimationexercises = ${idanimationexercises};`, res, req.originalUrl); }); //#endregion //#region EXERCISE router.post('/insertAnimationExercise', verifyJWT, (req, res) => { const idanimationexercises = req.body.idanimationexercises; const idanimations = parseInt(req.body.idanimations); const idexercises = parseInt(req.body.idexercises); execSQLQuery(`INSERT INTO animationexercises (idexercises, idanimations, seconds) VALUES (${idexercises}, ${idanimations}, 0);`, res, req.originalUrl); }) router.patch('/updateAnimationExercise', verifyJWT, (req, res) => { const idanimationexercises = parseInt(req.body.idanimationexercises); const idanimations = req.body.idanimations; const idexercises = req.body.idexercises; const seconds = parseInt(req.body.seconds); execSQLQuery(`UPDATE animationexercises SET seconds = ${seconds} WHERE idanimationexercises = ${idanimationexercises};`, res, req.originalUrl); }); router.delete('/deleteExercise/:idexercises', verifyJWT, (req, res) => { const idexercises = parseInt(req.params.idexercises); var sqlQuery = `SELECT eq.idexercisequestions FROM exercisequestions eq WHERE eq.idexercises = ${idexercises};`; mysqlConnection.query(sqlQuery, function (error, results, fields) { if (!error && results.length != 0) { let IDExerciseQuestion = results[0]['idexercisequestions']; sqlQuery = `DELETE FROM exerciseanswers WHERE idexercisequestions = ${IDExerciseQuestion};`; mysqlConnection.query(sqlQuery, function (error, results, fields) { sqlQuery = `DELETE FROM exercisequestions WHERE idexercisequestions = ${IDExerciseQuestion};`; mysqlConnection.query(sqlQuery, function (error, results, fields) { sqlQuery = `DELETE FROM exercises WHERE idexercises = ${idexercises};`; mysqlConnection.query(sqlQuery, function (error, results, fields) { console.log("/api/animations/deleteExercise success 200"); res.send(true); }); }); }); } else { sqlQuery = `DELETE FROM exercises WHERE idexercises = ${idexercises};`; mysqlConnection.query(sqlQuery, function (error, results, fields) { console.log("/api/animations/deleteExercise success 200"); res.send(true); }); } }); }) //#endregion //#region CONVERSATION router.post('/insertAnimationConversation', verifyJWT, (req, res) => { const idanimationexercises = req.body.idanimationexercises; const idanimations = parseInt(req.body.idanimations); const idconversationtree = parseInt(req.body.idconversationtree); execSQLQuery(`INSERT INTO animationexercises (idconversationtree, idanimations, seconds) VALUES (${idconversationtree}, ${idanimations}, 0);`, res, req.originalUrl); }); router.patch('/updateAnimationConversation', verifyJWT, (req, res) => { const idanimationexercises = parseInt(req.body.idanimationexercises); const idanimations = req.body.idanimations; const idconversationtree = req.body.idconversationtree; const seconds = parseInt(req.body.seconds); execSQLQuery(`UPDATE animationexercises SET seconds = ${seconds} WHERE idanimationexercises = ${idanimationexercises};`, res, req.originalUrl); }); router.delete('/deleteConversation/:idconverstaiontree', verifyJWT, (req, res) => { const idconverstaiontree = req.params.idconverstaiontree; sqlQuery = `DELETE FROM alexaconversationtree WHERE idconverstaiontree = ${idconverstaiontree};`; mysqlConnection.query(sqlQuery, function (error, results, fields) { console.log(new Date().toUTCString() + " - " + req.originalUrl + "success 200"); res.send(true); }); }); //#endregion //#region CHAT TIME router.post('/insertAnimationChatTime', verifyJWT, (req, res) => { const idanimationexercises = req.body.idanimationexercises; const idanimations = parseInt(req.body.idanimations); const idzoechattime = parseInt(req.body.idzoechattime); execSQLQuery(`INSERT INTO animationexercises (idzoechattime, idanimations, seconds) VALUES (${idzoechattime}, ${idanimations}, 0);`, res, req.originalUrl); }); router.patch('/updateAnimationChatTime', verifyJWT, (req, res) => { const idanimationexercises = parseInt(req.body.idanimationexercises); const seconds = parseInt(req.body.seconds); execSQLQuery(`UPDATE animationexercises SET seconds = ${seconds} WHERE idanimationexercises = ${idanimationexercises};`, res, req.originalUrl); }); router.delete('/deleteChatTime/:idzoechattime', verifyJWT, (req, res) => { const idzoechattime = parseInt(req.params.idzoechattime); let sqlQuery0 = `DELETE FROM zoechattimesentences WHERE idzoechattimedialog in (select idzoechattimedialog from zoechattimedialog where idzoechattime = ${idzoechattime});`; let sqlQuery1 = `DELETE FROM zoechattimedialog WHERE idzoechattime = ${idzoechattime};`; let sqlQuery2 = `DELETE FROM zoechattime WHERE idzoechattime = ${idzoechattime};`; mysqlConnection.query(sqlQuery0, function (error, results, fields) { mysqlConnection.query(sqlQuery1, function (error, results, fields) { mysqlConnection.query(sqlQuery2, function (error, results, fields) { console.log(new Date().toUTCString() + " - " + req.originalUrl + "success 200"); res.send(true); }); }); }); }); //#endregion return router; } function zipArquivo(idanimations, dir, res) { const fs = require('fs'); require('all-unpacker').pack(Variables('src_media') + 'animations/' + idanimations + '.zip', { targetDir: Variables('src_media') + 'animations/' + idanimations + '.mp4', password: Variables('passdecrypt'), }, function(err, files, text) { if (err) return console.error(err); if (files) console.log('files', files); if (text) { const shell = require('shelljs'); shell.exec('chmod -R 777 /var/www/html/animations/', function(Sucesso) { console.log('text', text); //console.log("compactado"); if(fs.unlinkSync(dir + '.mp4')) { console.log("Falha ao excluir"); res.send(true); } else { console.log("Excluído com sucesso!"); res.send(true); } }) }; }); } module.exports = routes;