ZoeApi/controllers/animationsController.js

307 lines
13 KiB
JavaScript

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;