ZoeApi/controllers/classescontentController.js

362 lines
14 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

require('../connections/mysql-server');
require('../helpers/CheckToken');
const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
router.use(bodyParser.urlencoded({ extended: true }));
router.use(bodyParser.json());
var routes = function () {
router.get('/', verifyJWT, (req, res) => {
execSQLQuery(`SELECT * FROM classescontent`, res, req.originalUrl);
});
router.get('/getAll', (req, res) => {
execSQLQuery(`SELECT * FROM classescontent`, res, req.originalUrl);
});
router.get('/getIdClasses1/:idclasses', verifyJWT, (req, res) => {
const idclasses = parseInt(req.params.idclasses);
execSQLQuery(`SELECT
*
FROM classescontent
WHERE idclasses = ${idclasses}
ORDER BY ordem asc;`, res, req.originalUrl);
});
router.get('/getCCbyEx/:idexercises', verifyJWT, (req, res) => {
const idexercises = parseInt(req.params.idexercises);
execSQLQuery(`SELECT
*
FROM classescontent
WHERE idexercises = ${idexercises};`, res, req.originalUrl);
});
router.get('/getIdClasses/:idclasses', verifyJWT, (req, res) => {
const idclasses = parseInt(req.params.idclasses);
execSQLQuery(`SELECT
MAX(ordem) as ordem
FROM classescontent
WHERE idclasses = ${idclasses};`, res, req.originalUrl);
});
router.get('/getClassescontent/:idclasses', verifyJWT, (req, res) => {
const idclasses = parseInt(req.params.idclasses);
execSQLQuery(`SELECT
*
FROM
(SELECT
c.idclassescontent,
c.idclasses,
c.ordem,
c.idexercises,
e.description,
e.enabled,
'Exercício' as type,
'Editar' as acao,
'' as obs
FROM classescontent c
INNER JOIN exercises e ON c.idexercises = e.idexercises
WHERE c.idclasses = ${idclasses}
UNION ALL
SELECT
c.idclassescontent,
c.idclasses,
c.ordem,
c.idmedia,
m.description,
1 as enabled,
'Mídia' as type,
'Prever' as acao,
m.publishid as obs
FROM classescontent c
INNER JOIN media m ON c.idmedia = m.idmedia
WHERE c.idclasses = ${idclasses}
UNION ALL
SELECT
c.idclassescontent,
c.idclasses,
c.ordem,
c.idtexts,
t.description,
t.enabled,
case when t.game = 0 then 'Texto' else 'Jogo' end as type,
'Editar' as acao,
'' as obs
FROM classescontent c
INNER JOIN texts t ON c.idtexts = t.idtexts
WHERE c.idclasses = ${idclasses}
UNION ALL
SELECT
c.idclassescontent,
c.idclasses,
c.ordem,
c.idgames,
t.description,
t.enabled,
case when t.game = 0 then 'Texto' else 'Jogo' end as type,
'Editar' as acao,
'' as obs
FROM classescontent c
INNER JOIN texts t ON c.idgames = t.idtexts
WHERE c.idclasses = ${idclasses}
UNION ALL
SELECT
c.idclassescontent,
c.idclasses,
c.ordem,
c.idslides,
s.title,
1 as enabled,
'Slide' as type,
'Editar' as acao,
'' as obs
FROM classescontent c
INNER JOIN slides s ON c.idslides = s.idslides
WHERE c.idclasses = ${idclasses}
UNION ALL
SELECT
c.idclassescontent,
c.idclasses,
c.ordem,
c.montagem,
'Hora da montagem' as description,
1 as enabled,
'Montagem' as type,
'' as acao,
'' as obs
FROM classescontent c
WHERE c.idclasses = ${idclasses} AND c.montagem = 1
UNION ALL
SELECT
c.idclassescontent,
c.idclasses,
c.ordem,
c.idanimations,
a.description,
1 as enabled,
'Animação' as type,
'Editar' as acao,
'' as obs
FROM classescontent c
INNER JOIN animations a ON c.idanimations = a.idanimations
WHERE c.idclasses = ${idclasses}
UNION ALL
SELECT
c.idclassescontent,
c.idclasses,
c.ordem,
c.idzoechattime,
ct.description,
1 as enabled,
'ChatTime' as type,
'Editar' as acao,
'' as obs
FROM classescontent c
INNER JOIN zoechattime ct ON c.idzoechattime = ct.idzoechattime
WHERE c.idclasses = ${idclasses}
UNION ALL
SELECT
c.idclassescontent,
c.idclasses,
c.ordem,
c.idcharactersConversation,
cc.description,
1 as enabled,
'Diálogo' as type,
'Editar' as acao,
'' as obs
FROM classescontent c
INNER JOIN charactersConversation cc ON c.idcharactersConversation = cc.idcharactersConversation
WHERE c.idclasses = ${idclasses}
UNION ALL
SELECT
c.idclassescontent,
c.idclasses,
c.ordem,
c.idzoelistenrepeat,
lr.description,
1 as enabled,
'ListenRepeat' as type,
'Editar' as acao,
'' as obs
FROM classescontent c
INNER JOIN zoelistenrepeat lr ON c.idzoelistenrepeat = lr.idzoelistenrepeat
WHERE c.idclasses = ${idclasses}
UNION ALL
SELECT
c.idclassescontent,
c.idclasses,
c.ordem,
c.idfiles,
f.description,
1 as enabled,
'Download' as type,
'Baixar' as acao,
'' as obs
FROM classescontent c
INNER JOIN files f ON c.idfiles = f.idfiles
WHERE c.idclasses = ${idclasses}
) result
ORDER BY result.ordem;`, res, req.originalUrl);
});
router.post('/insert', verifyJWT, (req, res) => {
const idexercises = req.body.idexercises || null;
const idmedia = req.body.idmedia || null;
const idtexts = req.body.idtexts || null;
const idclasses = req.body.idclasses || null;
const idslides = req.body.idslides || null;
const idgames = req.body.idgames || null;
const montagem = req.body.montagem || null;
const idanimations = req.body.idanimations || null;
const idzoechattime = req.body.idzoechattime || null;
const idcharactersConversation = req.body.idcharactersConversation || null;
const idzoelistenrepeat = req.body.idzoelistenrepeat || null;
const idfiles = req.body.idfiles || null;
execSQLQuery(`INSERT INTO classescontent(idexercises, idmedia, idtexts, idclasses, ordem, idslides, idgames, montagem, idanimations, idzoechattime, idcharactersConversation, idzoelistenrepeat, idfiles) SELECT
${idexercises}, ${idmedia}, ${idtexts}, ${idclasses}, (select coalesce((select (ordem + 1) as ordem from classescontent where idclasses = ${idclasses} order by ordem desc limit 1), 0)) ,${idslides}, ${idgames}, ${montagem}, ${idanimations}, ${idzoechattime}, ${idcharactersConversation}, ${idzoelistenrepeat}, ${idfiles};`, res, req.originalUrl);
})
router.patch('/update', verifyJWT, (req, res) => {
const idclassescontent = parseInt(req.body.idclassescontent);
const idexercises = req.body.idexercises || null;
const idmedia = req.body.idmedia || null;
const idtexts = req.body.idtexts || null;
const idclasses = req.body.idclasses || null;
const idslides = req.body.idslides || null;
const idgames = req.body.idgames || null;
const montagem = req.body.montagem || null;
const idanimations = req.body.idanimations || null;
const idcharactersConversation = req.body.idcharactersConversation || null;
const idzoelistenrepeat = req.body.idzoelistenrepeat || null;
const idfiles = req.body.idfiles || null;
const ordem = parseInt(req.body.ordem);
execSQLQuery(`UPDATE classescontent SET
idexercises = ${idexercises},
idmedia = ${idmedia},
idtexts = ${idtexts},
idclasses = ${idclasses},
idslides = ${idslides},
idgames = ${idgames},
montagem = ${montagem},
idanimations = ${idanimations},
idcharactersConversation = ${idcharactersConversation},
idzoelistenrepeat, ${idzoelistenrepeat},
idfiles = ${idfiles},
ordem = ${ordem}
WHERE idclassescontent = ${idclassescontent};`, res, req.originalUrl);
})
router.delete('/delete/:idclassescontent', verifyJWT, (req, res) => {
const idclassescontent = req.params.idclassescontent;
execSQLQuery(`DELETE FROM classescontent
WHERE idclassescontent in (${idclassescontent});`, res, req.originalUrl);
})
router.patch('/AtualizarOrdem', verifyJWT, (req, res) => {
const idclassescontent = parseInt(req.body.idclassescontent);
const ordem = parseInt(req.body.ordem);
execSQLQuery(`UPDATE classescontent SET
ordem = ${ordem}
WHERE idclassescontent = ${idclassescontent};`, res, req.originalUrl);
})
router.post('/excluirArquivos', verifyJWT, (req, res) => {
const shell = require('shelljs');
const Tipo = req.body.type;
const IDItem = req.body.idexercises;
switch (Tipo) {
case "Exercício": {
mysqlConnection.query(`SELECT ea.idexerciseanswers FROM exercisequestions eq INNER JOIN exerciseanswers ea ON eq.idexercisequestions = ea.idexercisequestions WHERE eq.idexercises = ${IDItem} AND ea.hasmedia = 1;`, function (error, results, fields) {
for (let i = 0; i < results.length; i++) {
try {
shell.exec("rm " + Variables('src_media') + "images/ans_" + results[i]['idexerciseanswers'] + ".jpg");
}
catch (e) {
console.log("Não apagou");
}
}
res.send(JSON.stringify({
"status": 200,
"error": null,
"response": []
}))
})
break;
}
case "Jogo": {
shell.exec("rm -rf " + Variables('src_media') + "games/" + IDItem + "/", function(Sucesso) {
res.send(JSON.stringify({
"status": 200,
"error": null,
"response": Sucesso
}))
})
break;
}
case "Mídia": {
mysqlConnection.query(`SELECT publishid FROM media WHERE idmedia = ${IDItem};`, function (error, results, fields) {
shell.exec("rm " + Variables('src_media') + "videos/" + results[0]['publishid'] + ".zip", function(Sucesso) {
res.send(JSON.stringify({
"status": 200,
"error": null,
"response": Sucesso
}))
})
})
break;
}
case "Slide": {
shell.exec("rm " + Variables('src_media') + "images/slide_" + IDItem + "_*", function(Sucesso) {
res.send(JSON.stringify({
"status": 200,
"error": null,
"response": Sucesso
}))
})
break;
}
case "Animação": {
shell.exec("rm " + Variables('src_media') + "animations/" + IDItem + ".zip", function(Sucesso) {
res.send(JSON.stringify({
"status": 200,
"error": null,
"response": Sucesso
}))
})
break;
}
case "Aula": {
shell.exec("rm " + Variables('src_media') + "images/back_" + IDItem + "_.jpg", function(Sucesso) {
shell.exec("rm " + Variables('src_media') + "images/gif_" + IDItem + "_.gif", function(Sucesso) {
res.send(JSON.stringify({
"status": 200,
"error": null,
"response": Sucesso
}))
})
})
break;
}
}
});
router.get('/getClassDownloads/:idclasses', verifyJWT, (req, res) => {
const idclasses = parseInt(req.params.idclasses);
execSQLQuery(`select
cc.idclassescontent,
cc.ordem,
f.*
from classescontent cc
inner join files f on f.idfiles = cc.idfiles
where cc.idclasses = ${idclasses};`, res, req.originalUrl);
});
return router;
};
module.exports = routes;