repositorio criado

This commit is contained in:
Diego Freitas 2026-01-27 16:34:25 -03:00
commit 44822b0dce
68 changed files with 35125 additions and 0 deletions

BIN
.checkAPI.sh.swp Normal file

Binary file not shown.

2
.env Normal file
View File

@ -0,0 +1,2 @@
#.env, don't commit to repo
SECRET=FREYNEYMARWEDR

2
.env.example Normal file
View File

@ -0,0 +1,2 @@
# .env.example, commit to repo
SECRET=

50
.gitignore vendored Normal file
View File

@ -0,0 +1,50 @@
# These are some examples of commonly ignored file patterns.
# You should customize this list as applicable to your project.
# Learn more about .gitignore:
# https://www.atlassian.com/git/tutorials/saving-changes/gitignore
# Node artifact files
node_modules/
dist/
# Compiled Java class files
*.class
# Compiled Python bytecode
*.py[cod]
# Log files
*.log
# Package files
*.jar
# Maven
target/
dist/
# JetBrains IDE
.idea/
# Unit test reports
TEST*.xml
# Generated by MacOS
.DS_Store
# Generated by Windows
Thumbs.db
# Applications
*.app
*.exe
*.war
# Large media files
*.mp4
*.tiff
*.avi
*.flv
*.mov
*.wmv

10
checkAPI.sh Normal file
View File

@ -0,0 +1,10 @@
wget -O wgetOut "http://127.0.0.1:3337/api/units/listlogin";
if [[ $? -ne 0 ]]; then
echo "API Offline"
sudo /usr/bin/forever; forever stop zoe_api
sudo /usr/bin/forever; forever start /var/www/zoe_api/forever.json
exit 1;
else
echo "API Online"
exit 0;
fi

124
connections/mysql-server.js Normal file
View File

@ -0,0 +1,124 @@
const mysql = require('mysql');
require('../helpers/config');
require('../helpers/CheckToken');
require("dotenv-safe").load();
var jwt = require('jsonwebtoken');
var MySQLConfig = {
connectionLimit: 100, // Reduzido de 1000 para 100
host: Variables('ip_mysql'),
user: Variables('user_mysql'),
database: Variables('database_mysql'),
password: Variables('password_mysql'),
charset: "utf8mb4"
};
// Criação do pool de conexões MySQL
let pool = mysql.createPool(MySQLConfig);
console.log("MySQL Pool criado!");
// Atribui a conexão global à primeira conexão disponível do pool
global.mysqlConnection = pool;
// Função para verificar se o pool está ativo
function isPoolActive() {
return pool && !pool._closed;
}
// Função para recriar o pool se ele estiver fechado
function recreatePoolIfClosed() {
if (!isPoolActive()) {
console.log('Recriando o pool de conexões MySQL...');
pool = mysql.createPool(MySQLConfig);
console.log("Novo MySQL Pool criado!");
}
}
// Função para executar uma query SQL com verificação do pool
global.execSQLQuery = function execSQLQuery(sqlQry, res, req, Parametros = null, callback = null) {
// Verifica e recria o pool se necessário
recreatePoolIfClosed();
pool.query(sqlQry, Parametros, function (error, results, fields) {
if (error) {
console.error('Erro na consulta MySQL:', error);
if (error.toString().includes("PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR") || error.toString().includes("Connection lost")) {
console.log('Tentando reconectar e executar a consulta novamente...');
execSQLQuery(sqlQry, res, req, Parametros, callback); // Reexecuta a query
return;
}
if (error.toString().includes("Too many connections")) {
console.log('Muitas conexões abertas. Aguardando antes de tentar novamente...');
setTimeout(() => {
execSQLQuery(sqlQry, res, req, Parametros, callback);
}, 1000); // Aumente o tempo de espera para reduzir a sobrecarga
return;
}
// Retorno de erro
let Retorno = { "status": 500, "error": error, "response": [] };
res.send(JSON.stringify(Retorno));
console.log(new Date().toUTCString() + ` - ${req}/ error 500`);
if (callback) callback(Retorno);
return;
}
// Retorno de sucesso
let Retorno = { "status": 200, "error": null, "response": results };
res.send(JSON.stringify(Retorno));
console.log(new Date().toUTCString() + ` - ${req}/ success 200`);
if (callback) callback(Retorno);
});
};
// Similarmente, aplique a verificação nas outras funções
global.execMySQLQueryLogin = function execMySQLQueryLogin(sqlQry, res, req) {
recreatePoolIfClosed();
pool.query(sqlQry, function (error, results, fields) {
if (error || results.length == 0) {
res.send(JSON.stringify({
"status": 500,
"error": error,
"response": [],
"token": null
}));
console.log(new Date().toUTCString() + " - " + req + "/ error 500");
return;
}
var token = jwt.sign({ id }, process.env.SECRET, {
expiresIn: Variables('time_token')
});
res.send(JSON.stringify({
"status": 200,
"error": null,
"response": results,
"token": token
}));
console.log(new Date().toUTCString() + " - " + req + "/ success 200");
});
};
global.execSQLQueryVideo = function execSQLQueryVideo(sqlQry, res, req) {
recreatePoolIfClosed();
pool.query(sqlQry, function (error, results, fields) {
if (!error && results.length != 0) {
let idvideoaccess = results[0]['idvideoaccess'];
res.redirect(results[0]['url']);
// Atualização após redirecionamento
setTimeout(() => {
pool.query(`UPDATE videoaccess SET expired = 1 where idvideoaccess = ${idvideoaccess}`, function (error, results, fields) {
if (error) {
console.error('Erro ao atualizar videoaccess:', error);
}
});
}, 1000);
} else {
res.send("not found");
}
});
};

80
connections/sql-server.js Normal file
View File

@ -0,0 +1,80 @@
const sql = require('mssql');
require('../helpers/config');
require('../helpers/CheckToken');
const ip = Variables('ip_sqlServer');
const user = Variables('user_sqlServer');
const pass = Variables('password_sqlServer');
require("dotenv-safe").load();
var jwt = require('jsonwebtoken');
const connStr = "Server=" + ip + ";User Id=" + user + ";Password=" + pass;
global.AtualizaConexaoSQLServer = function AtualizaConexaoSQLServer() {
console.log("Renovando conexão SQLServer...");
try {
sql.close();
}
catch (e) {}
sql.connect(connStr).then(sqlServerConnection => {
global.sqlServerConnection = sqlServerConnection;
console.log('SQLServer Conectado!');
}).catch(err => {
global.sqlServerConnection = null;
console.log("Impossivel conectar ao SQL Server...");
//console.log(err)
});
}
AtualizaConexaoSQLServer();
global.execSQLQuery2 = function execSQLQuery2(sqlQry, res, req, callback = null) {
if (Variables("local") == "Local") {
res.send(JSON.stringify({
"status": 403,
"error": "Modo de emergência, SQL Server desconectado",
"response": []
}));
console.log(new Date().toUTCString() + " - " + req + "/ error 403");
return;
}
sqlServerConnection.request().query(sqlQry, function (error, results, fields) {
let Retorno = [];
if (error || results.length == 0) {
Retorno = { "status": 500, "error": error, "response": [] };
}
else {
Retorno = { "status": 200, "error": error, "response": results.recordsets };
}
res.send(JSON.stringify(Retorno));
console.log(new Date().toUTCString() + ` - ${req}/ ${(Retorno.status == 500) ? 'error' : 'success'} ${Retorno.status}`);
if (callback)
callback(Retorno);
});
};
global.execSQLQueryLogin = function execSQLQueryLogin(sqlQry, res, req) {
sqlServerConnection.request().query(sqlQry, function (error, results, fields) {
if (error || results.recordsets[0].length == 0) {
res.send(JSON.stringify({
"status": 500,
"error": error,
"response": [],
"token": null
}))
console.log(new Date().toUTCString() + " - " + req + "/ error 500");
}
else {
var token = jwt.sign({ id }, process.env.SECRET, {
expiresIn: Variables('time_token')
});
res.send(JSON.stringify({
"status": 200,
"error": error,
"response": results.recordsets,
"token": token //encriptPassword(token, token.length)
}));
console.log(new Date().toUTCString() + " - " + req + "/ success 200");
}
})
};

View File

@ -0,0 +1,29 @@
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('/states', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
FROM states;`, res, req.originalUrl);
});
router.get('/citiesbyState/:idstates', verifyJWT, (req, res) => {
const idstates = parseInt(req.params.idstates);
execSQLQuery(`SELECT
*
FROM cities
WHERE idstates = ${idstates};`, res, req.originalUrl);
});
return router;
};
module.exports = routes;

View File

@ -0,0 +1,60 @@
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('/getAllEventos', (req, res) => {
execSQLQuery(`SELECT
*
FROM agenda;`, res, req.originalUrl);
});
router.post('/insertEventos', verifyJWT, (req, res) => {
const title = req.body.title;
const date = req.body.date;
const hour = req.body.hour;
const duration = req.body.duration;
const description = req.body.description;
const access = req.body.access;
execSQLQuery(` INSERT INTO agenda (title, date, hour, duration, description, access) values
(
?,?,'2021-01-01T${hour}',?,?,?
)` , res, req.originalUrl, [title, date, duration, description, access]);
});
router.post('/editEventos', verifyJWT, (req, res) => {
const id = req.body.id;
const title = req.body.title;
const date = req.body.date;
const hour = req.body.hour;
const duration = req.body.duration;
const description = req.body.description;
const access = req.body.access;
execSQLQuery(` UPDATE agenda SET
title='${title}',
date='${date}',
hour='2021-01-01T${hour}',
duration='${duration}',
description='${description}',
access='${access}'
WHERE (idagenda = '${id}')`
, res, req.originalUrl);
});
router.post('/deleteEventos', verifyJWT, (req, res) => {
const id = req.body.id;
execSQLQuery(` DELETE FROM agenda
WHERE (idagenda = '${id}')`
, res, req.originalUrl);
});
return router;
};
module.exports = routes;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,307 @@
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;

View File

@ -0,0 +1,271 @@
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;

1641
controllers/appController.js Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,384 @@
require("../connections/mysql-server");
require("../helpers/CheckToken");
require("../helpers/config");
const express = require("express");
const router = express.Router();
const bodyParser = require("body-parser");
const { genSerialList, generateCSV } = require("../helpers/serialBook");
router.use(
bodyParser.urlencoded({
limit: "10mb",
extended: true,
})
);
router.use(
bodyParser.json({
limit: "10mb",
extended: true,
})
);
var routes = function () {
router.get("/listLotes", verifyJWT, (req, res) => {
execSQLQuery(
`SELECT
*
FROM barlotes;`,
res,
req.originalUrl
);
});
router.get("/listBarCodes", verifyJWT, (req, res) => {
execSQLQuery(
`SELECT
*
FROM barcodes;`,
res,
req.originalUrl
);
});
router.get("/listBarcodesByAny/:field/:value", verifyJWT, (req, res) => {
var field = req.params.field;
var value = req.params.value;
execSQLQuery(
`SELECT
bc.*,
un.unityname as 'unity',
co.name as 'course',
un2.unityname as 'unity_env',
co2.name as 'course_apo'
FROM barcodes bc
left join units un on un.idunits = bc.idunits
left join courses co on co.idcourses = bc.idcourses
left join units un2 on un2.idunits = bc.idunits_env
left join courses co2 on co2.idcourses = bc.idcourses_apo
WHERE bc.${field} = '${value}';`,
res,
req.originalUrl
);
});
router.post("/insertLotes", verifyJWT, (req, res) => {
const qtdepack = parseInt(req.body.qtdepack);
const date = req.body.date;
execSQLQuery(
`INSERT INTO barlotes(qtdepack, date)
VALUES (?, ?);`,
res,
req.originalUrl,
[qtdepack, date]
);
});
router.post("/createSerial", verifyJWT, (req, res) => {
let oldserialExists = req.body.oldserial;
let quantity = parseInt(req.body.quantity);
let disAllowFranchise = quantity < 2 && !oldserialExists;
function deleteList(list) {
let deleteQuery = "DELETE FROM myrobot.serialbook WHERE serial = ?";
Object.values(list).forEach((element) => {
mysqlConnection.query(deleteQuery, element.serial, function (err) {
if (err) {
console.log(
new Date(),
"Erro ao deletar registros api/barcode/createSerial post",
err
);
}
});
});
}
if (quantity < 1 || disAllowFranchise) {
console.log(
new Date(),
"Erro ao gerar registros api/barcode/createSerial post error 400"
);
res
.status(400)
.send(
"Quantidade mínima de etiquetas por lote: 1 ou código antigo não foi enviado"
);
} else {
let selectQuery = "SELECT serial FROM myrobot.serialbook;";
mysqlConnection.query(selectQuery, function (error, results, fields) {
if (error) {
console.log(
new Date(),
"Erro ao obter registros api/barcode/createSerial post error 500"
);
res.status(500).send(error);
}
genSerialList(quantity, results)
.then((serialList) => {
let insertQuery =
"INSERT INTO myrobot.serialbook (serial, createdAt, updatedAt, oldserial) VALUES ?";
let valuesList = [];
Object.values(serialList).forEach((element) => {
quantity < 2 ? (element.oldserial = req.body.oldserial) : "";
valuesList.push([
element.serial,
element.createdAt,
element.updatedAt,
element.oldserial,
]);
});
mysqlConnection.query(insertQuery, [valuesList], function (err) {
if (err) {
console.log(
new Date(),
"Erro ao salvar registros api/barcode/createSerial post error 500",
err
);
res.status(500).json({
message: "Não foi possível salvar os registros",
erro: err,
});
deleteList(serialList);
} else {
if (serialList.length < 2) {
console.log(
new Date(),
" - api/barcode/createSerial post success 200"
);
res.status(200).json({
serial: serialList[0].serial,
});
} else {
generateCSV(serialList)
.then((path) => {
console.log(
new Date(),
" - api/barcode/createSerial post success 200"
);
res.download(path);
})
.catch((err) => {
console.log(
new Date(),
"Erro ao enviar registros api/barcode/createSerial post error 500",
err
);
res.status(500).json({
message: "Não foi possível enviar os registros",
erro: err,
});
deleteList(serialList);
});
}
}
});
})
.catch((error) => {
console.log(
new Date(),
"Erro ao gerar registros api/barcode/createSerial post error 500",
error
);
res.status(500).json({
message: "Impossível gerar seriais",
erro: error,
});
});
});
}
});
router.put("/createSerial", verifyJWT, (req, res) => {
let dateUpdate = new Date();
let values = [
req.body.user,
req.body.course,
req.body.unity,
true,
dateUpdate,
req.body.serial,
];
Object.values(values).forEach((element) => {
let notEmpty = !!element;
if (!notEmpty) {
return res.status(400).json({ error: "Faltam campos na requisição" });
}
});
let updateQuery =
"UPDATE myrobot.serialbook SET iduser = ?, idcourse = ?, idunity = ?, used = ?, updatedAt = ? WHERE serial = ? AND used = false";
mysqlConnection.query(
updateQuery,
values,
function (error, results, fields) {
if (error) {
console.log(
new Date(),
"Erro ao alterar registro api/barcode/createSerial put error 500",
error
);
res.status(500).json({
message: "Não foi possível atualizar o serial",
});
} else {
console.log(
new Date(),
" - api/barcode/createSerial put success 200"
);
res.status(200).json({
results: results,
});
}
}
);
});
router.get("/createSerial", verifyJWT, (req, res) => {
let values = [req.query.user, req.query.course, req.query.unity];
let validFields = true;
for (let i = 0; i < values.length; i++) {
let notEmpty = !!values[0];
if (!notEmpty) {
validFields = false;
break;
}
}
if (validFields) {
let selectQuery =
"SELECT * FROM myrobot.serialbook WHERE iduser = ? AND idcourse = ? AND idunity = ?"
mysqlConnection.query(
selectQuery,
values,
function (error, results, fields) {
if (error) {
console.log(
new Date(),
"Erro ao obter registros api/barcode/createSerial get error 500",
error
);
res.status(500).json({
message: "Não foi possível pesquisar pelo serial",
});
} else {
console.log(new Date(), "api/barcode/createSerial get 200");
res.status(200).json({
results: results,
});
}
}
);
} else {
console.log(
new Date(),
"Erro ao obter registro api/barcode/createSerial get error 400"
);
return res.status(400).json({ error: "Faltam campos na requisição" });
}
});
router.get("/listSerial", verifyJWT, (req, res) => {
let selectQuery =
"SELECT sb.idserialbook, sb.serial, sb.createdAt, sb.oldserial FROM myrobot.serialbook as sb limit 100;";
mysqlConnection.query(selectQuery, function (error, results, fields) {
if (error) {
console.log(error);
res.status(500).json({
message: "Não foi possivel obter os seriais",
});
} else {
res.status(200).json({
results: results,
});
}
});
});
router.post("/insertBarcodes", verifyJWT, (req, res) => {
const idbarlotes = parseInt(req.body.idbarlotes);
const _key = req.body._key;
const ordem = parseInt(req.body.ordem);
execSQLQuery(
`INSERT INTO barcodes(idbarlotes, _key, ordem) VALUES
(?, ?, ?);`,
res,
req.originalUrl,
[idbarlotes, _key, ordem]
);
});
router.patch("/updateBarcodes", verifyJWT, (req, res) => {
const idbarcodes = parseInt(req.body.idbarcodes);
const idusers = parseInt(req.body.idusers);
const idunits = parseInt(req.body.idunits);
const idcourses = parseInt(req.body.idcourses);
execSQLQuery(
`UPDATE barcodes SET
idusers = ${idusers},
idunits = ${idunits},
idcourses = ${idcourses}
WHERE idbarcodes = ${idbarcodes};`,
res,
req.originalUrl
);
});
router.post("/generateTxt", verifyJWT, (req, res) => {
var name = req.body.name;
var content = req.body.content;
var fs = require("fs");
fs.writeFile(
Variables("src_media") + "barcodes/" + name + ".txt",
content,
function (erro) {
if (erro) {
throw erro;
} else {
res.send(true);
}
}
);
});
router.get("/downloadPack/:idbarlotes", verifyJWT, (req, res) => {
var idbarlotes = req.params.idbarlotes;
var path = Variables("src_media") + "barcodes";
var fs = require("fs");
if (!fs.existsSync(path + "/codigo_barras_" + idbarlotes + ".zip")) {
require("all-unpacker").pack(
path + "/barlote_" + idbarlotes + ".zip",
{
targetDir: path + "/codigo_barras_" + idbarlotes + ".txt",
},
function (err, files, text) {
if (err) return console.error(err);
if (files) console.log("files", files);
if (text) {
console.log("text", text);
console.log("compactado");
res.send(true);
}
}
);
} else {
res.send(true);
}
});
router.post("/VincularCodigo", verifyJWT, (req, res) => {
const idbarcodes = parseInt(req.body.idbarcodes);
const idunits_env = parseInt(req.body.idunits_env);
const idcourses_apo = parseInt(req.body.idcourses_apo);
execSQLQuery(
`UPDATE barcodes SET
idunits_env = ${idunits_env},
idcourses_apo = ${idcourses_apo}
WHERE idbarcodes = ${idbarcodes};`,
res,
req.originalUrl
);
});
return router;
};
module.exports = routes;

View File

@ -0,0 +1,17 @@
require('../connections/mysql-server');
class BaseController {
constructor() {
this.express = require('express');
this.app = this.express();
this.router = this.express.Router();
this.bodyParser = require('body-parser');
this.app.use(this.bodyParser.urlencoded({ extended: true }));
this.app.use(this.bodyParser.json());
this.declareRoute();
}
}
module.exports = BaseController;

View File

@ -0,0 +1,171 @@
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('/getChamadasProfessor/:IDFuncionario/:db', verifyJWT, (req, res) => {
const IDFuncionario = parseInt(req.params.IDFuncionario);
const db = req.params.db;
execSQLQuery2(`SELECT
ch.IDChamadas,
ch.IDTurma,
ch.IDCurso,
ch.Data,
tt.IDMatricula,
co.NomeVersao
FROM ${db}Chamadas ch
INNER JOIN ${db}Cursos co ON co.Codigo = ch.IDCurso
INNER JOIN ${db}TreinandosTurmas tt ON tt.IDCurso = ch.IDCurso AND tt.CodigoTurma = ch.IDTurma
WHERE ch.IDInstrutor = ${IDFuncionario};`, res, req.originalUrl);
});
router.get('/getQRCodeAluno/:_key', verifyJWT, (req, res) => {
const _key = req.params._key;
execSQLQuery(`SELECT
qr.idusers,
qr.idunits
FROM qrcodes qr
where qr._key = ?;`, res, req.originalUrl, [_key]);
});
router.get('/getInfoAluno/:IDMatricula/:db', verifyJWT, (req, res) => {
const IDMatricula = parseInt(req.params.IDMatricula);
const db = req.params.db;
execSQLQuery2(`SELECT DISTINCT
cl.Nome,
cu.Codigo AS 'IDCurso',
cu.NomeVersao,
tt.IDTreinando,
tt.CodigoTurma,
(select count(*) from ${db}Chamadas ch2 where ch2.IDTurma = tt.CodigoTurma and ch2.IDCurso = tt.IDCurso) AS qtde_presencas
FROM ${db}TreinandosTurmas tt
INNER JOIN ${db}Clientes cl ON cl.IDCliente = tt.IDTreinando
INNER JOIN ${db}Cursos cu ON cu.Codigo = tt.IDCurso
LEFT JOIN ${db}Chamadas ch ON tt.CodigoTurma = ch.IDTurma AND tt.IDCurso = ch.IDCurso
LEFT JOIN ${db}ChamadasDetalhes cd ON cd.IDChamadas = ch.IDChamadas AND cd.IDTreinando = tt.IDTreinando
WHERE tt.IDMatricula = ${IDMatricula} and tt.CodigoTurma > 0
GROUP BY cl.Nome, cu.Codigo, cu.NomeVersao, tt.IDTreinando, tt.CodigoTurma, tt.IDCurso
ORDER BY cl.Nome ASC;`, res, req.originalUrl);
});
router.get('/checarCursoParaChamada/:IDTurma/:idCourse/:db', verifyJWT, (req, res) => {
const IDTurma = parseInt(req.params.IDTurma);
const idCourse = parseInt(req.params.idCourse);
const db = req.params.db;
execSQLQuery2(`SELECT
tc.IdTurmasCalendario,
tc.Data,
tc.HoraInicial,
tc.HoraFinal,
tc.CodigoInstrutor
FROM ${db}TurmasCalendario tc
WHERE tc.IdTurma = ${IDTurma} AND CodigoCurso = ${idCourse} AND tc.Ministrado = 0
ORDER BY tc.Data ASC;`, res, req.originalUrl);
});
router.post('/EnviarChamada', verifyJWT, (req, res) => {
const db = req.body.db;
const Alunos = JSON.parse(req.body.Alunos);
console.log(Alunos);
RealizaChamada(0, db, Alunos, function(Sucesso) {
res.send(Sucesso);
});
});
router.post('/insertNewToken', verifyJWT, (req, res) => {
const db = req.body.db;
const description = req.body.description;
const idunits = req.body.idunits;
const token = req.body.token;
execSQLQuery(`insert into appnotifications (description, idunits, token) values (?, ?, ?);`, res, req.originalUrl, [description, idunits, token]);
});
router.post('/changeReceive', verifyJWT, (req, res) => {
const token = req.body.token;
execSQLQuery(`update appnotifications set receive = !receive where token = ?;`, res, req.originalUrl, [token]);
});
router.get('/getAllUnitTokens/:idunits', verifyJWT, (req, res) => {
const idunits = req.params.idunits;
execSQLQuery(`select * from appnotifications where receive = 1 and ${(idunits > 0) ? 'idunits = ?' : 'true'};`, res, req.originalUrl, [idunits]);
});
return router;
};
function RealizaChamada(Index, db, Alunos, callback) {
if (Index < Alunos.length) {
const sqlGetTurmasCalendario = `SELECT
tc.IdTurmasCalendario,
tc.Data,
tc.HoraInicial,
tc.HoraFinal,
tc.CodigoInstrutor,
tt.IDTreinando
FROM ${db}TurmasCalendario tc
inner join ${db}TreinandosTurmas tt on tt.IDCurso = tc.CodigoCurso and tc.IdTurma = tt.CodigoTurma
WHERE tc.IdTurma = ${Alunos[Index]['CodigoTurma']} AND CodigoCurso = ${Alunos[Index]['IDCurso']} AND tc.Ministrado = 0
ORDER BY tc.Data ASC;`;
sqlServerConnection.request().query(sqlGetTurmasCalendario, function (error0, results0, fields0) {
if (error0 || !results0.recordset || results0.recordset.length == 0) {
console.log("Erro GetTurmasCalendario: " + error0);
Index++;
RealizaChamada(Index, db, Alunos, callback);
return;
}
const TurmasCalendario = results0.recordset;
Alunos[Index]['IDTreinando'] = TurmasCalendario[0]['IDTreinando'];
const sqlGetChamada = `select coalesce((SELECT TOP(1) IDChamadas FROM ${db}Chamadas ORDER BY IDChamadas DESC), 1) as 'IDChamadas';`;
sqlServerConnection.request().query(sqlGetChamada, function (error1, results1, fields1) {
const IDChamadas = results1.recordsets[0][0]['IDChamadas'] + 1;
const IDTurma = Alunos[Index]['CodigoTurma'];
const IDCurso = Alunos[Index]['IDCurso'];
const Data = formatDate(TurmasCalendario[0]['Data'], 0);
const Hora = formatDate(TurmasCalendario[0]['HoraInicial'], 1);
const HoraInicial = formatDate(TurmasCalendario[0]['HoraInicial'], 1);
const HoraFinal = formatDate(TurmasCalendario[0]['HoraFinal'], 1);
const CodigoInstrutor = TurmasCalendario[0]['CodigoInstrutor'];
const DataEnvioApp = formatDate(new Date(), 0);
const sqlInsertChamada = `INSERT INTO ${db}Chamadas (IDChamadas, IDTurma, IDCurso, Data, Hora, HoraInicio, HoraTermino, IDInstrutor, Flex, APP, DataEnvioAPP, DataAtualizacaoAPP, IDFuncionarioAPP)
VALUES (${IDChamadas}, ${IDTurma}, ${IDCurso}, '${Data}', '${Hora}', '${HoraInicial}', '${HoraFinal}', ${CodigoInstrutor}, 1, 1, '${DataEnvioApp}', '${DataEnvioApp}', ${CodigoInstrutor});`;
sqlServerConnection.request().query(sqlInsertChamada, function (error2, results2, fields2) {
const sqlInsertChamadaConteudo = `INSERT INTO ${db}ChamadasConteudos (IDChamadas, CodigoConteudo, DescricaoConteudo)
VALUES (${IDChamadas}, 0, 'Aula de robótica');`;
sqlServerConnection.request().query(sqlInsertChamadaConteudo, function (error3, results3, fields3) {
const sqlUpdateTurmasCalendario = `UPDATE ${db}TurmasCalendario SET
Ministrado = 1,
Data = '${Data}'
WHERE IdTurmasCalendario = ${TurmasCalendario[0]['IdTurmasCalendario']};`;
sqlServerConnection.request().query(sqlUpdateTurmasCalendario, function (error4, results4, fields4) {
const sqlInsertChamadasDetalhes = `INSERT INTO ${db}ChamadasDetalhes (IDChamadas, IDTreinando, Presente, Avisada, Justificativa, UltimaCarta)
VALUES (${IDChamadas}, ${Alunos[Index]['IDTreinando']}, 1, 0, null, null);`;
sqlServerConnection.request().query(sqlInsertChamadasDetalhes, function (error5, results5, fields5) {
Index++;
RealizaChamada(Index, db, Alunos, callback);
});
});
});
});
});
});
}
else {
callback(true);
}
}
function formatDate(date, ret) {
var novaData = date.toISOString().replace(/T/, ' ').replace(/\..+/, '').split(" ");
return novaData[ret];
}
module.exports = routes;

View File

@ -0,0 +1,580 @@
require('../connections/mysql-server');
require('../helpers/CheckToken');
const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
const { debug } = require('console');
const apikeyWatson = process.env.IBMTTS_APIKEY;
const apiurlServiceWatson = process.env.IBMTTS_SERVICEURL;
router.use(bodyParser.urlencoded({ extended: true }));
router.use(bodyParser.json());
var routes = function () {
//#region CHARACTERSCONVERSATION
router.get('/getAllCharConv', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
from charactersConversation;`, res, req.originalUrl);
});
router.get('/getCharacterconversation/:idcharactersConversation', verifyJWT, (req, res) => {
const idcharactersConversation = parseInt(req.params.idcharactersConversation);
execSQLQuery(`SELECT
*
from charactersConversation
where idcharactersConversation = ${idcharactersConversation};`, res, req.originalUrl);
});
router.post('/insertCharConv', verifyJWT, (req, res) => {
const idcharactersConversation = parseInt(req.body.idcharactersConversation);
const description = req.body.description;
const idcharacters_1 = parseInt(req.body.idcharacters_1);
const idcharacters_2 = parseInt(req.body.idcharacters_2);
const idcharactersBackground = parseInt(req.body.idcharactersBackground);
const idcharactersFonts = parseInt(req.body.idcharactersFonts);
execSQLQuery(`INSERT INTO charactersConversation (description, idcharacters_1, idcharacters_2, idcharactersBackground, idcharactersFonts)
VALUES (?, ?, ?, ?, ?);`, res, req.originalUrl, [description, idcharacters_1, idcharacters_2, idcharactersBackground, idcharactersFonts]);
});
router.patch('/updateCharConv', verifyJWT, (req, res) => {
const idcharactersConversation = parseInt(req.body.idcharactersConversation);
const description = req.body.description;
const idcharacters_1 = parseInt(req.body.idcharacters_1);
const idcharacters_2 = parseInt(req.body.idcharacters_2);
const idcharactersBackground = parseInt(req.body.idcharactersBackground);
const idcharactersFonts = parseInt(req.body.idcharactersFonts);
execSQLQuery(`UPDATE charactersConversation SET
description = ?,
idcharacters_1 = ?,
idcharacters_2 = ?,
idcharactersBackground = ?,
idcharactersFonts = ?
WHERE idcharactersConversation = ?;`, res, req.originalUrl, [description, idcharacters_1, idcharacters_2, idcharactersBackground, idcharactersFonts, idcharactersConversation]);
});
router.get('/getCharConvDetails/:idcharactersConversation', verifyJWT, (req, res) => {
const idcharactersConversation = parseInt(req.params.idcharactersConversation);
execSQLQuery(`select
cc.idcharactersConversation,
cc.description,
cp.seconds,
cp.speed,
cc.idcharacters_1,
(select ch1.description from characters ch1 where ch1.idcharacters = cc.idcharacters_1) as 'character_1',
cc.idcharacters_2,
(select ch2.description from characters ch2 where ch2.idcharacters = cc.idcharacters_2) as 'character_2',
cc.idcharactersBackground,
cb.description as 'background',
cb.ext as 'backgroundExt',
cc.idcharactersFonts,
cf.description as 'font',
cp.fontSize,
cp.fontColor,
cp.idcharactersPhrases,
cp.charactertalking,
cp.idcharactersBaloons,
ba.description as 'baloon',
ba.ext as 'baloonExt',
cp.baloonColor,
cp.phrase,
cp.idcharactersFeelings_1,
(select cf1.description from charactersFeelings cf1 where cf1.idcharactersFeelings = cp.idcharactersFeelings_1) as 'characterFeeling_1',
cp.idcharactersFeelings_2,
(select cf2.description from charactersFeelings cf2 where cf2.idcharactersFeelings = cp.idcharactersFeelings_2) as 'characterFeeling_2',
cp.sintetizevoice,
cp.idcharactersVoices,
(select cv.description from charactersVoices cv where cv.idcharactersVoices = cp.idcharactersVoices) as 'voicename',
(select cv.voice from charactersVoices cv where cv.idcharactersVoices = cp.idcharactersVoices) as 'voice',
cp.idcharactersTransitions,
ct.description as 'transition',
ct.ext as 'transitionExt',
cp.ordem
from charactersConversation cc
left join charactersBackground cb on cb.idcharactersBackground = cc.idcharactersBackground
left join charactersFonts cf on cf.idcharactersFonts = cc.idcharactersFonts
left join charactersPhrases cp on cp.idcharactersConversation = cc.idcharactersConversation
left join charactersBaloons ba on ba.idcharactersBaloons = cp.idcharactersBaloons
left join charactersTransitions ct on ct.idcharactersTransitions = cp.idcharactersTransitions
where cc.idcharactersConversation = ${idcharactersConversation}
order by cp.ordem asc;`, res, req.originalUrl);
});
router.delete('/deleteCharacterconversation/:idcharactersConversation', verifyJWT, (req, res) => {
const idcharactersConversation = parseInt(req.params.idcharactersConversation);
execSQLQuery(`delete from charactersConversation
where idcharactersConversation = ${idcharactersConversation};`, res, req.originalUrl);
});
//#endregion
//#region CHARACTERS
router.get('/getAllCharacters', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
from characters;`, res, req.originalUrl);
});
router.get('/getCharacter/:idcharacters', verifyJWT, (req, res) => {
const idcharacters = parseInt(req.params.idcharacters);
execSQLQuery(`SELECT
*
from characters
where idcharacters = ${idcharacters};`, res, req.originalUrl);
});
router.post('/insertCharacter', verifyJWT, (req, res) => {
const idcharacters = parseInt(req.body.idcharacters);
const description = req.body.description;
execSQLQuery(`INSERT INTO characters (description)
VALUES (?);`, res, req.originalUrl, [description]);
});
router.patch('/updateCharacter', verifyJWT, (req, res) => {
const idcharacters = parseInt(req.body.idcharacters);
const description = req.body.description;
execSQLQuery(`UPDATE characters SET
description = ?
WHERE idcharacters = ?;`, res, req.originalUrl, [description, idcharacters]);
});
router.delete('/deleteCharacter/:idcharacters', verifyJWT, (req, res) => {
const idcharacters = parseInt(req.params.idcharacters);
execSQLQuery(`delete from characters
where idcharacters = ${idcharacters};`, res, req.originalUrl);
});
//#endregion
//#region BACKGROUNDS
router.get('/getAllBackgrounds', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
from charactersBackground;`, res, req.originalUrl);
});
router.get('/getBackground/:idcharactersBackground', verifyJWT, (req, res) => {
const idcharactersBackground = parseInt(req.params.idcharactersBackground);
execSQLQuery(`SELECT
*
from charactersBackground
where idcharactersBackground = ${idcharactersBackground};`, res, req.originalUrl);
});
router.post('/insertBackground', verifyJWT, (req, res) => {
const idcharactersBackground = parseInt(req.body.idcharactersBackground);
const description = req.body.description;
const ext = req.body.ext;
execSQLQuery(`INSERT INTO charactersBackground (description, ext)
VALUES (?, ?);`, res, req.originalUrl, [description, ext]);
});
router.patch('/updateBackground', verifyJWT, (req, res) => {
const idcharactersBackground = parseInt(req.body.idcharactersBackground);
const description = req.body.description;
const ext = req.body.ext;
execSQLQuery(`UPDATE charactersBackground SET
description = ?,
ext = ?
WHERE idcharactersBackground = ?;`, res, req.originalUrl, [description, ext, idcharactersBackground]);
});
router.delete('/deleteBackground/:idcharactersBackground', verifyJWT, (req, res) => {
const idcharactersBackground = parseInt(req.params.idcharactersBackground);
execSQLQuery(`delete from charactersBackground
where idcharactersBackground = ${idcharactersBackground};`, res, req.originalUrl);
});
//#endregion
//#region FEELINGS
router.get('/getAllFeelings', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
from charactersFeelings;`, res, req.originalUrl);
});
router.get('/getFeeling/:idcharactersFeelings', verifyJWT, (req, res) => {
const idcharactersFeelings = parseInt(req.params.idcharactersFeelings);
execSQLQuery(`SELECT
*
from charactersFeelings
where idcharactersFeelings = ${idcharactersFeelings};`, res, req.originalUrl);
});
router.post('/insertFeeling', verifyJWT, (req, res) => {
const idcharactersFeelings = parseInt(req.body.idcharactersFeelings);
const description = req.body.description;
execSQLQuery(`INSERT INTO charactersFeelings (description)
VALUES (?);`, res, req.originalUrl, [description]);
});
router.patch('/updateFeeling', verifyJWT, (req, res) => {
const idcharactersFeelings = parseInt(req.body.idcharactersFeelings);
const description = req.body.description;
execSQLQuery(`UPDATE charactersFeelings SET
description = ?
WHERE idcharactersFeelings = ?;`, res, req.originalUrl, [description, idcharactersFeelings]);
});
router.delete('/deleteFeeling/:idcharactersFeelings', verifyJWT, (req, res) => {
const idcharactersFeelings = parseInt(req.params.idcharactersFeelings);
execSQLQuery(`delete from charactersFeelings
where idcharactersFeelings = ${idcharactersFeelings};`, res, req.originalUrl);
});
//#endregion
//#region FONTS
router.get('/getAllFonts', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
from charactersFonts;`, res, req.originalUrl);
});
router.get('/getFont/:idcharactersFonts', verifyJWT, (req, res) => {
const idcharactersFonts = parseInt(req.params.idcharactersFonts);
execSQLQuery(`SELECT
*
from charactersFonts
where idcharactersFonts = ${idcharactersFonts};`, res, req.originalUrl);
});
router.post('/insertFont', verifyJWT, (req, res) => {
const idcharactersFonts = parseInt(req.body.idcharactersFonts);
const description = req.body.description;
execSQLQuery(`INSERT INTO charactersFonts (description)
VALUES (?);`, res, req.originalUrl, [description]);
});
router.patch('/updateFont', verifyJWT, (req, res) => {
const idcharactersFonts = parseInt(req.body.idcharactersFonts);
const description = req.body.description;
execSQLQuery(`UPDATE charactersFonts SET
description = ?
WHERE idcharactersFonts = ?;`, res, req.originalUrl, [description, idcharactersFonts]);
});
router.delete('/deleteFont/:idcharactersFonts', verifyJWT, (req, res) => {
const idcharactersFonts = parseInt(req.params.idcharactersFonts);
execSQLQuery(`delete from charactersFonts
where idcharactersFonts = ${idcharactersFonts};`, res, req.originalUrl);
});
//#endregion
//#region VOICES
router.get('/getAllVoices', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
from charactersVoices;`, res, req.originalUrl);
});
router.get('/getVoice/:idcharactersVoices', verifyJWT, (req, res) => {
const idcharactersVoices = parseInt(req.params.idcharactersVoices);
execSQLQuery(`SELECT
*
from charactersVoices
where idcharactersVoices = ${idcharactersVoices};`, res, req.originalUrl);
});
router.post('/insertVoice', verifyJWT, (req, res) => {
const idcharactersVoices = parseInt(req.body.idcharactersVoices);
const description = req.body.description;
execSQLQuery(`INSERT INTO charactersVoices (description)
VALUES (?);`, res, req.originalUrl, [description]);
});
router.patch('/updateVoice', verifyJWT, (req, res) => {
const idcharactersVoices = parseInt(req.body.idcharactersVoices);
const description = req.body.description;
execSQLQuery(`UPDATE charactersVoices SET
description = ?
WHERE idcharactersVoices = ?;`, res, req.originalUrl, [description, idcharactersVoices]);
});
router.delete('/deleteVoice/:idcharactersVoices', verifyJWT, (req, res) => {
const idcharactersVoices = parseInt(req.params.idcharactersVoices);
execSQLQuery(`delete from charactersVoices
where idcharactersVoices = ${idcharactersVoices};`, res, req.originalUrl);
});
//#endregion
//#region BALOONS
router.get('/getAllBaloons', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
from charactersBaloons;`, res, req.originalUrl);
});
router.get('/getBaloon/:idcharactersBaloons', verifyJWT, (req, res) => {
const idcharactersBaloons = parseInt(req.params.idcharactersBaloons);
execSQLQuery(`SELECT
*
from charactersBaloons
where idcharactersBaloons = ${idcharactersBaloons};`, res, req.originalUrl);
});
router.post('/insertBaloon', verifyJWT, (req, res) => {
const idcharactersBaloons = parseInt(req.body.idcharactersBaloons);
const description = req.body.description;
const ext = req.body.ext;
execSQLQuery(`INSERT INTO charactersBaloons (description, ext)
VALUES (?, ?);`, res, req.originalUrl, [description, ext]);
});
router.patch('/updateBaloon', verifyJWT, (req, res) => {
const idcharactersBaloons = parseInt(req.body.idcharactersBaloons);
const description = req.body.description;
const ext = req.body.ext;
execSQLQuery(`UPDATE charactersBaloons SET
description = ?,
ext = ?
WHERE idcharactersBaloons = ?;`, res, req.originalUrl, [description, ext, idcharactersBaloons]);
});
router.delete('/deleteBaloon/:idcharactersBaloons', verifyJWT, (req, res) => {
const idcharactersBaloons = parseInt(req.params.idcharactersBaloons);
execSQLQuery(`delete from charactersBaloons
where idcharactersBaloons = ${idcharactersBaloons};`, res, req.originalUrl);
});
//#endregion
//#region PHRASES
router.get('/getAllPhrases', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
from charactersPhrases;`, res, req.originalUrl);
});
router.get('/getPhrase/:idcharactersPhrases', verifyJWT, (req, res) => {
const idcharactersPhrases = parseInt(req.params.idcharactersPhrases);
execSQLQuery(`SELECT
*
from charactersPhrases
where idcharactersPhrases = ${idcharactersPhrases};`, res, req.originalUrl);
});
router.get('/getPhrasesInConversation/:idcharactersConversation', verifyJWT, (req, res) => {
const idcharactersConversation = parseInt(req.params.idcharactersConversation);
execSQLQuery(`SELECT
*
from charactersPhrases
where idcharactersConversation = ${idcharactersConversation}
order by ordem asc;`, res, req.originalUrl);
});
router.post('/insertPhrase', verifyJWT, (req, res) => {
const idcharactersPhrases = parseInt(req.body.idcharactersPhrases);
const idcharactersConversation = parseInt(req.body.idcharactersConversation);
const seconds = parseFloat(req.body.seconds);
const speed = req.body.speed;
const charactertalking = req.body.charactertalking;
const idcharactersBaloons = req.body.idcharactersBaloons;
const baloonColor = req.body.baloonColor;
const phrase = req.body.phrase;
const fontSize = req.body.fontSize;
const fontColor = req.body.fontColor;
const idcharactersFeelings_1 = req.body.idcharactersFeelings_1;
const idcharactersFeelings_2 = req.body.idcharactersFeelings_2;
const sintetizevoice = req.body.sintetizevoice ? 1 : 0;
const idcharactersVoices = req.body.idcharactersVoices;
const idcharactersTransitions = req.body.idcharactersTransitions;
const ordem = parseInt(req.body.ordem);
execSQLQuery(`INSERT INTO charactersPhrases (idcharactersConversation, seconds, speed, charactertalking, idcharactersBaloons, baloonColor, fontSize, fontColor, phrase, idcharactersFeelings_1, idcharactersFeelings_2, sintetizevoice, idcharactersVoices, idcharactersTransitions, ordem)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);`, res, req.originalUrl, [idcharactersConversation, seconds, speed, charactertalking, idcharactersBaloons, baloonColor, fontSize, fontColor, phrase, idcharactersFeelings_1, idcharactersFeelings_2, sintetizevoice, idcharactersVoices, idcharactersTransitions, ordem]);
});
router.patch('/updatePhrase', verifyJWT, (req, res) => {
const idcharactersPhrases = parseInt(req.body.idcharactersPhrases);
const idcharactersConversation = parseInt(req.body.idcharactersConversation);
const seconds = parseFloat(req.body.seconds);
const speed = parseFloat(req.body.speed);
const charactertalking = parseInt(req.body.charactertalking);
const idcharactersBaloons = parseInt(req.body.idcharactersBaloons);
const baloonColor = req.body.baloonColor;
const phrase = req.body.phrase;
const idcharactersFeelings_1 = parseInt(req.body.idcharactersFeelings_1);
const idcharactersFeelings_2 = parseInt(req.body.idcharactersFeelings_2);
const sintetizevoice = req.body.sintetizevoice ? 1 : 0;
const idcharactersVoices = parseInt(req.body.idcharactersVoices);
const idcharactersTransitions = parseInt(req.body.idcharactersTransitions);
const ordem = parseInt(req.body.ordem);
execSQLQuery(`UPDATE charactersPhrases SET
idcharactersConversation = ?,
seconds = ?,
speed = ?,
charactertalking = ?,
idcharactersBaloons = ?,
baloonColor = ?,
phrase = ?,
idcharactersFeelings_1 = ?,
idcharactersFeelings_2 = ?,
sintetizevoice = ?,
idcharactersVoices = ?,
idcharactersTransitions = ?,
ordem = ?
WHERE idcharactersPhrases = ?;`, res, req.originalUrl, [idcharactersConversation, seconds, speed, charactertalking, idcharactersBaloons, baloonColor, phrase, idcharactersFeelings_1, idcharactersFeelings_2, sintetizevoice, idcharactersVoices, idcharactersTransitions, ordem, idcharactersPhrases]);
});
router.delete('/deletePhrase/:idcharactersPhrases', verifyJWT, (req, res) => {
const idcharactersPhrases = parseInt(req.params.idcharactersPhrases);
execSQLQuery(`delete from charactersPhrases
where idcharactersPhrases = ${idcharactersPhrases};`, res, req.originalUrl);
});
router.delete('/deletePhrasesInConversation/:idcharactersConversation', verifyJWT, (req, res) => {
const idcharactersConversation = parseInt(req.params.idcharactersConversation);
execSQLQuery(`delete from charactersPhrases
where idcharactersConversation = ${idcharactersConversation};`, res, req.originalUrl);
});
//#endregion
//#region TRANSITIONS
router.get('/getAllTransitions', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
from charactersTransitions;`, res, req.originalUrl);
});
router.get('/getTransition/:idcharactersTransitions', verifyJWT, (req, res) => {
const idcharactersTransitions = parseInt(req.params.idcharactersTransitions);
execSQLQuery(`SELECT
*
from charactersTransitions
where idcharactersTransitions = ${idcharactersTransitions};`, res, req.originalUrl);
});
router.post('/insertTransition', verifyJWT, (req, res) => {
const idcharactersTransitions = parseInt(req.body.idcharactersTransitions);
const description = req.body.description;
const ext = req.body.ext;
execSQLQuery(`INSERT INTO charactersTransitions (description, ext)
VALUES (?, ?);`, res, req.originalUrl, [description, ext]);
});
router.patch('/updateTransition', verifyJWT, (req, res) => {
const idcharactersTransitions = parseInt(req.body.idcharactersTransitions);
const description = req.body.description;
const ext = req.body.ext;
execSQLQuery(`UPDATE charactersTransitions SET
description = ?,
ext = ?
WHERE idcharactersTransitions = ?;`, res, req.originalUrl, [description, ext, idcharactersTransitions]);
});
router.delete('/deleteTransition/:idcharactersTransitions', verifyJWT, (req, res) => {
const idcharactersTransitions = parseInt(req.params.idcharactersTransitions);
execSQLQuery(`delete from charactersTransitions
where idcharactersTransitions = ${idcharactersTransitions};`, res, req.originalUrl);
});
//#endregion
router.post('/tts', verifyJWT, (req, res) => {
const Texto = req.body.texto;
const Velocidade = req.body.speed;
const idzoevoices = req.body.idzoevoices;
const PollyVoice = req.body.PollyVoice;
const NomeArquivo = "sintetize.mp3";
const shell = require('shelljs');
mysqlConnection.query(`SELECT cf.TTSmode, (SELECT voice FROM zoevoices WHERE idzoevoices = 1) as voice FROM config cf;`, function (error, Config, fields) {
const TTSMode = Config[0]['TTSmode'];
let Voz = Config[0]['voice'];
if (PollyVoice != "")
Voz = PollyVoice;
if (TTSMode == 3) { // WIDEO
const request = require('request');
var options = {
uri: 'https://texttospeechapi.wideo.co/api/wideo-text-to-speech',
method: 'POST',
json: { "data":{"text":Texto,"speed":Velocidade,"voice":Voz} }
};
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
shell.exec(`wget "${response['body']['result']['url']}" -O ${Variables("src_media")}/audiosZoe/${NomeArquivo} -q;`, function(Sucesso) {
EnviarAudio(NomeArquivo, true, error, res, req);
});
}
else {
console.log(error);
EnviarAudio(NomeArquivo, false, error, res, req);
}
});
}
else if (TTSMode == 4) { // AMAZON POLLY
shell.exec(`python ${Variables('src_media')}assets/polly_service.py "${Texto}" "${Variables('src_media')}/audiosZoe/${NomeArquivo}" "${Voz}"`, function(Sucesso) {
EnviarAudio(NomeArquivo, true, null, res, req);
});
}
else if (TTSMode == 6) { // WATSON IBM
const fs = require('fs');
const TextToSpeechV1 = require('ibm-watson/text-to-speech/v1');
const { IamAuthenticator } = require('ibm-watson/auth');
const textToSpeech = new TextToSpeechV1({
authenticator: new IamAuthenticator({ apikey: apikeyWatson }),
serviceUrl: apiurlServiceWatson
});
const params = {
text: Texto,
voice: Voz,
accept: 'audio/wav'
};
console.log("A" + " " + NomeArquivo);
textToSpeech.synthesize(params).then(response => {
const audio = response.result;
return textToSpeech.repairWavHeaderStream(audio);
}).then(repairedFile => {
fs.writeFileSync(`${Variables("src_media")}audiosZoe/${NomeArquivo}`, repairedFile);
console.log('audio.wav written with a corrected wav header');
//EnviarAudio(NomeArquivo.replace(".mp3", ".wav"), true, null, res, req);
shell.exec(`ffmpeg -loglevel panic -i ${Variables("src_media")}audiosZoe/${NomeArquivo} ${Variables("src_media")}audiosZoe/${NomeArquivo} -o`, function(Sucesso) {
EnviarAudio(NomeArquivo, true, null, res, req);
});
}).catch(err => {
console.log(err);
});
}
});
});
function EnviarAudio(NomeArquivo, Sucesso, error, res, req) {
if (Sucesso) {
console.log(new Date().toUTCString() + " - " + req.originalUrl + " success 200");
res.send(JSON.stringify({
"status": 200,
"error": error,
"url_audio": "audiosZoe/" + NomeArquivo,
}));
}
else {
console.log(new Date().toUTCString() + " - " + req.originalUrl + " error 500");
res.send(JSON.stringify({
"status": 500,
"error": error,
"url_audio": null,
}));
}
}
router.get('/SalvarAudioSintetizado/:nome', verifyJWT, (req, res) => {
const NomeArquivo = req.params.nome;
const shell = require('shelljs');
shell.exec(`cp ${Variables("src_media")}/audiosZoe/sintetize.mp3 ${Variables("src_media")}/zoeGamesResources/audios/${NomeArquivo}.mp3`, function(Sucesso) {
res.send(true);
});
});
return router;
};
module.exports = routes;

View File

@ -0,0 +1,250 @@
require('../connections/mysql-server');
require('../helpers/CheckToken');
require('../helpers/config');
const mysql = require('mysql');
const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
router.use(bodyParser.urlencoded({
limit: '10mb',
extended: true
}));
router.use(bodyParser.json({
limit: '10mb',
extended: true
}));
var MySQLConfig = {
connectionLimit: 10,
host: Variables('ip_mysql'),
user: Variables('user_mysql'),
database: Variables('database_mysql'),
password: Variables('password_mysql'),
charset: "utf8mb4"
}
const connection = mysql.createPool(MySQLConfig);
var routes = function () {
router.get('/getChat/:idusers_from/:idusers_to/:db', verifyJWT, (req, res) => {
let idusers_from = req.params.idusers_from;
let idusers_to = req.params.idusers_to;
let banco = req.params.db;
ExecutarQuery(`SELECT idchat, idusers_from, idusers_to, visible,
DATE_FORMAT(time_sent, '%d/%m/%Y %h:%i') AS 'time_sent',
DATE_FORMAT(time_read, '%d/%m/%Y %h:%i') AS 'time_read',
message, quotation FROM chat WHERE
(((idusers_from = ${idusers_from} AND idusers_to = ${idusers_to}) OR
(idusers_to = ${idusers_from} AND idusers_from = ${idusers_to})) AND banco = '${banco}');`, res, req.originalUrl);
});
router.post('/sendMessage', verifyJWT, (req, res) => {
const idusers_from = req.body.idusers_from;
const idusers_to = req.body.idusers_to;
const message = req.body.message;
const banco = req.body.banco;
const quotation = req.body.quotation;
ExecutarQuery(`INSERT INTO chat(idusers_from, idusers_to, message, banco, quotation)
VALUES (?, ?, ?, ?, ?);`, res, req.originalUrl, [idusers_from, idusers_to, message, banco, quotation]);
});
router.get('/setReaded/:idchat', verifyJWT, (req, res) => {
let idchat = req.params.idchat;
ExecutarQuery(`UPDATE chat SET
time_read = now()
WHERE idchat = ${idchat};`, res, req.originalUrl);
});
router.get('/removeMessage/:idchat', verifyJWT, (req, res) => {
let idchat = req.params.idchat;
ExecutarQuery(`UPDATE chat SET
visible = 0
WHERE idchat = ${idchat};`, res, req.originalUrl);
});
router.get('/getAllchats/:tipo/:idusers/:db', verifyJWT, (req, res) => {
let tipo = req.params.tipo;
let idusers = req.params.idusers;
let db = req.params.db;
let sqlQuery = ``;
if (tipo == 1) { // PROFESSOR
sqlQuery = `select *,
(
select C.NomeVersao
from ${db}Cursos C
where C.Codigo = (
select top(1) TT.IDCurso
from ${db}TreinandosTurmas TT
where TT.IDMatricula = R.idusers_para
)
) AS 'nomeCurso'
from (
SELECT DISTINCT TT.IDMatricula AS 'idusers_para',
CLI.Nome AS 'nomePara',
F.IDFuncionario AS 'idusers_de',
F.Nome AS 'nomeDe'
from ${db}TreinandosTurmas TT
inner join ${db}TurmasAgendaCalendario TAC
on TAC.IdTurma = TT.CodigoTurma
inner join ${db}Funcionarios F
on F.IDFuncionario = TAC.IdInstrutor
inner join ${db}Clientes CLI
on CLI.IDCliente = TT.IDTreinando
/*WHERE TAC.IdInstrutor = ${idusers}*/
) R`;
}
else if (tipo == 2) { // TODOS OS USUARIOS
sqlQuery = `select F.IDFuncionario AS 'idusers_para', F.Nome AS 'nomePara', 0 as Tipo
from ${db}Funcionarios F
where F.Desativado = 0
union all
select distinct M.IDMatricula AS 'idusers_para', C.Nome AS 'nomePara', 1 as Tipo
from ${db}Matriculas M
inner join ${db}TreinandosTurmas TT
on TT.IDMatricula = M.IDMatricula
inner join ${db}Clientes C
on C.IDCliente = TT.IDTreinando;`;
}
else if (tipo == 4) { // ALUNO
sqlQuery = `/*SELECT TOP 1 TT.IDMatricula AS 'idusers_de',
CLI.Nome AS 'nomeDe',
F.IDFuncionario AS 'idusers_para',
F.Nome AS 'nomePara',
TT.IDCurso AS 'idcourses',
C.NomeVersao AS 'nomeCurso'
from ${db}TreinandosTurmas TT
inner join ${db}Cursos C
on C.Codigo = TT.IDCurso
inner join ${db}TurmasAgendaCalendario TAC
on TAC.IdTurma = TT.CodigoTurma
inner join ${db}Funcionarios F
on F.IDFuncionario = TAC.IdInstrutor
inner join ${db}Clientes CLI
on CLI.IDCliente = TT.IDTreinando
WHERE TT.IDMatricula = ${idusers} ORDER BY TT.IDCurso DESC;*/
select F.IDFuncionario AS 'idusers_para', F.Nome AS 'nomePara', 0 as Tipo
from ${db}Funcionarios F
where F.Desativado = 0;`;
}
execSQLQuery2(sqlQuery, res, req.originalUrl);
})
router.post('/createGroup', verifyJWT, (req, res) => {
const name = req.body.name;
const created_by = req.body.created_by;
const banco = req.body.banco;
ExecutarQuery(`INSERT INTO chatgroups(name, created_by, banco)
VALUES (?, ?, ?);`, res, req.originalUrl, [name, created_by, banco]);
});
router.post('/insertMember', verifyJWT, (req, res) => {
const idchatgroups = parseInt(req.body.idchatgroups);
const idusers = parseInt(req.body.idusers);
const enabled = req.body.enabled ? 1 : 0;
const isadm = req.body.isadm ? 1 : 0;
const inserted_by = parseInt(req.body.inserted_by);
ExecutarQuery(`INSERT INTO chatusergroups(idchatgroups, idusers, enabled, isadm, inserted_by)
VALUES (${idchatgroups}, ${idusers}, ${enabled}, ${isadm}, ${inserted_by});`, res, req.originalUrl);
});
router.get('/getAllGroups/:idusers/:db', verifyJWT, (req, res) => {
let idusers = req.params.idusers;
let banco = req.params.db;
let sqlQuery = `SELECT ${idusers} AS idusers_de, '' AS nomeDe, cu.idchatgroups AS idusers_para,
cg.name AS nomePara, 'Grupo' AS nomeCurso, 0 AS idcourses, cu.isadm
FROM chatusergroups cu
INNER JOIN chatgroups cg
ON cg.idchatgroups = cu.idchatgroups
WHERE cu.idusers = ${idusers} AND cg.banco = "${banco}";`;
ExecutarQuery(sqlQuery, res, req.originalUrl);
});
router.get('/getChatGroup/:idchatgroups/:db', verifyJWT, (req, res) => {
let idchatgroups = req.params.idchatgroups;
let banco = req.params.db;
ExecutarQuery(`SELECT idchat, idusers_from, idusers_to, visible,
DATE_FORMAT(time_sent, '%d/%m/%Y %h:%i') AS 'time_sent',
DATE_FORMAT(time_read, '%d/%m/%Y %h:%i') AS 'time_read',
message, quotation FROM chat WHERE idusers_to = ${idchatgroups} AND banco = "${banco}";`, res, req.originalUrl);
});
router.get('/getGroupMembers/:idchatgroups', verifyJWT, (req, res) => {
const idchatgroups = parseInt(req.params.idchatgroups);
ExecutarQuery(`SELECT
*
FROM chatusergroups
WHERE idchatgroups = ${idchatgroups};`, res, req.originalUrl);
});
router.get('/removeMember/:idchatusergroups', verifyJWT, (req, res) => {
const idchatusergroups = parseInt(req.params.idchatusergroups);
ExecutarQuery(`DELETE FROM chatusergroups
WHERE idchatusergroups = ${idchatusergroups};`, res, req.originalUrl);
});
router.get('/updateGroupname/:idchatgroups/:name', verifyJWT, (req, res) => {
const idchatgroups = parseInt(req.params.idchatgroups);
const name = req.params.name;
ExecutarQuery(`UPDATE chatgroups SET
name = ?
WHERE idchatgroups = ?;`, res, req.originalUrl, [name, idchatgroups]);
});
router.get('/deleteGroup/:idchatgroups', verifyJWT, (req, res) => {
let idchatgroups = req.params.idchatgroups;
mysqlConnection.query(`DELETE FROM chatusergroups WHERE idchatgroups = ${idchatgroups};`, function (error, results, fields) {
console.log(error);
console.log(results);
ExecutarQuery(`DELETE FROM chatgroups WHERE idchatgroups = ${idchatgroups};`, res, req.originalUrl);
});
});
router.get('/getAllchatsViewer/:db', verifyJWT, (req, res) => {
let db = req.params.db;
let sqlQuery = `SELECT DISTINCT
R.idusers_from, R.idusers_to, R.banco,
(SELECT c1.message FROM chat c1 WHERE c1.idusers_from = R.idusers_from AND c1.idusers_to = R.idusers_to ORDER BY c1.time_sent DESC LIMIT 1) AS 'message',
(SELECT date_format(c1.time_sent, '%d/%m/%Y %h:%i') FROM chat c1 WHERE c1.idusers_from = R.idusers_from AND c1.idusers_to = R.idusers_to ORDER BY c1.time_sent ASC LIMIT 1) AS 'time_begin',
(SELECT date_format(c1.time_sent, '%d/%m/%Y %h:%i') FROM chat c1 WHERE c1.idusers_from = R.idusers_from AND c1.idusers_to = R.idusers_to ORDER BY c1.time_sent DESC LIMIT 1) AS 'time_last',
(SELECT COUNT(*) FROM chat c1 WHERE c1.idusers_from = R.idusers_from AND c1.idusers_to = R.idusers_to ORDER BY c1.time_sent DESC LIMIT 1) AS 'amout',
case when R.idusers_to < 1250 then (select cg.name from chatgroups cg where cg.idchatgroups = R.idusers_to) else null end as 'group'
FROM
(select distinct * from (
select c1.idusers_from, c1.idusers_to, c1.banco from chat c1
union all
select c1.idusers_from as 'idusers_to', c1.idusers_to as 'idusers_from', c1.banco from chat c1) R
WHERE R.idusers_from >= 1250 and R.idusers_from < 190000 and R.banco = '${db}'
order by R.idusers_to, R.idusers_from ASC) R
ORDER BY time_last DESC;`;
ExecutarQuery(sqlQuery, res, req.originalUrl);
})
return router;
};
module.exports = routes;
function ExecutarQuery(sqlQuery, res, url, Parametros = null) {
connection.query(sqlQuery, Parametros, (error, results) => {
if (!error) {
res.send(JSON.stringify({
"status": 200,
"error": error,
"response": results
}));
console.log(url + " success 200");
}
else {
res.send(JSON.stringify({
"status": 500,
"error": error,
"response": results
}));
console.log(url + " error 500");
}
})
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,955 @@
require("../connections/mysql-server");
require("../connections/sql-server");
require("../helpers/CheckToken");
require("../helpers/config");
const express = require("express");
const router = express.Router();
const bodyParser = require("body-parser");
const formidable = require("formidable");
router.use(
bodyParser.urlencoded({
limit: "10mb",
extended: true,
})
);
router.use(
bodyParser.json({
limit: "10mb",
extended: true,
})
);
var routes = function () {
router.get("/getQtdeChamadas/:idusers/:idcourses/:db", verifyJWT,(req, res) => {
const idusers = parseInt(req.params.idusers);
const idcourses = req.params.idcourses;
const db = req.params.db;
let sqlQuery = `
SELECT
co.idcourses AS IDCurso,
CASE WHEN (SELECT COUNT(1) FROM zoeusers zu INNER JOIN zoeunits zun ON zun.id = zu.idunits WHERE CONCAT(zun.id, '.dbo.') = '${db}' AND zu.user = ${idusers} AND zu.idzoeusertype = 1) > 0 THEN 100 ELSE COUNT(cl.idclasses) END AS qtde_presencas
FROM courses co
LEFT JOIN classes cl ON cl.idcourses = co.idcourses AND cl.disabled = 0
WHERE co.idcourses IN ${idcourses}
GROUP BY co.idcourses
ORDER BY co.idcourses ASC;`;
//console.log(sqlQuery);
execSQLQuery(sqlQuery, res, req.originalUrl);
});
router.get("/getQtdeChamadasOld/:idusers/:idcourses/:db", verifyJWT,(req, res) => {
const idusers = parseInt(req.params.idusers);
const idcourses = req.params.idcourses;
const db = req.params.db;
let sqlQuery = `
SELECT
c.IDCurso,
COUNT(*) AS qtde_presencas
FROM ${db}Chamadas c
INNER JOIN ${db}TreinandosTurmas tt ON tt.CodigoTurma = c.IDTurma AND tt.IDCurso = c.IDCurso
INNER JOIN ${db}ChamadasDetalhes cd ON cd.IDChamadas = c.IDChamadas
INNER JOIN ${db}Cursos cu ON cu.Codigo = c.IDCurso
WHERE c.Flex = 1 AND c.IDCurso IN ${idcourses} AND tt.IDMatricula = ${idusers} AND cd.Presente = 1
GROUP BY c.IDCurso, cu.NomeVersao
ORDER BY cu.NomeVersao ASC;`;
//console.log(sqlQuery);
execSQLQuery2(sqlQuery, res, req.originalUrl);
});
router.get("/getClass/:idclasses", verifyJWT, (req, res) => {
const idclasses = parseInt(req.params.idclasses);
execSQLQuery(
`SELECT
*
FROM classes
WHERE idclasses = ${idclasses};`,
res,
req.originalUrl
);
});
/* router.get('/adjustXp', (req, res) => {
execSQLQuery(`SELECT idusers, completedClass, idunits FROM myrobot.stepclass where completedClass = 1;`, res, req.originalUrl);
}); */
router.get("/getClassByAny/:field/:value", verifyJWT, (req, res) => {
const field = req.params.field;
const value = req.params.value;
execSQLQuery(
`SELECT
*
FROM classes
WHERE ? = ?;`,
res,
req.originalUrl,
[field, value]
);
});
router.get("/getQtdeClass/:idusers/:idcourses/:db", verifyJWT, (req, res) => {
const matricula = parseInt(req.params.idusers);
const idcurso = req.params.idcourses;
const db = req.params.db;
let sqlQuery = `select count(*) as qtde_presencas
from ${db}Chamadas c
inner join ${db}TreinandosTurmas tt
on tt.CodigoTurma = c.IDTurma
and tt.IDCurso = c.IDCurso
inner join ${db}ChamadasDetalhes cd
on cd.IDChamadas = c.IDChamadas
and cd.IDTreinando = tt.IDTreinando
where c.Flex = 1
and c.IDCurso = ${idcurso}
and tt.IDMatricula = ${matricula}
and cd.Presente = 1;`;
execSQLQuery2(sqlQuery, res, req.originalUrl);
});
router.get("/getClassByCourse/:idcourses", verifyJWT, (req, res) => {
const idcourses = parseInt(req.params.idcourses);
execSQLQuery(
`SELECT
*
FROM classes
WHERE idcourses = ${idcourses} AND disabled = 0 ORDER BY ordem asc;`,
res,
req.originalUrl
);
});
router.get("/getClassbyCourse/count/:idcourses", verifyJWT, (req, res) => {
const idcourses = parseInt(req.params.idcourses);
execSQLQuery(
`SELECT count(*) as numeroDeAulas FROM classes WHERE idcourses = ${idcourses} AND disabled = 0 ORDER BY ordem asc;`,
res,
req.originalUrl
);
});
router.get(
"/getClassEnByCourse/:idcourses/:qtd/:homework",
verifyJWT,
(req, res) => {
const idcourses = parseInt(req.params.idcourses);
const qtd = parseInt(req.params.qtd);
const homework = parseInt(req.params.homework);
execSQLQuery(
`SELECT
idclasses,
idcourses,
name,
case when disabled = 0 and ordem < ${qtd} and (viewed < 2 or ${qtd} != 100) then 0 else 1 end as disabled,
ordem,
description,
viewed,
aval,
download,
demo,
homework,
sprites
FROM classes
WHERE idcourses = ${idcourses} AND disabled = 0 and homework = ${homework}
ORDER BY ordem asc;`,
res,
req.originalUrl
);
}
);
router.get(
"/getClassEnByCourseAll/:idcourses/:qtd/:homework",
verifyJWT,
(req, res) => {
const idcourses = parseInt(req.params.idcourses);
const qtd = parseInt(req.params.qtd);
const homework = parseInt(req.params.homework);
execSQLQuery(
`SELECT
idclasses,
idcourses,
name,
case when (disabled = 0 or disabled = 1) and (viewed < 2 or ${qtd} != 100) then 0 else 1 end as disabled,
ordem,
description,
viewed,
aval,
download,
demo,
homework,
sprites
FROM classes
WHERE idcourses = ${idcourses} AND homework = ${homework}
ORDER BY ordem asc;`,
res,
req.originalUrl
);
}
);
router.post("/insertStepClass", verifyJWT, (req, res) => {
const idusers = parseInt(req.body.idusers);
const idclasses = parseInt(req.body.idclasses);
const idunits = parseInt(req.body.idunits);
mysqlConnection.query(
"select * from stepclass order by idstepclass desc;",
function (error, results, fields) {
let IDStepClass = "";
if (!results || results == "" || results.length == 0) IDStepClass = "1";
else IDStepClass = parseInt(results[0]["idstepclass"]) + 1;
let SQLInsert = `INSERT INTO stepclass(idstepclass, idusers, idclasses, actualClass, actualExercise, actualAnswer, actualItem, answersdb, continueClass, completedClass, idunits) VALUES
(?, ?, ?, 0, 0, 0, 0, '', 0, 0, ?);`;
execSQLQuery(
SQLInsert,
res,
req.originalUrl,
[IDStepClass, idusers, idclasses, idunits],
function (Retorno) {
if (Retorno.status == 500) {
console.log(Retorno.error);
}
}
);
}
);
});
router.get(
"/lockClass/:idusers/:idunits/:idclasses",
verifyJWT,
(req, res) => {
const idusers = parseInt(req.params.idusers);
const idclasses = parseInt(req.params.idclasses);
const idunits = parseInt(req.params.idunits);
let sqlQuery = `UPDATE stepclass SET
lockedClass = 1
WHERE idunits = ${idunits} and idclasses = ${idclasses} and idusers = ${idusers};`;
execSQLQuery(sqlQuery, res, req.originalUrl);
}
);
router.patch("/updateStepClass", verifyJWT, (req, res) => {
const idusers = parseInt(req.body.idusers);
const idclasses = parseInt(req.body.idclasses);
const idunits = parseInt(req.body.idunits);
const actualClass = parseInt(req.body.actualClass);
const actualExercise = parseInt(req.body.actualExercise);
const actualAnswer = parseInt(req.body.actualAnswer);
const actualItem = parseInt(req.body.actualItem);
const answersdb = req.body.answersdb;
const continueClass = req.body.continueClass;
const completedClass = req.body.completedClass;
const notegame = req.body.notegame;
let sqlQuery = `UPDATE stepclass SET
actualClass = ${actualClass},
actualExercise = ${actualExercise},
actualAnswer = ${actualAnswer},
actualItem = ${actualItem},
answersdb = '${answersdb}',
continueClass = ${continueClass},
completedClass = ${completedClass},
notegame = ${notegame}
WHERE idunits = ${idunits} and idclasses = ${idclasses} and idusers = ${idusers};`;
execSQLQuery(sqlQuery, res, req.originalUrl);
});
router.patch("/addNote/:idunits", verifyJWT, (req, res) => {
const idusers = parseInt(req.body.idusers);
const idclasses = parseInt(req.body.idclasses);
const note = req.body.note;
const idunits = parseInt(req.params.idunits);
execSQLQuery(
`UPDATE stepclass SET
note = ${note},
notification = 1
WHERE idusers = ${idusers} AND idclasses = ${idclasses} AND idunits = ${idunits};`,
res,
req.originalUrl
);
});
router.patch("/setFinalDate", verifyJWT, (req, res) => {
const datefinal = req.body.datefinal;
const idusers = req.body.idusers;
const idclasses = req.body.idclasses;
const idunits = req.body.idunits;
execSQLQuery(
`UPDATE stepclass SET
datefinal = (select date_format(date_add(now(), interval 6 day), '%d/%m/%Y'))
WHERE idusers = ${idusers} AND idclasses = ${idclasses} AND idunits = ${idunits};`,
res,
req.originalUrl
);
});
router.get("/PlusView/:idclasses", verifyJWT, (req, res) => {
const idclasses = req.params.idclasses;
execSQLQuery(
`UPDATE classes SET
viewed = viewed + 1
WHERE idclasses = ${idclasses};`,
res,
req.originalUrl
);
});
router.post("/addCourseNote", verifyJWT, (req, res) => {
const idusers = parseInt(req.body.idusers);
const idcourses = parseInt(req.body.idcourses);
const note = req.body.note;
const idunits = parseInt(req.body.idunits);
execSQLQuery(
`INSERT INTO coursenotes (idusers, idcourses, note, idunits)
VALUES (${idusers}, ${idcourses}, ${note}, ${idunits});`,
res,
req.originalUrl
);
});
router.get("/getActualConcept/:idclasses", verifyJWT, (req, res) => {
const idclasses = parseInt(req.params.idclasses);
execSQLQuery(
`SELECT
(ordem + 1) as concept
FROM classes
WHERE idclasses = ${idclasses};`,
res,
req.originalUrl
);
});
router.patch("/removeNotification", verifyJWT, (req, res) => {
const idusers = parseInt(req.body.idusers);
const idunits = parseInt(req.body.idunits);
execSQLQuery(
`UPDATE stepclass SET
notification = 0
WHERE idusers = ${idusers} AND idunits = ${idunits}`,
res,
req.originalUrl
);
});
router.get(
"/getTreinandosTurmas/:matricula/:idcurso/:db",
verifyJWT,
(req, res) => {
const matricula = parseInt(req.params.matricula);
const idcurso = parseInt(req.params.idcurso);
const db = req.params.db;
execSQLQuery2(
`SELECT
*
FROM ${db}TreinandosTurmas
WHERE IDMatricula = ${matricula} AND IDCurso = ${idcurso};`,
res,
req.originalUrl
);
}
);
router.post("/insertNotasDetalhes/:banco", verifyJWT, (req, res) => {
const db = req.params.banco;
const IDTurma = parseInt(req.body.IDTurma);
const IDCurso = parseInt(req.body.IDCurso);
const IDMatricula = parseInt(req.body.IDMatricula);
const IDTreinando = parseInt(req.body.IDTreinando);
const IDConceito = parseInt(req.body.IDConceito);
const NumeroProva = parseInt(req.body.NumeroProva);
const Nota = req.body.Nota;
execSQLQuery2(
`INSERT INTO ${db}NotasDetalhes (IDTurma, IDCurso, IDMatricula, IDTreinando, IDConceito, Nota)
VALUES (${IDTurma}, ${IDCurso}, ${IDMatricula}, ${IDTreinando}, ${IDConceito}, ${Nota});
INSERT INTO ${db}NotasDetalhesSequencial (IDTurma, IDCurso, IDMatricula, IDTreinando, IDConceito)
VALUES (${IDTurma}, ${IDCurso}, ${IDMatricula}, ${IDTreinando}, ${IDConceito});`,
res,
req.originalUrl
);
});
router.get("/getAllStepClass/:englishbot", verifyJWT, (req, res) => {
const englishbot = parseInt(req.params.englishbot);
execSQLQuery(
`select
sc.*,
sc.idusers as 'Matricula',
un.unityname as 'Unidade',
cl.name as 'Aula',
co.name as 'Curso',
sc.completedClass as 'Concluida',
sc.actualExercise as 'Etapa'
from stepclass sc
inner join classes cl on cl.idclasses = sc.idclasses
inner join courses co on co.idcourses = cl.idcourses
inner join units un on un.idunits = sc.idunits
where co.idtypescourse ${englishbot == 1 ? "=" : "!="} 5;`,
res,
req.originalUrl
);
});
router.get(
"/getStepClass/:idusers/:idclasses/:idunits",
(req, res) => {
const idusers = parseInt(req.params.idusers);
const idclasses = parseInt(req.params.idclasses);
const idunits = parseInt(req.params.idunits);
const sql = `SELECT
sc.*,
(SELECT COUNT(*)
FROM (
SELECT
c.idclassescontent,
COALESCE(e.idexercises, m.idmedia, t.idtexts, s.idslides, c.montagem) AS content_id,
COALESCE(e.description, m.description, t.description, s.title, 'Hora da montagem') AS description,
COALESCE(e.enabled, 1, t.enabled, 1, 1) AS enabled,
CASE
WHEN e.idexercises IS NOT NULL THEN 'Exercício'
WHEN m.idmedia IS NOT NULL THEN 'Mídia'
WHEN t.idtexts IS NOT NULL THEN CASE WHEN t.game = 0 THEN 'Texto' ELSE 'Jogo' END
WHEN s.idslides IS NOT NULL THEN 'Slide'
WHEN c.montagem = 1 THEN 'Montagem'
END AS type,
CASE
WHEN e.idexercises IS NOT NULL THEN 'Editar'
WHEN m.idmedia IS NOT NULL THEN 'Prever'
WHEN t.idtexts IS NOT NULL THEN 'Editar'
WHEN s.idslides IS NOT NULL THEN 'Prever'
WHEN c.montagem = 1 THEN '⠀⠀⠀⠀⠀'
END AS acao
FROM classescontent c
LEFT JOIN exercises e ON c.idexercises = e.idexercises
LEFT JOIN media m ON c.idmedia = m.idmedia
LEFT JOIN texts t ON c.idtexts = t.idtexts
LEFT JOIN slides s ON c.idslides = s.idslides
WHERE c.idclasses = ${idclasses}
) AS content_table) AS qtdeItens
FROM stepclass sc
WHERE
sc.idusers = ${idusers}
AND sc.idclasses = ${idclasses}
AND sc.idunits = ${idunits};`;
mysqlConnection.query(sql, function (error, results, fields) {
console.log(req.originalUrl + " success 200");
res.send(
JSON.stringify({
response: results,
error: error,
status: results.length > 0 ? 200 : 500,
})
);
});
}
);
router.get("/getStepClassByUser/:idusers/:idunits", verifyJWT, (req, res) => {
const idusers = parseInt(req.params.idusers);
const idunits = parseInt(req.params.idunits);
execSQLQuery(
`SELECT
*
FROM stepclass
WHERE idusers = ${idusers} AND idunits = ${idunits};`,
res,
req.originalUrl
);
});
router.get("/list", verifyJWT, (req, res) => {
execSQLQuery(
`SELECT
classes.idclasses,
classes.name,
classes.disabled,
classes.ordem,
courses.name as coursename,
COUNT(classescontent.idclassescontent) as 'classContent'
FROM classes
JOIN courses ON classes.idcourses = courses.idcourses
LEFT JOIN classescontent ON classes.idclasses = classescontent.idclasses
GROUP BY classes.idclasses;`,
res,
req.originalUrl
);
});
router.get("/listEn", verifyJWT, (req, res) => {
execSQLQuery(
`SELECT
c.idclasses,
c.name,
c.disabled,
c.ordem,
c.download,
co.name AS coursename,
(select count(*) from courses co2 where co2.idcourses = c.idcourses and co2.idtypescourse = 5) as 'cursoingles',
COUNT(cc.idclassescontent) AS 'classContent'
FROM classes c
JOIN courses co ON c.idcourses = co.idcourses
LEFT JOIN classescontent cc ON c.idclasses = cc.idclasses
GROUP BY c.idcourses, c.idclasses
ORDER BY co.idcourses ASC, c.ordem ASC;`,
res,
req.originalUrl
);
});
router.get("/disable/:idclasses", verifyJWT, (req, res) => {
const idclasses = parseInt(req.params.idclasses);
execSQLQuery(
`UPDATE classes SET
disabled = not disabled
WHERE idclasses = ${idclasses};`,
res,
req.originalUrl
);
});
router.post("/insert", verifyJWT, (req, res) => {
const idcourses = parseInt(req.body.idcourses);
const name = req.body.name;
const disabled = req.body.disabled ? 1 : 0;
const description = req.body.description;
const aval = req.body.aval ? 1 : 0;
const download = req.body.download ? 1 : 0;
const demo = req.body.demo ? 1 : 0;
const homework = req.body.homework ? 1 : 0;
const sprites = parseInt(req.body.sprites);
execSQLQuery(
`INSERT INTO classes(idcourses, name, disabled, ordem, description, aval, download, viewed, demo, homework, sprites) SELECT
?, ?, ?, (select coalesce((select (ordem + 1) as ordem from classes where idcourses = ${idcourses} order by ordem desc limit 1), 0)), ?, ?, ?, 0, ?, ?, ?;`,
res,
req.originalUrl,
[
idcourses,
name,
disabled,
description,
aval,
download,
demo,
homework,
sprites,
]
);
});
router.patch("/update", verifyJWT, (req, res) => {
const idclasses = parseInt(req.body.idclasses);
const idcourses = parseInt(req.body.idcourses);
const name = req.body.name;
const disabled = req.body.disabled ? 1 : 0;
const description = req.body.description;
const viewed = parseInt(req.body.viewed);
const aval = req.body.aval ? 1 : 0;
const download = req.body.download ? 1 : 0;
const demo = req.body.demo ? 1 : 0;
const homework = req.body.homework ? 1 : 0;
const sprites = parseInt(req.body.sprites);
execSQLQuery(
`UPDATE classes SET
idcourses = ?,
name = ?,
disabled = ?,
description = ?,
viewed = ?,
aval = ?,
download = ?,
demo = ?,
homework = ?,
sprites = ?
WHERE idclasses = ?;`,
res,
req.originalUrl,
[
idcourses,
name,
disabled,
description,
viewed,
aval,
download,
demo,
homework,
sprites,
idclasses,
]
);
});
router.delete("/delete/:idclasses", verifyJWT, (req, res) => {
const idclasses = parseInt(req.params.idclasses);
execSQLQuery(
`DELETE FROM classes
WHERE idclasses = ${idclasses};`,
res,
req.originalUrl
);
});
router.post("/copy", 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 idclasses = fields.idclasses;
var GifFile = "";
var BackFile = "";
try {
GifFile = files.gif.path;
} catch (e) {
console.log("Não copia Gif");
}
try {
BackFile = files.back.path;
} catch (e) {
console.log("Não copia Back");
}
if (GifFile == "" && BackFile != "") {
fs.rename(
BackFile,
Variables("src_media") + "images/back_" + idclasses + ".jpg",
function (err) {
console.log("/classes/copy success 200");
res.send(true);
}
);
} else if (GifFile != "" && BackFile == "") {
fs.rename(
GifFile,
Variables("src_media") + "images/gif_" + idclasses + ".gif",
function (err) {
console.log("/classes/copy success 200");
res.send(true);
}
);
} else if (GifFile != "" && BackFile != "") {
fs.rename(
GifFile,
Variables("src_media") + "images/gif_" + idclasses + ".gif",
function (err) {
fs.rename(
BackFile,
Variables("src_media") + "images/back_" + idclasses + ".jpg",
function (err) {
console.log("/classes/copy success 200");
res.send(true);
}
);
}
);
} else {
res.send(true);
}
});
});
router.post("/insertUserStage", verifyJWT, (req, res) => {
const iduserstages = req.body.iduserstages;
const idclassescontent = parseInt(req.body.idclassescontent);
const idusers = parseInt(req.body.idusers);
const idunits = parseInt(req.body.idunits);
const idclasses = parseInt(req.body.idclasses);
const note = req.body.note;
mysqlConnection.query(
"select * from userstages order by iduserstages desc;",
function (error, results, fields) {
let IDUserStages = "";
if (!results || results == "" || results.length == 0)
IDUserStages = "1";
else IDUserStages = parseInt(results[0]["iduserstages"]) + 1;
const SQLInsert = `INSERT INTO userstages(iduserstages, idstages, idusers, idunits, idclasses, note)
SELECT
${IDUserStages},
(SELECT DISTINCT idstages FROM stages WHERE convert(description using utf8) LIKE convert(Stage.description using utf8)) AS idstages,
${idusers} AS idusers,
${idunits} AS idunits,
${idclasses} AS idclasses,
${note} AS note
FROM (SELECT CASE
WHEN idgames is not null THEN 'Jogo'
WHEN idslides is not null THEN 'Montagem'
ELSE 'Lição de Casa'
END AS description
FROM classescontent
WHERE idclassescontent = ${idclassescontent}) Stage;`;
//console.log(SQLInsert);
execSQLQuery(SQLInsert, res, req.originalUrl);
}
);
});
router.post("/insertZoeUserGames", verifyJWT, (req, res) => {
const idunits = parseInt(req.body.idunits);
const idusers = parseInt(req.body.idusers);
const idclasses = parseInt(req.body.idclasses);
const idgames = parseInt(req.body.idgames);
const note = req.body.note;
execSQLQuery(
`insert into zoeusergames (idunits, idusers, idgames, idclasses, note) values (${idunits}, ${idusers}, ${idgames}, ${idclasses}, ${note});`,
res,
req.originalUrl
);
});
router.get("/CarregarImagem/:Nome", (req, res) => {
let Protocolo = "http://";
try {
Protocolo = req.headers.referer.split("/")[0] + "//";
} catch (e) {}
const fs = require("fs");
const Nome = req.params.Nome;
const DirLocal = `${Variables("src_media")}images/${Nome}`;
console.log(DirLocal);
const DirWeb = `${Protocolo}${
req.headers.host.split(":")[0]
}/images/${Nome}`;
console.log(DirWeb);
if (DirLocal.includes("C:/")) {
let diretoriodearquivolocal = DirWeb;
diretoriodearquivolocal = diretoriodearquivolocal.replace(
"localhost",
"localhost:4200"
);
diretoriodearquivolocal = diretoriodearquivolocal.replace(
"images",
"assets/imagesAula"
);
res.redirect(diretoriodearquivolocal);
} else {
if (fs.existsSync(DirLocal)) {
res.redirect(DirWeb);
} else {
const shell = require("shelljs");
shell.exec(
"cd " +
Variables("src_media") +
"images/;wget http://18.228.91.135/images/" +
Nome,
function (sucesso) {
//console.log(sucesso);
res.redirect(DirWeb);
}
);
}
}
});
router.patch("/AtualizarOrdem", verifyJWT, (req, res) => {
const idclasses = parseInt(req.body.idclasses);
const ordem = parseInt(req.body.ordem);
execSQLQuery(
`UPDATE classes SET
ordem = ${ordem}
WHERE idclasses = ${idclasses};`,
res,
req.originalUrl
);
});
router.get("/getTeacherPasswords/:db", verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(
`SELECT
Senha
FROM ${db}Funcionarios
where Desativado = 0;`,
res,
req.originalUrl
);
});
router.get("/getFotoAluno/:idusers/:db", (req, res) => {
const idusers = parseInt(req.params.idusers);
const db = req.params.db;
let sqlQuery = `select distinct
tt.IDTreinando
from ${db}TreinandosTurmas tt
where tt.IDMatricula = ${idusers};`;
if (Variables("local") == "Local") {
console.log(req.originalUrl + " error 403");
res.send(
JSON.stringify({
response: "",
error: null,
status: 403,
})
);
return;
}
sqlServerConnection
.request()
.query(sqlQuery, function (error, results, fields) {
if (!error && results["recordsets"][0].length != 0) {
const fs = require("fs");
/* fs.readdir(Variables("src_fotos"), (err, files) => {
let FotoId = "";
files.forEach(Foto => {
if (Foto.split('.')[0] == results['recordsets'][0][0]['IDTreinando']) {
FotoId = Foto;
}
});
if (FotoId != "") {
fs.readFile(Variables("src_fotos") + FotoId, function(err, data) {
if (err) throw err
console.log(req.originalUrl + " success 200");
res.send(JSON.stringify({
"response": data,
"error": null,
"status": 200
}));
});
}
else {
console.log(req.originalUrl + " error 500");
res.send(JSON.stringify({
"response": "",
"error": null,
"status": 500
}));
}
}); */
} else {
console.log(req.originalUrl + " error 500");
res.send(
JSON.stringify({
response: "",
error: null,
status: 500,
})
);
}
});
});
router.post("/AlteraNotaAula", verifyJWT, (req, res) => {
const idclasses = parseInt(req.body.idclasses);
const idunits = parseInt(req.body.idunits);
const idusers = parseInt(req.body.idusers);
const Nota = req.body.Nota;
const SQLUpdate = `UPDATE stepclass SET note = ${Nota} WHERE idunits = ${idunits} AND idclasses = ${idclasses} AND idusers = ${idusers};`;
mysqlConnection.query(SQLUpdate, function (error, results, fields) {
const SQLDelete = `delete from coursenotes where idcourses = (select idcourses from classes where idclasses = ${idclasses}) and idunits = ${idunits} and idusers = ${idusers};`;
mysqlConnection.query(SQLDelete, function (error2, results2, fields2) {
InsertCourseNotes();
console.log(req.originalUrl + " success 200");
res.send(
JSON.stringify({
response: results2,
error: error2,
status: 200,
})
);
});
});
});
router.get(
"/AlteraStatusAulaAssistida/:idunits/:classes/:idusers/:status",
verifyJWT,
(req, res) => {
const idunits = parseInt(req.params.idunits);
const idclasses = parseInt(req.params.idclasses);
const idusers = parseInt(req.params.idusers);
const status = parseInt(req.params.status);
execSQLQuery(
`UPDATE stepclass SET
liberado = ${status}
WHERE idunits = ${idunits} and idclasses = ${idclasses} and idusers = ${idusers};`,
res,
req.originalUrl
);
}
);
router.get("/getTipoCursoPorAula/:idclasses", verifyJWT, (req, res) => {
const idclasses = parseInt(req.params.idclasses);
execSQLQuery(
`SELECT
tc.*
FROM typescourse tc
inner join courses co on co.idtypescourse = tc.idtypescourse
inner join classes cl on cl.idcourses = co.idcourses
where cl.idclasses = ${idclasses};`,
res,
req.originalUrl
);
});
function InsertCourseNotes() {
console.log(new Date().toUTCString() + " - /InsertCourseNotes");
const SQLQry = `select
Tab2.idcourses,
Tab2.idusers,
(sum(Tab2.note) / Tab2.AulasCurso) as 'note',
Tab2.idunits
from (
select
Tab1.*,
sc.idstepclass,
sc.note
from (
select
sc.idusers,
co.idcourses,
sc.idunits,
count(sc.idclasses) as 'Aulas',
(select count(*) from classes cl1 where cl1.idcourses = co.idcourses and cl1.disabled = 0) as 'AulasCurso'
from stepclass sc
inner join classes cl on cl.idclasses = sc.idclasses
inner join courses co on co.idcourses = cl.idcourses
where sc.note is not null
group by sc.idusers, co.idcourses, sc.idunits) Tab1
inner join stepclass sc on sc.idunits = Tab1.idunits and sc.idusers = Tab1.idusers
inner join classes cl on cl.idclasses = sc.idclasses and cl.idcourses = Tab1.idcourses
where Tab1.Aulas = Tab1.AulasCurso
order by idunits, idcourses, idusers) Tab2
group by Tab2.idcourses, Tab2.idusers, Tab2.idunits;`;
mysqlConnection.query(SQLQry, function (error, results, fields) {
LoopCursoNotas(0, results, function (Sucesso) {
console.log(new Date().toUTCString() + " - Notas de cursos lançadas");
return Sucesso;
});
});
}
function LoopCursoNotas(Index, Registros, callback) {
if (!Registros) {
callback(false);
return;
}
if (Index < Registros.length) {
let SQLInsert = `INSERT INTO coursenotes (idcourses, idusers, note, idunits) VALUES (${Registros[Index]["idcourses"]}, ${Registros[Index]["idusers"]}, ${Registros[Index]["note"]}, ${Registros[Index]["idunits"]});`;
//console.log(SQLInsert);
mysqlConnection.query(SQLInsert, function (error, results, fields) {
if (!error) {
console.log(
"Notas do curso lançadas para o aluno " +
Registros[Index]["idusers"] +
" da unidade " +
Registros[Index]["idcourses"]
);
}
Index++;
LoopCursoNotas(Index, Registros, callback);
});
} else {
callback(true);
}
}
return router;
};
module.exports = routes;

View File

@ -0,0 +1,361 @@
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;

View File

@ -0,0 +1,64 @@
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 concepts;`, res, req.originalUrl);
});
router.get('/List', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
FROM concepts
WHERE disabled = 0;`, res, req.originalUrl);
});
router.get('/getConcept/:idconcepts', verifyJWT, (req, res) => {
const idconcepts = parseInt(req.params.idconcepts);
execSQLQuery(`SELECT
*
FROM concepts
WHERE idconcepts = ${idconcepts};`, res, req.originalUrl);
});
router.post('/insert', verifyJWT, (req, res) => {
const idconcepts = parseInt(req.body.idconcepts);
const concept = req.body.concept;
const weight = req.body.weight;
const disabled = req.body.disabled ? 1 : 0;
execSQLQuery(`INSERT INTO concepts(concept, weight, disabled)
VALUES (?, ?, ?);`, res, req.originalUrl, [concept, weight, disabled]);
});
router.patch('/update', verifyJWT, (req, res) => {
const idconcepts = parseInt(req.body.idconcepts);
const concept = req.body.concept;
const weight = req.body.weight;
const disabled = req.body.disabled ? 1 : 0;
execSQLQuery(`UPDATE concepts SET
concept = ?,
weight = ?,
disabled = ?
WHERE idconcepts = ?;`, res, req.originalUrl, [concept, weight, disabled, idconcepts]);
});
router.get('/disable/:idconcepts', verifyJWT, (req, res) => {
const idconcepts = parseInt(req.params.idconcepts);
execSQLQuery(`UPDATE concepts SET
disabled = not disabled
WHERE idconcepts = ${idconcepts};`, res, req.originalUrl);
});
return router;
};
module.exports = routes;

View File

@ -0,0 +1,64 @@
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('/getAllTTSmode', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
FROM TTSmode
order by description asc;`, res, req.originalUrl);
});
router.get('/getAllSTTmode', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
FROM STTmode
order by description asc;`, res, req.originalUrl);
});
router.get('/getAllChatBot', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
FROM ChatBot
order by description asc;`, res, req.originalUrl);
});
router.get('/getZoeConfig', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
TTSmode,
STTmode,
RMaudio,
ChatBot,
zoevoiceEn,
zoevoicePt
FROM config;`, res, req.originalUrl);
});
router.post('/saveZoeConfig', verifyJWT, (req, res) => {
const ChatBot = parseInt(req.body.ChatBot);
const RMaudio = req.body.RMaudio ? 1 : 0;
const STTmode = parseInt(req.body.STTmode);
const TTSmode = parseInt(req.body.TTSmode);
const zoevoiceEn = req.body.zoevoiceEn;
const zoevoicePt = req.body.zoevoicePt;
execSQLQuery(`update config set
TTSmode = ${TTSmode},
STTmode = ${STTmode},
RMaudio = ${RMaudio},
ChatBot = ${ChatBot},
zoevoiceEn = '${zoevoiceEn}',
zoevoicePt = '${zoevoicePt}'
where idconfig = 1;`, res, req.originalUrl);
});
return router;
};
module.exports = routes;

View File

@ -0,0 +1,615 @@
require("../connections/mysql-server");
require("../connections/sql-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("/getRobotCourses", verifyJWT, (req, res) => {
execSQLQuery(`
SELECT
0 as 'IDMatricula',
idcourses as 'IDCurso',
name as 'NomeVersao',
aditional as 'Adicional',
extracourse as 'CursoExtra'
FROM courses
WHERE idtypescourse = 5 and disabled = 0;`,
res,
req.originalUrl
);
});
router.get("/getRobotCourseByStudent/:idusers/:banco", verifyJWT, (req, res) => {
const idusers = parseInt(req.params.idusers);
const db = req.params.banco;
execSQLQuery(`
SELECT distinct
zus.user AS IDMatricula,
zuc.idcourses AS IDCurso,
co.name AS NomeVersao
FROM zoeusercourses zuc
INNER JOIN courses co ON co.idcourses = zuc.idcourses
INNER JOIN zoeusers zus ON zus.id = zuc.idzoeusers
INNER JOIN zoeunits zun ON zun.id = zuc.idzoeunits
WHERE zuc.enabled = 1 AND (zuc.expiresAt IS NULL OR CURRENT_TIMESTAMP < zuc.expiresAt) AND zus.user = '${idusers}' and CONCAT(zun.id, '.dbo.') = '${db}';`,
res,
req.originalUrl
);
});
router.get("/getRobotCourseByStudentOld/:idusers/:banco", verifyJWT, (req, res) => {
const idusers = parseInt(req.params.idusers);
const db = req.params.banco;
execSQLQuery2(`
SELECT distinct
mt.IDMatricula,
tt.IDCurso,
cu.NomeVersao
FROM ${db}MatriculasTreinandos mt
INNER JOIN ${db}TreinandosTurmas tt ON mt.IDMatricula = tt.IDMatricula
INNER JOIN ${db}Cursos cu ON cu.Codigo = tt.IDCurso
WHERE mt.IDMatricula = ${idusers} AND cu.Desativado = 0 AND tt.Desistente = 0 AND cu.IDTipoCurso = 5;`,
res,
req.originalUrl
);
});
router.get("/getAll", verifyJWT, (req, res) => {
const domain = req.hostname.split(".").pop();
let language;
switch (domain) {
case "br":
language = 1;
break;
case "py":
language = 2;
break;
case "us":
language = 3;
break;
default:
language = 1;
break;
}
execSQLQuery(
`SELECT
*
FROM myrobot.courses where idlanguage = ${language} order by name asc`,
res,
req.originalUrl
);
});
router.get("/getAllCourseOn", verifyJWT, (req, res) => {
const domain = req.hostname.split(".").pop();
let language;
switch (domain) {
case "br":
language = 1;
break;
case "py":
language = 2;
break;
case "us":
language = 3;
break;
default:
language = 1;
break;
}
execSQLQuery(
`SELECT
*
FROM myrobot.courses where idlanguage = ${language} and disabled = 0 order by name asc`,
res,
req.originalUrl
);
});
router.get("/getAllCourses", verifyJWT, (req, res) => {
execSQLQuery(
`SELECT
*
FROM courses
WHERE idtypescourse != 5;`,
res,
req.originalUrl
);
});
router.get("/getSQLServerCourses/:db", verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(
`SELECT
*
FROM ${db}Cursos;`,
res,
req.originalUrl
);
});
router.get("/getMySQLinSQLServerCourses", verifyJWT, (req, res) => {
execSQLQuery(
`SELECT
idcourses AS 'Codigo',
coursecode AS 'CodigoCurso',
idtypescourse AS 'IDTipoCurso',
name AS 'NomeVersao',
description AS 'DescricaoContrato',
durationtraineeprogram AS 'CH_ProgTrein',
durationtraineevip AS 'CH_TurmaVIP',
durationtraineeindividual AS 'CH_Individual',
valueprogram AS 'VR_ProgTrein',
valuevip AS 'VR_TurmaVIP',
valueindividual AS 'VR_Individual',
materialvalue AS 'ValorMaterial',
materialcode AS 'CodigoMaterial',
CASE WHEN extracourse = 1 THEN 'true' else 'false' END AS 'CursoExtra',
CASE WHEN aditional = 1 THEN 'true' else 'false' END AS 'Adicional',
CASE WHEN disabled = 1 THEN 'true' else 'false' END AS 'Desativado',
CASE WHEN autospeak = 1 THEN 'true' else 'false' END AS 'FalaAutomatica'
FROM courses;`,
res,
req.originalUrl
);
});
router.get("/typescourse", verifyJWT, (req, res) => {
execSQLQuery(
`SELECT
*
FROM typescourse;`,
res,
req.originalUrl
);
});
router.get("/getMySQLinSQLServerTypescourse", verifyJWT, (req, res) => {
execSQLQuery(
`SELECT
idtypescourse AS 'IDTipoCurso',
description AS 'Descricao',
case when disabled = 1 then true else false end as 'Desativado',
gradecalc AS 'CalculosNotas'
FROM typescourse;`,
res,
req.originalUrl
);
});
router.get("/SQLServertypescourse/:db", verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(
`SELECT
*
FROM ${db}TiposCurso;`,
res,
req.originalUrl
);
});
router.get("/getExtraCourses", verifyJWT, (req, res) => {
execSQLQuery(
`SELECT
0 as 'IDMatricula',
idcourses as 'IDCurso',
name as 'NomeVersao'
FROM courses
WHERE aditional = 1 and disabled = 0;`,
res,
req.originalUrl
);
});
router.get("/getCourse/:idcourses", verifyJWT, (req, res) => {
const idcourses = parseInt(req.params.idcourses);
execSQLQuery(
`SELECT
*
FROM courses
WHERE idcourses = ${idcourses};`,
res,
req.originalUrl
);
});
router.get("/getCourseNote/:idcourses", verifyJWT, (req, res) => {
const idcourses = parseInt(req.params.idcourses);
execSQLQuery(
`SELECT
*
FROM coursenotes
WHERE idcourses = ${idcourses};`,
res,
req.originalUrl
);
});
router.get("/getAllSQLServerCourses/:idusers", verifyJWT, (req, res) => {
const idusers = parseInt(req.params.idusers);
let sqlQuery = `SELECT idcourses AS 'IDCurso', ${idusers} AS 'IDMatricula', name AS 'NomeVersao' FROM courses where idtypescourse != 5 and disabled = 0 order by name asc;`;
execSQLQuery(sqlQuery, res, req.originalUrl);
});
router.get("/getCourseByStudent/:idusers/:banco", verifyJWT, (req, res) => {
const idusers = parseInt(req.params.idusers);
const db = req.params.banco;
const EAD = req.headers.host && req.headers.host.includes("myrobothome");
mysqlConnection.query(
"select cursoferias from config;",
function (error, results, fields) {
let sqlQuery = `SELECT distinct
mt.IDMatricula,
cu.Codigo as 'IDCurso',
cu.NomeVersao,
cu.IDTipoCurso
FROM ${db}MatriculasTreinandos mt
INNER JOIN ${db}TreinandosTurmas tt ON mt.IDMatricula = tt.IDMatricula
INNER JOIN ${db}Cursos cu ON cu.Codigo = tt.IDCurso
WHERE mt.IDMatricula = ${idusers} AND cu.Desativado = 0 AND tt.Desistente = 0 AND cu.IDTipoCurso ${
EAD ? "= 7" : "!= 5"
}
union all select
0 as IDMatricula,
cu2.Codigo as 'IDCurso',
cu2.NomeVersao,
cu2.IDTipoCurso
from ${db}Cursos cu2
where 1=0${
results[0]["cursoferias"] == 1 ? " or cu2.CursoExtra = 1" : ""
}${EAD ? " or cu2.Adicional = 1" : ""};`;
//console.log(sqlQuery);
execSQLQuery2(sqlQuery, res, req.originalUrl);
}
);
});
router.get(
"/getHomeCourseByStudent/:idusers/:banco",
verifyJWT,
(req, res) => {
const idusers = parseInt(req.params.idusers);
const db = req.params.banco;
const EAD = req.headers.host && req.headers.host.includes("myrobothome");
mysqlConnection.query(
"select cursoferias from config;",
function (error, results, fields) {
let sqlQuery = `SELECT distinct
mt.IDMatricula,
cu.Codigo as 'IDCurso',
cu.NomeVersao,
cu.IDTipoCurso
FROM ${db}MatriculasTreinandos mt
INNER JOIN ${db}TreinandosTurmas tt ON mt.IDMatricula = tt.IDMatricula
INNER JOIN ${db}Cursos cu ON cu.Codigo = tt.IDCurso
WHERE mt.IDMatricula = ${idusers} AND cu.Desativado = 0 AND tt.Desistente = 0 AND
(cu.IDTipoCurso = 4 or cu.IDTipoCurso = 6 or cu.IDTipoCurso = 7)
union all select
0 as IDMatricula,
cu2.Codigo as 'IDCurso',
cu2.NomeVersao,
cu2.IDTipoCurso
from ${db}Cursos cu2
where (cu2.IDTipoCurso = 4 or cu2.IDTipoCurso = 6 or cu2.IDTipoCurso = 7) and
(1=0${
results[0]["cursoferias"] == 1 ? " or cu2.CursoExtra = 1" : ""
}${EAD ? " or cu2.Adicional = 1" : ""});`;
console.log(sqlQuery);
execSQLQuery2(sqlQuery, res, req.originalUrl);
}
);
}
);
router.get("/list", verifyJWT, (req, res) => {
execSQLQuery(
`SELECT
idcourses,
name,
description,
concat('R$ ',format(materialvalue,2,'de_DE')) as materialvalue,
disabled,
idtypescourse
FROM courses
WHERE disabled = 0
order by name asc;`,
res,
req.originalUrl
);
});
router.get("/disable/:idcourses", verifyJWT, (req, res) => {
const idcourses = parseInt(req.params.idcourses);
execSQLQuery(
`UPDATE courses SET
disabled = not disabled
WHERE idcourses = ${idcourses};`,
res,
req.originalUrl
);
});
router.post("/insertSQL", verifyJWT, (req, res) => {
const coursecode = req.body.coursecode
const idtypescourse = parseInt(req.body.idtypescourse)
const name = req.body.name
const description = req.body.description
const durationtraineeprogram = req.body.durationtraineeprogram
const durationtraineevip = req.body.durationtraineevip
const durationtraineeindividual = req.body.durationtraineeindividual
const valueprogram = parseFloat(req.body.valueprogram)
const valuevip = parseFloat(req.body.valuevip)
const valueindividual = parseFloat(req.body.valueindividual)
const disabled = req.body.disabled
const materialvalue = parseFloat(req.body.materialvalue)
const materialcode = req.body.materialcode
const aditional = req.body.aditional
const extracourse = req.body.aditional
const autospeak = req.body.autospeak
console.log(req.body)
})
router.post("/insert", verifyJWT, (req, res) => {
const coursecode = req.body.coursecode;
const idtypescourse = parseInt(req.body.idtypescourse);
const name = req.body.name;
const description = req.body.description;
const durationtraineeprogram = req.body.durationtraineeprogram;
const durationtraineevip = req.body.durationtraineevip;
const durationtraineeindividual = req.body.durationtraineeindividual;
const valueprogram = parseFloat(req.body.valueprogram);
const valuevip = parseFloat(req.body.valuevip);
const valueindividual = parseFloat(req.body.valueindividual);
const materialvalue = parseFloat(req.body.materialvalue);
const materialcode = req.body.materialcode;
const extracourse = req.body.extracourse ? 1 : 0;
const aditional = req.body.aditional ? 1 : 0;
const disabled = req.body.disabled ? 1 : 0;
const autospeak = req.body.autospeak ? 1 : 0;
const idlanguage = req.body.idlanguage;
try {
execSQLQuery(
`INSERT INTO courses (coursecode, idtypescourse, name, description, durationtraineeprogram, durationtraineevip, durationtraineeindividual, valueprogram, valuevip, valueindividual, materialvalue, materialcode, extracourse, aditional, disabled, autospeak, idlanguage)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? , ?, ?, ?, ?);`,
res,
req.originalUrl,
[
coursecode,
idtypescourse,
name,
description,
durationtraineeprogram,
durationtraineevip,
durationtraineeindividual,
valueprogram,
valuevip,
valueindividual,
materialvalue,
materialcode,
extracourse,
aditional,
disabled,
autospeak,
idlanguage,
]
);
} catch (error) {
console.log("oi");
console.log(error);
}
});
router.patch("/update", verifyJWT, (req, res) => {
const idcourses = parseInt(req.body.idcourses);
const coursecode = req.body.coursecode;
const idtypescourse = parseInt(req.body.idtypescourse);
const name = req.body.name;
const description = req.body.description;
const durationtraineeprogram = req.body.durationtraineeprogram;
const durationtraineevip = req.body.durationtraineevip;
const durationtraineeindividual = req.body.durationtraineeindividual;
const valueprogram = parseFloat(req.body.valueprogram);
const valuevip = parseFloat(req.body.valuevip);
const valueindividual = parseFloat(req.body.valueindividual);
const materialvalue = parseFloat(req.body.materialvalue);
const materialcode = req.body.materialcode;
const extracourse = req.body.extracourse ? 1 : 0;
const aditional = req.body.aditional ? 1 : 0;
const disabled = req.body.disabled ? 1 : 0;
const autospeak = req.body.autospeak ? 1 : 0;
execSQLQuery(
`UPDATE courses SET
coursecode = ?,
idtypescourse = ?,
name = ?,
description = ?,
durationtraineeprogram = ?,
durationtraineevip = ?,
durationtraineeindividual = ?,
valueprogram = ?,
valuevip = ?,
valueindividual = ?,
materialvalue = ?,
materialcode = ?,
extracourse = ?,
aditional = ?,
disabled = ?,
autospeak = ?
WHERE idcourses = ?;`,
res,
req.originalUrl,
[
coursecode,
idtypescourse,
name,
description,
durationtraineeprogram,
durationtraineevip,
durationtraineeindividual,
valueprogram,
valuevip,
valueindividual,
materialvalue,
materialcode,
extracourse,
aditional,
disabled,
autospeak,
idcourses,
]
);
});
router.get(
"/getCourseAndClass/:idusers/:idCursos/:idunits",
verifyJWT,
(req, res) => {
const idusers = parseInt(req.params.idusers);
const idunits = parseInt(req.params.idunits);
const WhereClause = req.params.idCursos;
const domain = req.hostname.split(".").pop();
let language;
switch (domain) {
case "br":
language = 1;
break;
case "py":
language = 2;
break;
case "us":
language = 3;
break;
default:
language = 1;
break;
}
let sqlQuery = `select distinct
*,
COALESCE(((R.actualItem / R.itensInClass) * 100) , 0) AS 'progressB'
FROM (
select
co.*,
cl.idclasses,
cl.name AS 'nameC',
cl.description AS 'descriptionC',
cl.aval,
cl.demo,
COALESCE(sc.actualItem, 0) AS 'actualItem',
sc.continueClass,
sc.completedClass,
sc.lockedClass,
sc.liberado,
ROUND(sc.note, 2) AS 'note',
sc.notification,
sc.homework,
(select count(*) from userstages us where us.idunits = sc.idunits and us.idusers = sc.idusers and us.idclasses = sc.idclasses) as 'licao',
0 AS 'showdet',
0 AS 'btnVis',
COALESCE(sc.actualItem, 0) AS 'actualItenInClass',
(SELECT COUNT(*) AS 'qtdeItens'
from classescontent cc
LEFT join exercisequestions eq ON eq.idexercises = cc.idexercises
LEFT join media m ON m.idmedia = cc.idmedia
LEFT join texts t ON t.idtexts = cc.idtexts
LEFT join slides s ON s.idslides = cc.idslides
LEFT join texts g ON g.idtexts = cc.idgames AND t.game = 1
where cc.idclasses = cl.idclasses)
AS 'itensInClass',
cl.download AS 'downloads',
cl.ordem,
(select count(*) from barcodes bc where bc.idunits = ${idunits} and bc.idusers = ${idusers} and bc.idcourses = co.idcourses) as 'Apostila'
from courses co
inner join classes cl on cl.idcourses = co.idcourses and cl.disabled = 0
left join stepclass sc on sc.idclasses = cl.idclasses and sc.idusers = ${idusers} and sc.idunits = ${idunits}
WHERE ${
idusers == 190001 ? "cl.demo = 1" : "co.idcourses in " + WhereClause
} AND co.disabled = 0 AND cl.homework = 0 and co.idtypescourse != 5
AND co.idlanguage = ${language} OR co.idlanguage = 0
ORDER BY co.name, cl.ordem ASC) R
ORDER BY R.name ASC, ordem ASC;`;
execSQLQuery(sqlQuery, res, req.originalUrl);
}
);
router.get(
"/getHomeCourseAndClass/:idusers/:idCursos/:idunits",
verifyJWT,
(req, res) => {
const idusers = parseInt(req.params.idusers);
const idunits = parseInt(req.params.idunits);
const WhereClause = req.params.idCursos;
let sqlQuery = `select distinct
*,
COALESCE(((R.actualItem / R.itensInClass) * 100) , 0) AS 'progressB'
FROM (
select
co.*,
cl.idclasses,
cl.name AS 'nameC',
cl.description AS 'descriptionC',
cl.aval,
cl.demo,
COALESCE(sc.actualItem, 0) AS 'actualItem',
sc.continueClass,
sc.completedClass,
sc.lockedClass,
sc.liberado,
ROUND(sc.note, 2) AS 'note',
sc.notification,
sc.homework,
(select count(*) from userstages us where us.idunits = sc.idunits and us.idusers = sc.idusers and us.idclasses = sc.idclasses) as 'licao',
0 AS 'showdet',
0 AS 'btnVis',
COALESCE(sc.actualItem, 0) AS 'actualItenInClass',
(SELECT COUNT(*) AS 'qtdeItens'
from classescontent cc
LEFT join exercisequestions eq ON eq.idexercises = cc.idexercises
LEFT join media m ON m.idmedia = cc.idmedia
LEFT join texts t ON t.idtexts = cc.idtexts
LEFT join slides s ON s.idslides = cc.idslides
LEFT join texts g ON g.idtexts = cc.idgames AND t.game = 1
where cc.idclasses = cl.idclasses)
AS 'itensInClass',
cl.download AS 'downloads',
cl.ordem,
(select count(*) from barcodes bc where bc.idunits = ${idunits} and bc.idusers = ${idusers} and bc.idcourses = co.idcourses) as 'Apostila'
from courses co
inner join classes cl on cl.idcourses = co.idcourses and cl.disabled = 0
left join stepclass sc on sc.idclasses = cl.idclasses and sc.idusers = ${idusers} and sc.idunits = ${idunits}
WHERE ${
idusers == 190001 ? "cl.demo = 1" : "co.idcourses in " + WhereClause
} AND co.disabled = 0 AND cl.homework = 0 and co.idtypescourse != 5
and (co.idtypescourse = 4 or co.idtypescourse = 6 or co.idtypescourse = 7)
ORDER BY co.name, cl.ordem ASC) R
ORDER BY R.name ASC, ordem ASC;`;
execSQLQuery(sqlQuery, res, req.originalUrl);
console.log(sqlQuery);
}
);
return router;
};
module.exports = routes;

View File

@ -0,0 +1,35 @@
require('../connections/sql-server');
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('/courses/:idmatricula/:idtreinando', (req, res) => {
const idmatricula = parseInt(req.params.idmatricula);
const idtreinando = parseInt(req.params.idtreinando);
execSQLQuery(`
select TT.IDCurso, TT.IDMatricula, TT.IDTreinando,
C.NomeVersao
from TreinandosTurmas TT
inner join Cursos C
on C.Codigo = TT.IDCurso
inner join TurmasDetalhe TD
on TD.IDTurma = TT.CodigoTurma
and TD.CodigoCurso = TT.IDCurso
where TT.IDMatricula = ${idmatricula}
and TT.IDTreinando = ${idtreinando}
order by TD.Ordem asc`,
res,
req.originalUrl
);
})
return router;
};
module.exports = routes;

View File

@ -0,0 +1,89 @@
require('../connections/mysql-server');
require('../helpers/CheckToken');
require('../helpers/config');
const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
router.use(bodyParser.urlencoded({
limit: '10mb',
extended: true
}
));
router.use(bodyParser.json({
limit: '10mb',
extended: true
}));
var routes = function () {
router.get('/getAll', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
FROM curiosities;`, res, req.originalUrl);
});
router.get('/getById/:idcuriosities', verifyJWT, (req, res) => {
const idcuriosities = parseInt(req.params.idcuriosities);
execSQLQuery(`SELECT
*
FROM curiosities
WHERE idcuriosities = ${idcuriosities};`, res, req.originalUrl);
});
router.post('/insert', verifyJWT, (req, res) => {
const idcuriosities = parseInt(req.body.idcuriosities);
const src = req.body.src;
const description = req.body.description;
const itens = parseInt(req.body.itens);
execSQLQuery(`INSERT INTO curiosities (src, description, itens)
VALUES (?, ?, ?);`, res, req.originalUrl, [src, description, itens]);
});
router.patch('/update', verifyJWT, (req, res) => {
const idcuriosities = parseInt(req.body.idcuriosities);
const src = req.body.src;
const description = req.body.description;
const itens = req.body.itens;
execSQLQuery(`UPDATE curiosities SET
src = ?,
description = ?,
itens = ?
WHERE idcuriosities = ?;`, res, req.originalUrl, [src, description, itens, idcuriosities]);
});
router.post('/copy', verifyJWT, (req, res) => {
var base64ToImage = require('base64-to-image');
var img64 = req.body.src;
var Name = req.body.name;
var Obj = {'fileName': Name, 'type':'jpg'};
var path = Variables('src_media') + 'files/';
if(base64ToImage(img64,path,Obj)) {
res.send(true)
}
else {
res.send(false);
}
//res.send("images uploaded with success!");
});
router.post('/backimg', verifyJWT, (req, res) => {
var base64Img = require('base64-img');
var name = req.body.name;
var src = Variables('src_media') + 'files/' + name + '.jpg';
if(base64Img.base64Sync(src)) {
var srcCuriosity = base64Img.base64Sync(src);
} else {
var srcCuriosity = "";
}
var imagens = {
srcCuriosity: srcCuriosity
}
res.send(imagens);
});
return router;
};
module.exports = routes;

View File

@ -0,0 +1,66 @@
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('/getInfo/:idUser/:idUnit', verifyJWT, (req, res) => {
console.log(req.body);
const idUser = parseInt(req.params.idUser);
const idUnit = parseInt(req.params.idUnit);
execSQLQuery(`SELECT *
FROM customizeZoeProfile
WHERE idAluno = ${idUser} AND idUnit = ${idUnit};`, res, req.originalUrl);
});
router.post('/insertNew', verifyJWT, (req, res) => {
const idUser = parseInt(req.body.idUser);
const idUnit = parseInt(req.body.idUnit);
execSQLQuery(`INSERT INTO
customizeZoeProfile (idAluno, idUnit, boughtItens)
VALUES (${idUser}, ${idUnit},
"Eyes_Blue;Eyes_Green;Eyes_Red;Eyes_Yellow;Eyes_White;Cheek_Basic;");`, res, req.originalUrl);
});
router.post('/updateCoins', verifyJWT, (req, res) => {
const coinsToAdd = parseInt(req.body.coinsToAdd);
const idUser = parseInt(req.body.idUser);
const idUnit = parseInt(req.body.idUnit);
execSQLQuery(`UPDATE customizeZoeProfile
SET coins = coins + ${coinsToAdd}
WHERE idAluno = ${idUser} AND idUnit = ${idUnit};`, res, req.originalUrl);
});
router.post('/updateItens', verifyJWT, (req, res) => {
const itemToAdd = req.body.itemToAdd;
const coinsToRemove = parseInt(req.body.coinsToRemove);
const idUser = parseInt(req.body.idUser);
const idUnit = parseInt(req.body.idUnit);
execSQLQuery(`UPDATE customizeZoeProfile
SET coins = coins - ${coinsToRemove}, boughtItens = '${itemToAdd}'
WHERE idAluno = ${idUser} AND idUnit = ${idUnit};`, res, req.originalUrl);
});
router.post('/updateActualItens', verifyJWT, (req, res) => {
const newActuals = req.body.newActuals;
const idUser = parseInt(req.body.idUser);
const idUnit = parseInt(req.body.idUnit);
execSQLQuery(`UPDATE customizeZoeProfile
SET actualItens = '${newActuals}'
WHERE idAluno = ${idUser} AND idUnit = ${idUnit};`, res, req.originalUrl);
});
router.get('/getItensCustomize', verifyJWT, (req, res) => {
execSQLQuery(`SELECT *
FROM zoeCustomizeItens`, res, req.originalUrl);
});
return router;
};
module.exports = routes;

View File

@ -0,0 +1,67 @@
require('../connections/mysql-server');
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('/getStudents/:codello/:startdate/:enddate/:tkapi', (req, res) => {
let codello = req.params.codello;
let tkapi = req.params.tkapi;
let startdate = req.params.startdate;
let enddate = req.params.enddate;
let sqlQry = `select reference_db, studenthourvalue
from units
cross join config
where codello = ${codello}
and tk_api = '${tkapi}'`;
mysqlConnection.query(sqlQry, function (error, results, fields) {
if (!error && results.length != 0) {
var studenthourvalue = results[0]['studenthourvalue'];
var reference_db = results[0]['reference_db'];
let sqlQry = `select *,
(ceiling(convert(decimal(10,2),HoraAula)/8) * ${studenthourvalue}) as Valor
from (
select TT.IDMatricula as Matricula,
C.Nome as Nome,
sum(datediff(HOUR,TC.HoraInicial,TC.HoraFinal)) as HoraAula
from ${reference_db}.dbo.TreinandosTurmas TT
inner join ${reference_db}.dbo.TurmasCalendario TC
on TC.IdTurma = TT.CodigoTurma
and TC.CodigoCurso = TT.IDCurso
inner join ${reference_db}.dbo.Clientes C
on C.IDCliente = TT.IDTreinando
where TC.Ministrado = 1
and TT.IDMatricula > 190008
and TC.Data between '${startdate}' and '${enddate}'
group by IDMatricula, Nome
) Res
order by Matricula asc`;
sqlServerConnection.request().query(sqlQry, function (error2, results2, fields) {
if (!error2 && results2.length != 0) {
//console.log(results2.recordset);
res.status(200).send(results2.recordset);
} else {
res.status(500).send('Não foram encontrados resultados para a pesquisa');
}
});
}
else {
res.status(500).send('Código do Cliente ou Token Inválido');
}
});
})
return router;
}
module.exports = routes;

View File

@ -0,0 +1,345 @@
require('../connections/mysql-server');
const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
router.use(bodyParser.urlencoded({ extended: true }));
router.use(bodyParser.json());
var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
//service: 'gmail',
host: "email-ssl.com.br",
port: 465,
secure: true,
auth: {
//user: 'trocasenhamyrobot@gmail.com',
//pass: 'trocasenhamyrobot2021',
//user: 'iyrconline@myrobot.com.br',
//pass: 'iyrcMyrobot@2255',
//user: 'myrobotschool@gmail.com',
//pass: 'myrobot2020**==',
user: 'staff@myrobot.com.br',
pass: 'stAff66**'
}
});
var routes = function () {
router.post('/send', (req, res) => {
EnviarEmail(req.body.to, req.body.subject, req.body.text, function(Sucesso) {
res.send(Sucesso);
});
});
function EnviarEmail(Email, Assunto, Texto, callback) {
var mailOptions = {
from: 'MyRobot School <staff@myrobot.com.br>',
to: Email,
subject: Assunto,
html: Texto,
/*attachments: [{ // Basta incluir esta chave e listar os anexos
filename: 'boleto.pdf', // O nome que aparecerá nos anexos
path: 'servidor/boletos/boleto_gerado1234.pdf' // O arquivo será lido neste local ao ser enviado
}]*/
};
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
console.log(error);
callback(false);
} else {
console.log('Email sent to: ' + mailOptions.to + ' - ' + info.response);
callback(true);
}
});
}
router.get('/getRequest/:encript', (req, res) => {
encript = req.params.encript;
execSQLQuery(`SELECT * FROM requestpass WHERE encript = '${encript}'`, res, req.originalUrl);
})
router.get('/getReqNotExpired/:idusers/:email/:db', (req, res) => {
id = req.params.idusers;
email = req.params.email;
db = req.params.db;
execSQLQuery(`
SELECT *
FROM requestpass
WHERE registration = '${id}' AND email = '${email}' AND db = '${db}'`,
res,
req.originalUrl
);
})
router.post('/insert', (req, res) => {
const idrequestpass = req.body.idrequestpass;
const registration = req.body.registration;
const email = req.body.email;
const encript = req.body.encript;
const db = req.body.db;
const expired = req.body.expired;
execSQLQuery(`
INSERT INTO
requestpass(
registration, email, encript, db, expired
) VALUES (
${registration}, '${email}', '${encript}', '${db}', ${expired}
)`,
res,
req.originalUrl
);
})
router.patch('/update', (req, res) => {
const idrequestpass = req.body.idrequestpass;
const registration = req.body.registration;
const email = req.body.email;
const encript = req.body.encript;
const db = req.body.db;
const expired = req.body.expired;
execSQLQuery(`
UPDATE
requestpass SET
registration = ${registration},
email = '${email}',
encript = '${encript}',
db = '${db}',
expired = ${expired}
WHERE idrequestpass = ${idrequestpass}`,
res,
req.originalUrl
);
})
router.patch('/expired', (req, res) => {
const idrequestpass = req.body.idrequestpass;
const expired = req.body.expired;
execSQLQuery(`
UPDATE
requestpass SET
expired = ${expired}
WHERE idrequestpass = ${idrequestpass}`,
res,
req.originalUrl
);
})
router.post('/insertLeadsSite', (req, res) => {
const idleadseventos = parseInt(req.body.idleadseventos);
const idunits = parseInt(req.body.idunits);
const nome = req.body.nome;
let telefone = req.body.telefone;
let email = req.body.email;
const horario = req.body.horario;
const formacontato = req.body.forma;
const contato = req.body.contato;
if(formacontato === "WhatsApp") {
telefone = contato;
req.body.telefone = telefone;
} else if(formacontato === "Email") {
email = contato;
req.body.email = email;
}
mysqlConnection.query(`insert into leadssite (idleadseventos, idunits, nome, telefone, email, horario) values (?, ?, ?, ?, ?, ?);`, [idleadseventos, idunits, nome, telefone, email, horario], function (error, response, fields) {
mysqlConnection.query(`select
un.unityname,
un.manager,
un.email,
le.descricao,
le.idleadseventos
from units un
inner join leadseventos le on le.idleadseventos = ${idleadseventos}
where un.idunits = ${idunits};`, function (error, InfoUnidade, fields) {
const Assunto = InfoUnidade[0]['descricao'];
const Texto = MontaEmailCaptacaoLeadsSite(InfoUnidade[0], req.body);
EnviarEmail(InfoUnidade[0]['email'], Assunto, Texto, function(Sucesso) {
const EmailInterno = "joao.pedro@makereducacao.com.br";
EnviarEmail(EmailInterno, Assunto, Texto, function(Sucesso2) {
res.send(Sucesso);
});
});
});
});
});
function MontaEmailCaptacaoLeadsSite(DadosEvento, DadosLead) {
let TextoEmail = "";
switch (DadosEvento.idleadseventos) {
case 1:
let Contato = DadosLead.contato;
let BotaoContato = "";
let OldContato = Contato;
if(DadosLead.forma === "WhatsApp") {
Contato = Contato.replace("(" , "").replace(")","").replace(" ","").replace("-","");
BotaoContato = `<div style="width:fit-content;background: #08d319;padding: 1rem 2rem;border-radius: 1.5rem;margin: 0 auto;margin-top: 1rem;cursor: pointer;"><a class="button" style="text-decoration: none;color: #fff;font-weight: bold;font-family: sans-serif;font-size: 18px" href="https://wa.me/55${Contato}" target="_blank">Entrar em contato</a></div>`;
} else if (DadosLead.forma === "Email") {
BotaoContato = `<div style="width:fit-content;background: #0c60fd;padding: 1rem 2rem;border-radius: 1.5rem;margin: 0 auto;margin-top: 1rem;cursor: pointer;"><a class="button" style="text-decoration: none;color: #fff;font-weight: bold;font-family: sans-serif;font-size: 18px" href="mailto:${Contato}" target="_blank">Entrar em contato</a></div>`
}
TextoEmail = `
<div style="background-color:#f7f7f7">
<div style="margin:0px auto;max-width:600px">
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%">
<tbody>
<tr>
<td style="direction:ltr;font-size:0px;padding:10px;padding-left:40px;padding-right:40px;text-align:center"></td>
</tr>
</tbody>
</table>
</div>
<div style="border:1px solid #d9d9d9;background:white;background-color:white;margin:0px auto;max-width:600px">
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="background:white;background-color:white;width:100%">
<tbody>
<tr>
<td style="direction:ltr;font-size:0px;padding:0px 0;padding-bottom:30px;text-align:center">
<div style="margin:0px auto;max-width:600px">
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%">
<tbody>
<tr>
<td style="direction:ltr;font-size:0px;padding:0;padding-left:0;padding-right:0;text-align:center">
<div class="m_-4945555513056369728mj-column-per-100" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%">
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top" width="100%">
<tbody>
<tr>
<td align="center" style="font-size:0px;padding:0 0;word-break:break-word">
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse:collapse;border-spacing:0px">
<tbody>
<tr>
<td style="width:600px">
<img height="auto" src="https://myrobotlab.com.br/assets/images/MailInauguracao/mail-banner.png" style="border:0;display:block;outline:none;text-decoration:none;height:auto;width:100%;font-size:13px" width="600" class="CToWUd a6T" tabindex="0">
<div class="a6S" dir="ltr" style="opacity: 0.01; left: 677.5px; top: 180px;">
<div id=":173" class="T-I J-J5-Ji aQv T-I-ax7 L3 a5q" role="button" tabindex="0" aria-label="Fazer o download do anexo " data-tooltip-class="a1V" data-tooltip="Fazer o download">
<div class="aSK J-J5-Ji aYr"></div>
</div>
</div>
<div style="font-family:sans-serif;font-size:22px;line-height:150%;text-align:center;color:#FF7600;font-weight: bolder;margin-top: 20px;">Nova visita agendada!</div>
<hr style="width: 75%;margin: auto;background-color: #303030;margin-top: 20px;">
<div style="font-family:sans-serif;font-size:18px;line-height:150%;text-align:center;color:#000;margin-top: 15px;"><strong style="color: #303030" >Nome:</strong> ${DadosLead.nome}</div>
<div style="font-family:sans-serif;font-size:18px;line-height:150%;text-align:center;color:#000;margin-top: 5px;"><strong style="color: #303030">Horario:</strong> ${DadosLead.horario}</div>
<div style="font-family:sans-serif;font-size:18px;line-height:150%;text-align:center;color:#000;margin-top: 5px;"><strong style="color: #303030" >Forma de contato:</strong> ${DadosLead.forma}</div>
<div style="font-family:sans-serif;font-size:18px;line-height:150%;text-align:center;color:#000;margin-top: 5px;"><strong style="color: #303030" >Contato:</strong> ${OldContato}</div>
${BotaoContato}
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div style="margin:0px auto;max-width:600px">
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%">
<tbody>
<tr>
<td style="direction:ltr;font-size:0px;padding:10px;padding-left:40px;padding-right:40px;text-align:center"></td>
</tr>
</tbody>
</table>
</div>
</div>
`;
break;
case 2:
TextoEmail = ` <div style="background-color:#f7f7f7">
<div style="margin:0px auto;max-width:600px">
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%">
<tbody>
<tr>
<td style="direction:ltr;font-size:0px;padding:10px;padding-left:40px;padding-right:40px;text-align:center"></td>
</tr>
</tbody>
</table>
</div>
<div style="border:1px solid #d9d9d9;background:white;background-color:white;margin:0px auto;max-width:600px">
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="background:white;background-color:white;width:100%">
<tbody>
<tr>
<td style="direction:ltr;font-size:0px;padding:0px 0;padding-bottom:30px;text-align:center">
<div style="margin:0px auto;max-width:600px">
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%">
<tbody>
<tr>
<td style="direction:ltr;font-size:0px;padding:0;padding-left:0;padding-right:0;text-align:center">
<div class="m_-4945555513056369728mj-column-per-100" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%">
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top" width="100%">
<tbody>
<tr>
<td align="center" style="font-size:0px;padding:0 0;word-break:break-word">
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse:collapse;border-spacing:0px">
<tbody>
<tr>
<td style="width:600px">
<img height="auto" src="https://myrobotlab.com.br/assets/images/RoboxOnMail/mail-banner.png" style="border:0;display:block;outline:none;text-decoration:none;height:auto;width:100%;font-size:13px" width="600" class="CToWUd a6T" tabindex="0">
<div class="a6S" dir="ltr" style="opacity: 0.01; left: 677.5px; top: 180px;">
<div id=":173" class="T-I J-J5-Ji aQv T-I-ax7 L3 a5q" role="button" tabindex="0" aria-label="Fazer o download do anexo " data-tooltip-class="a1V" data-tooltip="Fazer o download">
<div class="aSK J-J5-Ji aYr"></div>
</div>
</div>
<div style="font-family:sans-serif;font-size:22px;line-height:150%;text-align:center;color:#FF7600;font-weight: bolder;margin-top: 20px;">Novo lead captado!</div>
<hr style="width: 75%;margin: auto;background-color: #303030;margin-top: 20px;">
<div style="font-family:sans-serif;font-size:18px;line-height:150%;text-align:center;color:#000;margin-top: 15px;"><strong style="color: #303030" >Nome:</strong> ${DadosLead.nome}</div>
<div style="font-family:sans-serif;font-size:18px;line-height:150%;text-align:center;color:#000;margin-top: 5px;"><strong style="color: #303030" >Telefone:</strong> ${DadosLead.telefone}</div>
<div style="font-family:sans-serif;font-size:18px;line-height:150%;text-align:center;color:#000;margin-top: 5px;"><strong style="color: #303030" >Email:</strong> ${DadosLead.email}</div>
<div style="width:fit-content;background: #08d319;padding: 1rem 2rem;border-radius: 1.5rem;margin: 0 auto;margin-top: 1rem;cursor: pointer;"><a class="button" style="text-decoration: none;color: #fff;font-weight: bold;font-family: sans-serif;font-size: 18px" href="https://wa.me/55${DadosLead.telefone.replace("(","").replace(")","").replace("-","").replace(" ","")}" target="_blank">Abrir no WhatsApp</a></div>
<div style="width:fit-content;background: #0c60fd;padding: 1rem 2rem;border-radius: 1.5rem;margin: 0 auto;margin-top: 1rem;cursor: pointer;"><a class="button" style="text-decoration: none;color: #fff;font-weight: bold;font-family: sans-serif;font-size: 18px" href="mailto:${DadosLead.email}" target="_blank">Escrever email</a></div>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div style="margin:0px auto;max-width:600px">
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%">
<tbody>
<tr>
<td style="direction:ltr;font-size:0px;padding:10px;padding-left:40px;padding-right:40px;text-align:center"></td>
</tr>
</tbody>
</table>
</div>
</div>
`;
break;
}
return TextoEmail;
}
return router;
}
module.exports = routes;

View File

@ -0,0 +1,138 @@
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 exercises;`, res, req.originalUrl);
});
router.get('/types', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
FROM exercisetype
WHERE enabled = 1;`, res, req.originalUrl);
});
// router.get('/getExercise/:id', verifyJWT, (req, res) => {
// let id = req.params.id;
// execSQLQuery(`
// SELECT
// e.idexercises as 'exercise_id',
// e.description as 'exercise_desc',
// e.idexercisetype as 'exercise_type',
// eq.idexercisequestions as 'question_id',
// eq.content as question,
// ea.idexerciseanswers as 'answer_id',
// ea.content as answer
// FROM exercises e
// JOIN exercisequestions eq ON e.idexercises = eq.idexercises
// JOIN exerciseanswers ea ON eq.idexercisequestions = ea.idexercisequestions
// WHERE e.idexercises = ${id}
// ORDER BY eq.idexercisequestions, ea.idexerciseanswers ASC;`,
// res,
// req.originalUrl
// );
// })
router.get('/getExercise2/:idexercises', verifyJWT, (req, res) => {
const idexercises = parseInt(req.params.idexercises);
execSQLQuery(`SELECT
*
FROM exercises
WHERE idexercises = ${idexercises};`, res, req.originalUrl);
});
router.get('/:idexercises/getQuestions', verifyJWT, function (req, res, next) {
const idexercises = req.params.idexercises;
execSQLQuery(`SELECT
*
FROM exercisequestions
WHERE idexercises = ${idexercises};`, res, req.originalUrl);
});
router.get('/:idexercisequestions/getQuestionsById', verifyJWT, function (req, res, next) {
const idexercisequestions = parseInt(req.params.idexercisequestions);
execSQLQuery(`SELECT
*
FROM exercisequestions
WHERE idexercisequestions = ${idexercisequestions};`, res, req.originalUrl);
});
router.get('/getExercise/:idexercises', verifyJWT, function (req, res, next) {
const idexercises = parseInt(req.params.idexercises);
execSQLQuery(`SELECT
e.description,
e.enabled,
e.idexercises,
e.idexercisetype,
cc.idclasses
FROM exercises e
JOIN classescontent cc ON e.idexercises = cc.idexercises
WHERE e.idexercises = ${idexercises};`, res, req.originalUrl);
});
router.get('/:id/getExercises', verifyJWT, function (req, res, next) {
const idclasses = parseInt(req.params.idclasses);
execSQLQuery(`SELECT
*
FROM exercises
WHERE idclasses = ${idclasses};`, res, req.originalUrl);
});
router.post('/insert', verifyJWT, function (req, res) {
const description = req.body.description;
const idexercisetype = parseInt(req.body.idexercisetype);
const enabled = req.body.enabled ? 1 : 0;
execSQLQuery(`INSERT INTO exercises (idexercisetype, description, hasmedia, enabled)
VALUES (?, ?, 0, ?);`, res, req.originalUrl, [idexercisetype, description, enabled]);
});
router.patch('/update', verifyJWT, function (req, res) {
const idexercises = parseInt(req.body.idexercises);
const description = req.body.description;
const idexercisetype = parseInt(req.body.idexercisetype);
const enabled = req.body.enabled ? 1 : 0;
execSQLQuery(`UPDATE exercises SET
description = ?,
idexercisetype = ?,
enabled = ?
WHERE idexercises = ?;`, res, req.originalUrl, [description, idexercisetype, enabled, idexercises]);
});
router.get('/allExercises', (req, res) => {
execSQLQuery(`SELECT
*
FROM exercises;`, res, req.originalUrl);
});
router.get('/allExerciseQuestions', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
FROM exercisequestions;`, res, req.originalUrl);
});
router.get('/allExerciseAnswers', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
FROM exerciseanswers;`, res, req.originalUrl);
});
router.get('/allExerciseType', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
FROM exercisetype;`, res, req.originalUrl);
});
return router;
};
module.exports = routes;

View File

@ -0,0 +1,235 @@
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({
limit: '50mb',
extended: true
}));
router.use(bodyParser.json({
limit: '50mb',
extended: true
}));
var routes = function () {
router.get('/getAll/', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
FROM files;`, res, req.originalUrl);
});
router.get('/getFile/:idfiles', verifyJWT, (req, res) => {
const idfiles = parseInt(req.params.idfiles);
execSQLQuery(`SELECT
*
FROM files
WHERE idfiles = ${idfiles};`, res, req.originalUrl);
});
router.post('/insert', verifyJWT, (req, res) => {
const description = req.body.description;
const src = req.body.src;
const extension = req.body.extension;
execSQLQuery(`INSERT INTO files (description, src, extension)
VALUES (?, ?, ?);`, res, req.originalUrl, [description, src, extension]);
});
router.patch('/update', verifyJWT, (req, res) => {
const idfiles = req.body.idfiles;
const description = req.body.description;
const src = req.body.src;
const extension = req.body.extension;
execSQLQuery(`UPDATE files SET
description = ?,
src = ?,
extension = ?
WHERE idfiles = ?;`, res, req.originalUrl, [description, src, extension, idfiles]);
});
router.get('/delete/:idfiles', verifyJWT, (req, res) => {
const idfiles = req.params.idfiles;
mysqlConnection.query(`SELECT * FROM files where idfiles in (${idfiles});`, function (error, Arquivos, fields) {
mysqlConnection.query(`delete from files where idfiles in (${idfiles});`, function (error, results, fields) {
ExcluirArquivos(Arquivos, 0, function(Sucesso) {
res.send(Sucesso);
});
});
});
});
function ExcluirArquivos(Arquivos, Index, callback) {
if (Index < Arquivos.length) {
const fs = require('fs');
let dir = Variables('src_media') + Arquivos[Index]['src'].split('/')[3] + "/" + Arquivos[Index]['src'].split('/')[4];
if(fs.existsSync(dir)) {
fs.unlink(dir, function(err) {
Index++;
ExcluirArquivos(Arquivos, Index, callback);
});
}
else {
Index++;
ExcluirArquivos(Arquivos, Index, callback);
}
}
else {
callback(true);
}
}
router.post('/copy', 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') + 'files/' + 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);
})
}
});
});
// VIDEOS
router.get('/getAll1/', verifyJWT, (req, res) => {
execSQLQuery(`SELECT f.idfiles, f.description, f.src, f.extension, 'Arquivo' as type FROM files f;`, res, req.originalUrl);
})
router.get('/getAllVideos/', verifyJWT, (req, res) => {
execSQLQuery(`SELECT * FROM videos;`, res, req.originalUrl);
})
router.get('/getAllVideos1/', verifyJWT, (req, res) => {
execSQLQuery(`SELECT v.idvideos as idfiles, v.description, concat('https://myrobot.cdn.vooplayer.com/publish/', v.publishid) as src, '.mp4' as extension, 'Vídeo' as type FROM videos v;`, res, req.originalUrl);
})
router.get('/getVideo/:idvideos', verifyJWT, (req, res) => {
let idvideos = parseInt(req.params.idvideos);
execSQLQuery(`SELECT * FROM videos WHERE idvideos = ${idvideos};`, res, req.originalUrl);
})
router.post('/getVideoFiltrado', verifyJWT, (req, res) => {
const filtro = req.body.filtro;
execSQLQuery(`SELECT * FROM videos WHERE description LIKE "%${filtro}%";`, res, req.originalUrl);
})
router.post('/insertVideo', verifyJWT, (req, res) => {
const idvideos = req.body.idvideos;
const publishId = req.body.publishId;
const description = req.body.description;
execSQLQuery(`INSERT INTO videos(publishId, description) VALUES ('${publishId}','${description}');`, res, req.originalUrl);
})
router.patch('/updateVideo', verifyJWT, (req, res) => {
const idvideos = req.body.idvideos;
const publishId = req.body.publishId;
const description = req.body.description;
execSQLQuery(`UPDATE videos SET publishId = '${publishId}', description = '${description}' WHERE idvideos = ${idvideos};`,
res, req.originalUrl);
})
router.post('/CopiarBase64', verifyJWT, (req, res) => {
let form = new formidable.IncomingForm();
form.maxFileSize = 600 * 1024 * 1024;
form.parse(req, function(err, fields, files) {
var base64ToImage = require('base64-to-image');
const name = fields.name;
const ext = fields.ext.replace('.', '');
const base64 = fields.base64;
const ArrDir = name.split('/');
let Diretorio = "";
for (let i = 0; i < ArrDir.length; i++) {
if (i < ArrDir.length - 1)
Diretorio += ArrDir[i] + "/";
}
const ArrNome = ArrDir[ArrDir.length - 1].split('.');
let NomeArquivo = "";
for (let i = 0; i < ArrNome.length; i++) {
if (i < ArrNome.length - 1)
NomeArquivo += ArrNome[i] + ".";
}
NomeArquivo = NomeArquivo.substring(0, NomeArquivo.length - 1);
var ArquivoCopia = { 'fileName': NomeArquivo, 'type': 'jpg' };
if (base64ToImage(base64, Variables('src_media') + Diretorio, ArquivoCopia)) {
res.send(true);
}
else {
res.send(false);
}
});
});
router.post('/CopiaArquivos', 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 oldpath;
try {
oldpath = files.file.path;
}
catch(e) {
console.log(req.originalUrl + " error 500 - Não foi enviado o arquivo para upload no servidor: " + e);
res.send(false);
return;
}
const ArrDir = name.split('/');
let Diretorio = "";
for (let i = 0; i < ArrDir.length; i++) {
if (i < ArrDir.length - 1)
Diretorio += ArrDir[i] + "/";
}
var dirArquivo = Variables('src_media') + name;
var dirPasta = Variables('src_media') + Diretorio;
if (!fs.existsSync(dirPasta))
fs.mkdirSync(dirPasta);
if (fs.existsSync(dirArquivo)) {
fs.unlink(dirArquivo, function(err) {
//console.log(err);
fs.rename(oldpath, dirArquivo, function (err) {
console.log(err);
res.send(true);
console.log(req.originalUrl + " success 200");
});
});
}
else {
fs.rename(oldpath, dirArquivo, function (err) {
res.send(true);
console.log(req.originalUrl + " success 200");
});
}
});
});
return router;
};
module.exports = routes;

View File

@ -0,0 +1,476 @@
require('../connections/mysql-server');
require('../connections/sql-server');
require('../helpers/CheckToken');
require('../helpers/config');
const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
const formidable = require('formidable');
const fs = require('fs');
const { userInfo } = require('os');
router.use(bodyParser.urlencoded({
limit: '150mb',
extended: true
}));
router.use(bodyParser.json({
limit: '150mb',
extended: true
}));
var routes = function () {
router.get('/getVideos/:idFolder', verifyJWT, (req, res) => {
const idFolder = parseInt(req.params.idFolder);
execSQLQuery(`SELECT
*
FROM franchisee_media
WHERE franchisee_media.type = 'video' AND franchisee_media.folder_key = ${idFolder};`, res, req.originalUrl);
});
router.get('/getFiles/:idFolder/:userFor', verifyJWT, (req, res) => {
const idFolder = parseInt(req.params.idFolder);
const userFor = parseInt(req.params.userFor);
execSQLQuery(`SELECT
*
FROM franchisee_media
WHERE ((franchisee_media.type = 'file' OR franchisee_media.type = 'download'
OR franchisee_media.type = 'img') AND franchisee_media.folder_key = ${idFolder}) AND userFor = ${userFor}
ORDER BY description ASC;`, res, req.originalUrl);
});
router.get('/getAllFoldersV', verifyJWT, (req, res) => {
execSQLQuery(`select * from (
select
ff.idfranchisee_folder,
ff.folder_type,
ff.folder_description,
ff.folder_into
from franchisee_folders ff
where ff.folder_type = 'videos' and ff.folder_into = 0
union all
select
ff.idfranchisee_folder,
ff.folder_type,
concat(ff.folder_description, ' - (', ff2.folder_description, '/', ff.folder_description, ')') as 'folder_description',
ff.folder_into
from franchisee_folders ff
inner join franchisee_folders ff2 on ff2.idfranchisee_folder = ff.folder_into
where ff.folder_type = 'videos' and ff.folder_into > 0) R
order by R.folder_description asc`, res, req.originalUrl);
});
router.get('/getFoldersV', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
FROM franchisee_folders
WHERE folder_type = 'videos' AND folder_into = 0
order by folder_description asc;`, res, req.originalUrl);
});
router.get('/getFoldersV2/:idFolder', verifyJWT, (req, res) => {
const idFolder = parseInt(req.params.idFolder);
execSQLQuery(`SELECT
*
FROM franchisee_folders
WHERE folder_type = 'videos' AND folder_into = ${idFolder}
order by folder_description asc;`, res, req.originalUrl);
});
router.get('/getAllFoldersF/:userFor', verifyJWT, (req, res) => {
const userFor = parseInt(req.params.userFor);
execSQLQuery(`select * from (
select
ff.idfranchisee_folder,
ff.folder_type,
ff.folder_description,
ff.folder_into
from franchisee_folders ff
where ff.folder_type = 'files' and ff.folder_into = 0 and ff.userFor = ${userFor}
union all
select
ff.idfranchisee_folder,
ff.folder_type,
concat(ff.folder_description, ' - (', ff2.folder_description, '/', ff.folder_description, ')') as 'folder_description',
ff.folder_into
from franchisee_folders ff
inner join franchisee_folders ff2 on ff2.idfranchisee_folder = ff.folder_into
where ff.folder_type = 'files' and ff.folder_into > 0 and ff.userFor = ${userFor}) R
order by R.folder_description asc`, res, req.originalUrl);
});
router.get('/getFoldersF/:userFor', verifyJWT, (req, res) => {
const userFor = parseInt(req.params.userFor);
execSQLQuery(`
SELECT
*
FROM
franchisee_folders
WHERE
franchisee_folders.folder_type = 'files' AND franchisee_folders.folder_into = 0
AND franchisee_folders.userFor = ${userFor}
ORDER BY folder_description ASC;`,
res,
req.originalUrl
);})
router.get('/getFoldersF2/:idFolder/:userFor', verifyJWT, (req, res) => {
const idFolder = parseInt(req.params.idFolder);
const userFor = parseInt(req.params.userFor);
execSQLQuery(`SELECT
*
FROM franchisee_folders
WHERE folder_into = ${idFolder} AND folder_type != 'DESATIVADO' AND userFor = ${userFor}
ORDER BY folder_description ASC;`, res, req.originalUrl);
});
router.get('/Exclude/:idfranchisee_media', verifyJWT, (req, res) => {
const idfranchisee = parseInt(req.params.idfranchisee_media);
execSQLQuery(`
DELETE FROM
franchisee_media
WHERE
franchisee_media.idfranchisee_media = ${idfranchisee}`,
res,
req.originalUrl
);})
router.get('/Disable/:idfranchisee_media', verifyJWT, (req, res) => {
const idfranchisee = parseInt(req.params.idfranchisee_media);
execSQLQuery(`UPDATE franchisee_media SET type = 'DESATIVADO' WHERE idfranchisee_media = ${idfranchisee}`, res, req.originalUrl);
})
router.get('/ExcludeF/:idfranchisee_folder', verifyJWT, (req, res) => {
const idfranchisee = parseInt(req.params.idfranchisee_folder);
execSQLQuery(`
DELETE FROM
franchisee_folders
WHERE
idfranchisee_folder = ${idfranchisee}`,
res,
req.originalUrl
);})
router.get('/getAll', verifyJWT, (req, res) => {
execSQLQuery(`
SELECT
*
FROM
franchisee_media`,
res,
req.originalUrl
);
})
router.get('/getAllWithDescription', verifyJWT, (req, res) => {
execSQLQuery(`
SELECT
fm.idfranchisee_media,
fm.description,
fm.publishid,
fm.type,
fm.folder_key,
ff.folder_description
FROM
franchisee_media fm
INNER JOIN
franchisee_folders ff ON ff.idfranchisee_folder = fm.folder_key;`,
res,
req.originalUrl
);
})
router.get('/getAllF', verifyJWT, (req, res) => {
execSQLQuery(`
SELECT
*
FROM
franchisee_folders`,
res,
req.originalUrl
);
})
router.get('/getOne/:idfranchisee_media/:userFor', verifyJWT, (req, res) => {
const idfranchisee_media = parseInt(req.params.idfranchisee_media);
const userFor = parseInt(req.params.userFor);
execSQLQuery(`
SELECT
*
FROM
franchisee_media
WHERE
idfranchisee_media = ${idfranchisee_media} AND userFor = ${userFor}`,
res,
req.originalUrl
);
})
router.get('/getOneF/:idfranchisee_folder/:userFor', verifyJWT, (req, res) => {
const idfranchisee_folder = parseInt(req.params.idfranchisee_folder);
const userFor = parseInt(req.params.userFor);
execSQLQuery(`SELECT
*
FROM franchisee_folders
WHERE franchisee_folders.idfranchisee_folder = ${idfranchisee_folder}
AND franchisee_folders.userFor = ${userFor};`, res, req.originalUrl);
});
router.patch('/update', verifyJWT, (req, res) => {
const idfranchisee_media = req.body.idfranchisee_media;
const description = req.body.description;
const type = req.body.type;
const publishid = req.body.publishid;
const folder_key = req.body.folder_key;
const userFor = req.body.userFor;
execSQLQuery(`
UPDATE
franchisee_media
SET
description = "${description}",
publishid = '${publishid}',
type = '${type}',
folder_key = ${folder_key},
userFor = ${userFor}
WHERE
idfranchisee_media = ${idfranchisee_media}`,
res,
req.originalUrl
);
})
router.post('/insert', verifyJWT, (req, res) => {
const description = req.body.description;
const type = req.body.type;
const publishid = req.body.publishid;
const folder_key = req.body.folder_key;
const userFor = req.body.userFor;
execSQLQuery(`INSERT INTO franchisee_media (description, type, publishid, folder_key, userFor)
VALUES (?, ?, ?, ?, ?);`, res, req.originalUrl, [description, type, publishid, folder_key, userFor]);
});
router.post('/insertF', verifyJWT, (req, res) => {
const folder_type = req.body.folder_type;
const folder_description = req.body.folder_description;
const folder_into = req.body.folder_into;
const userFor = req.body.userFor;
execSQLQuery(`INSERT INTO franchisee_folders (folder_type, folder_description, folder_into, userFor)
VALUES (?, ?, ?, ?);`, res, req.originalUrl, [folder_type, folder_description, folder_into, userFor]);
});
router.post('/copy', verifyJWT, (req, res) => {
var base64ToImage = require('base64-to-image');
var id = req.body.id;
var backStr = req.body.back;
var backThumb = req.body.backThumb;
var backName = 'franch_' + id;
var backNameT = 'franchThumb_' + id;
var Objback = { 'fileName': backName, 'type': 'jpg' };
var ObjbackT = { 'fileName': backNameT, 'type': 'jpg' };
var path = Variables('src_media') + 'images/';
if(base64ToImage(backStr, path, Objback)){
if (base64ToImage(backThumb, path, ObjbackT)){
res.send(true);
}else{res.send(false);}
}else {res.send(false);}
});
router.post('/copy1', 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 id = fields.id;
var backThumb = fields.backThumb;
var dir = Variables('src_media') + 'images/';
var extension = files.back.name.toString();
var arrExt = extension.split('.');
extension = "." + arrExt[arrExt.length - 1];
console.log("name: " + id + " - dir: " + dir + " - extension: " + extension);
try {
fs.unlink(dir + "franch_" + id + extension, function(err) {});
}
catch(err) {
console.log("arquivo não existe");
}
var oldpath = files.back.path;
fs.rename(oldpath, dir + "franch_" + id + extension, function (err) {
if (err) {
res.send(false);
throw err;
}
else {
var base64ToImage = require('base64-to-image');
var ObjbackT = { 'fileName': 'franchThumb_' + id, 'type': 'jpg' };
if (base64ToImage(backThumb, dir, ObjbackT)) {
res.send(true);
}
else {
res.send(false);
}
}
});
});
});
router.post('/copyFile', (req, res) => {
var localPath = req.body.back;
var filetoupload = req.body.filetoupload;
var form = new formidable.IncomingForm();
console.log(localPath);
form.parse(req, function (_err, _fields, files) {
console.log("Entrou no parse");
var oldpath = localPath;
console.log(oldpath);
var newpath = Variables('src_media') + 'franchiseeZip/' + filetoupload.name;
console.log("EntrouCopy");
fs.rename(toString(oldpath), toString(newpath), function (err) {
console.log("EntrouCopy2");
if (err) throw err;
console.log("EntrouCopy3");
res.send(true);
});
});
/*} else {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<form action="fileupload" method="post" enctype="multipart/form-data">');
res.write('<input type="file" name="filetoupload"><br>');
res.write('<input type="submit">');
res.write('</form>');
return res.end();
}*/
});
router.post('/copyPdf', verifyJWT, (req, res) => {
var base64 = require('base64topdf');
var id = req.body.id;
var backStr = req.body.back;
var backName = 'franch_' + id;
var Objback = { 'fileName': backName, 'type': 'pdf' };
var path = Variables('src_media') + 'images/';
if(base64.base64Decode(backStr, backName.toString())){
res.send(true);
}else {res.send(false);}
});
router.post('/copyZip', verifyJWT, (req, res) => {
var unzip = require('unzip');
var fs = require('fs');
const file = req.body.file;
const name = req.body.name;
var dir = Variables('src_media') + 'franchiseeZip/' + name;
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir);
}
var path = dir + '/';
var data = file.replace(/^data:application\/\x-zip-compressed;base64,/, '');
//var data = file.replace(/^data:image\/\w+;base64,/, '');
fs.writeFile(path + name + '.zip', data, {encoding: 'base64'}, function(err){
setTimeout(() => {
console.log('Copiado com sucesso!');
res.send(true);
} , 3000);
});
});
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') + 'franchiseeZip/' + name + "/";
var extension = files.file.name.toString();
var arrExt = extension.split('.');
extension = "." + arrExt[arrExt.length - 1];
console.log("name: " + name + " - dir: " + dir + " - extension: " + extension);
if (!fs.existsSync(dir)) {
console.log("criar diretorio");
fs.mkdirSync(dir);
}
else {
try {
fs.unlink(dir + name + extension, function(err) {});
}
catch(err) {
console.log("arquivo não existe");
}
}
var oldpath = files.file.path;
fs.rename(oldpath, dir + name + extension, function (err) {
if (err) {
res.send(false);
throw err;
}
res.send(true);
});
});
});
router.patch('/updateF', verifyJWT, (req, res) => {
const idfranchisee_folder = req.body.idfranchisee_folder;
const folder_type = req.body.folder_type;
const folder_description = req.body.folder_description;
const folder_into = req.body.folder_into;
const userFor = req.body.userFor;
execSQLQuery(`UPDATE franchisee_folders SET
folder_type = ?,
folder_description = ?,
folder_into = ?,
userFor = ?
WHERE idfranchisee_folder = ?;`, res, req.originalUrl, [folder_type, folder_description, folder_into, userFor, idfranchisee_folder]);
});
router.get('/getNomesAlunos/:banco', (req, res) => {
const db = req.params.banco;
execSQLQuery2(`SELECT distinct
tt.IDMatricula,
cl.Nome
FROM ${db}TreinandosTurmas tt
INNER JOIN ${db}Clientes cl ON cl.IDCliente = tt.IDTreinando;`, res, req.originalUrl);
});
// LEADS
router.get('/getLeadsEventos', verifyJWT, (req, res) => {
execSQLQuery(`select
*
FROM leadseventos
ORDER BY descricao ASC;`, res, req.originalUrl);
});
router.get('/getLeadsSite/:idunits/:idleadseventos', verifyJWT, (req, res) => {
const idunits = parseInt(req.params.idunits);
const idleadseventos = parseInt(req.params.idleadseventos);
const SQLQuery = `select
ls.*,
un.unityname as 'unidade',
date_format(ls.insert_date, '%d/%m/%Y %H:%i') as 'data',
case when ls.update_date is not null then 'Sim' else 'Não' end as 'visto',
case when ls.contatado = 1 then 'Sim' else 'Não' end as 'cont'
FROM leadssite ls
inner join units un on un.idunits = ls.idunits
WHERE ${(idunits == 0) ? 'true' : 'ls.idunits = ' + idunits} and ls.idleadseventos = ${idleadseventos}
ORDER BY un.unityname asc, ls.nome ASC;`;
execSQLQuery(SQLQuery, res, req.originalUrl);
});
router.get('/updateVistoLead/:idleadssite', verifyJWT, (req, res) => {
const idleadssite = parseInt(req.params.idleadssite);
execSQLQuery(`update leadssite set update_date = now() where idleadssite = ${idleadssite};`, res, req.originalUrl);
});
router.get('/updateContatadoLead/:idleadssite', verifyJWT, (req, res) => {
const idleadssite = parseInt(req.params.idleadssite);
execSQLQuery(`update leadssite set contatado = 1 where idleadssite = ${idleadssite};`, res, req.originalUrl);
});
return router;
};
module.exports = routes;

View File

@ -0,0 +1,77 @@
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('/InserirFeriadosPadrao/:ano', verifyJWT, (req, res) => {
const Ano = parseInt(req.params.ano);
execSQLQuery(`insert into holidays (date, reason) values
('${Ano}-01-01', 'Ano Novo'),
('${Ano}-02-15', 'Carnaval'),
('${Ano}-02-16', 'Carnaval'),
('${Ano}-04-02', 'Paixão de Cristo'),
('${Ano}-04-21', 'Tiradentes'),
('${Ano}-05-01', 'Dia do Trabalho'),
('${Ano}-06-03', 'Corpus Christi'),
('${Ano}-09-07', 'Independência do Brasil'),
('${Ano}-10-12', 'Dia das Crianças'),
('${Ano}-11-02', 'Finados'),
('${Ano}-11-15', 'Proclamação da República'),
('${Ano}-12-25', 'Natal');`, res, req.originalUrl);
});
router.post('/InserirFeriado', verifyJWT, (req, res) => {
const reason = req.body.reason;
const date = req.body.date;
execSQLQuery(`INSERT INTO holidays (date, reason)
VALUES (?, ?);`, res, req.originalUrl, [date, reason]);
});
router.patch('/AtualizarFeriado', verifyJWT, (req, res) => {
const reason = req.body.reason;
const date = req.body.date;
execSQLQuery(`UPDATE holidays SET
date = ?,
reason = ?
WHERE date = ?;`, res, req.originalUrl, [date, reason, date]);
});
router.post('/getFeriado', verifyJWT, (req, res) => {
const date = req.body.date;
execSQLQuery(`SELECT
*
FROM holidays
WHERE date = "${date}";`, res, req.originalUrl);
});
router.get('/getAllFeriados', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
date_format(date, '%d/%m/%Y') as 'date',
date as 'cdate',
reason
FROM holidays
order by cdate asc;`, res, req.originalUrl);
});
router.get('/getMySQLinSQLServerFeriados', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
concat(date_format(date, '%Y-%m-%d'), ' 00:00:00.000') AS 'Data',
reason AS 'Motivo'
FROM holidays;`, res, req.originalUrl);
})
router.get('/getSQLServerFeriados/:db', verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(`SELECT * FROM ${db}DiasNaoLetivos;`, res, req.originalUrl);
})
return router;
}
module.exports = routes;

View File

@ -0,0 +1,84 @@
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('/getAllLeads/:idunits', verifyJWT, (req, res) => {
const idunits = parseInt(req.params.idunits);
execSQLQuery(`SELECT igl.*, date_format(igl.insert_date, '%d/%m/%Y %H:%i') as 'inscricao', un.unityname FROM g40_leads igl inner join units un on un.idunits = igl.idunits where ${(idunits > 0) ? 'igl.idunits = ' + idunits : 'true'};`, res, req.originalUrl);
});
router.post('/insertLead', (req, res) => {
const idunits = parseInt(req.body.idunits);
const nome = req.body.nome;
const email = req.body.email;
const cidade = req.body.cidade;
const celular = req.body.celular;
const idade = req.body.idade;
const instituicao = req.body.instituicao;
execSQLQuery(`INSERT INTO g40_leads (idunits, nome, email, cidade, celular, idade, instituicao) VALUES
(?, ?, ?, ?, ?, ?, ?);`, res, req.originalUrl, [idunits, nome, email, cidade, celular, idade, instituicao]);
});
router.patch('/updateLead', verifyJWT, (req, res) => {
const idg40_leads = parseInt(req.body.idg40_leads);
const idunits = parseInt(req.body.idunits);
const nome = req.body.nome;
const email = req.body.email;
const cidade = req.body.cidade;
const celular = req.body.celular;
const idade = req.body.idade;
const instituicao = req.body.instituicao;
execSQLQuery(`update g40_leads set
idunits = ?,
nome = ?,
email = ?,
cidade = ?,
celular = ?,
idade = ?,
instituicao = ?
where idg40_leads = ?;`, res, req.originalUrl, [idunits, nome, email, cidade, celular, idade, instituicao, idg40_leads]);
});
router.get('/getAllEmpresas/:idunits', verifyJWT, (req, res) => {
const idunits = parseInt(req.params.idunits);
execSQLQuery(`SELECT ige.*, date_format(ige.insert_date, '%d/%m/%Y %H:%i') as 'inscricao', un.unityname FROM g40_empresas ige inner join units un on un.idunits = ige.idunits where ${(idunits > 0) ? 'ige.idunits = ' + idunits : 'true'};`, res, req.originalUrl);
});
router.post('/insertEmpresa', (req, res) => {
const idunits = parseInt(req.body.idunits);
const nome = req.body.nome;
const empresa = req.body.empresa;
const email = req.body.email;
const telefone = req.body.telefone;
execSQLQuery(`INSERT INTO g40_empresas (idunits, nome, empresa, email, telefone) VALUES
(?, ?, ?, ?, ?);`, res, req.originalUrl, [idunits, nome, empresa, email, telefone]);
});
router.patch('/updateEmpresa', verifyJWT, (req, res) => {
const idg40_empresas = parseInt(req.params.idg40_empresas);
const idunits = parseInt(req.body.idunits);
const nome = req.body.nome;
const empresa = req.body.empresa;
const email = req.body.email;
const telefone = req.body.telefone;
execSQLQuery(`update g40_empresas set
idunits = ?,
nome = ?,
emrpesa = ?,
email = ?,
telefone = ?
where idg40_empresas = ?;`, res, req.originalUrl, [idunits, nome, empresa, email, telefone, idg40_empresas]);
});
return router;
};
module.exports = routes;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,100 @@
require('../connections/mysql-server');
require('../helpers/CheckToken');
require('../helpers/config');
const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
const { verify } = require('jsonwebtoken');
router.use(bodyParser.urlencoded({
limit: '10mb',
extended: true
}
));
router.use(bodyParser.json({
limit: '10mb',
extended: true
}));
var routes = function () {
router.get('/getAllListenRepeat', verifyJWT, (req, res) => {
execSQLQuery(`select * from zoelistenrepeat;`, res, req.originalUrl);
});
router.get('/getListenRepeat/:idzoelistenrepeat', verifyJWT, (req, res) => {
const idzoelistenrepeat = parseInt(req.params.idzoelistenrepeat);
execSQLQuery(`select * from zoelistenrepeat where idzoelistenrepeat = ${idzoelistenrepeat};`, res, req.originalUrl);
});
router.get('/getLRDetails/:idzoelistenrepeat', (req, res) => {
const idzoelistenrepeat = parseInt(req.params.idzoelistenrepeat);
execSQLQuery(`select
lr.idzoelistenrepeat,
lr.description,
lrp.phrase,
lrp.ordem,
lrp.hasmedia
from zoelistenrepeat lr
inner join zoelistenrepeatprhases lrp on lrp.idzoelistenrepeat = lr.idzoelistenrepeat
where lr.idzoelistenrepeat = ${idzoelistenrepeat}
order by lrp.ordem asc;`, res, req.originalUrl);
});
router.post('/InsertListenRepeat', verifyJWT, (req, res) => {
const idzoelistenrepeat = parseInt(req.body.idzoelistenrepeat);
const description = req.body.description;
execSQLQuery(`INSERT INTO zoelistenrepeat (description)
VALUES (?);`, res, req.originalUrl, [description]);
});
router.patch('/UpdateListenRepeat', verifyJWT, (req, res) => {
const idzoelistenrepeat = parseInt(req.body.idzoelistenrepeat);
const description = req.body.description;
execSQLQuery(`UPDATE zoelistenrepeat SET
description = ?
WHERE idzoelistenrepeat = ?;`, res, req.originalUrl, [description, idzoelistenrepeat]);
});
router.delete('/deleteListenRepeat/:idzoelistenrepeat', verifyJWT, (req, res) => {
const idzoelistenrepeat = parseInt(req.params.idzoelistenrepeat);
execSQLQuery(`delete from zoelistenrepeat
where idzoelistenrepeat = ${idzoelistenrepeat};`, res, req.originalUrl);
});
router.get('/getListenRepeatPhrases/:idzoelistenrepeat', verifyJWT, (req, res) => {
const idzoelistenrepeat = parseInt(req.params.idzoelistenrepeat);
execSQLQuery(`select * from zoelistenrepeatprhases where idzoelistenrepeat = ${idzoelistenrepeat};`, res, req.originalUrl);
});
router.post('/InsertListenRepeatPrhases', verifyJWT, (req, res) => {
const idzoelistenrepeatprhases = parseInt(req.body.idzoelistenrepeatprhases);
const idzoelistenrepeat = parseInt(req.body.idzoelistenrepeat);
const phrase = req.body.phrase;
const ordem = parseInt(req.body.ordem);
const hasmedia = req.body.hasmedia ? 1 : 0;
const idcharactersVoices = parseInt(req.body.idcharactersVoices);
const speed = req.body.speed;
execSQLQuery(`INSERT INTO zoelistenrepeatprhases (idzoelistenrepeat, phrase, ordem, hasmedia, idcharactersVoices, speed)
VALUES (?, ?, ?, ?, ?, ?);`, res, req.originalUrl, [idzoelistenrepeat, phrase, ordem, hasmedia, idcharactersVoices, speed]);
});
router.delete('/deleteListenRepeatPrhases/:idzoelistenrepeat', verifyJWT, (req, res) => {
const idzoelistenrepeat = parseInt(req.params.idzoelistenrepeat);
execSQLQuery(`delete from zoelistenrepeatprhases
where idzoelistenrepeat = ${idzoelistenrepeat};`, res, req.originalUrl);
});
router.get('/SalvarAudioSintetizado/:nome', verifyJWT, (req, res) => {
const NomeArquivo = req.params.nome;
const shell = require('shelljs');
shell.exec(`cp ${Variables("src_media")}/audiosZoe/sintetize.mp3 ${Variables("src_media")}/zoeGamesResources/LR/${NomeArquivo}.mp3`, function(Sucesso) {
res.send(true);
});
});
return router;
};
module.exports = routes;

View File

@ -0,0 +1,40 @@
require('../connections/mysql-server');
require('../helpers/helper');
require('../helpers/config');
const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
router.use(bodyParser.urlencoded({ extended: true }));
router.use(bodyParser.json());
//const helper = new Helpers();
require("dotenv-safe").load();
var jwt = require('jsonwebtoken');
var routes = function () {
router.get('/logout', function (req, res) {
res.status(200).send({ auth: false, token: null });
});
router.get('/checktoken', (req, res, next) => {
var token = req.params.tk;
if (!token) return res.status(401).send({ auth: false, message: 'Não foi enviado token' });
jwt.verify(token, process.env.SECRET, function (err, decoded) {
if (err) {
res.status(200).send({ response: 'fail' });
}
else {
req.idusers = decoded.id;
res.status(200).send({ response: 'success' });
}
});
})
return router;
}
module.exports = routes;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,119 @@
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('/getAllPermissoes', verifyJWT, (req, res) => {
execSQLQuery(`SELECT * from permissoes;`, res, req.originalUrl);
});
router.get('/getPermissoesUsuario/:idusers/:idusertype', verifyJWT, (req, res) => {
const idusers = parseInt(req.params.idusers);
const idusertype = parseInt(req.params.idusertype);
execSQLQuery(`select distinct * from (
select
pm.idusers, pm.idjanelas, jn.descricao, jn.title, jn.icon, jn.link, jn.home, jn.children
from permissoes pm
inner join janelas jn on jn.idjanelas = pm.idjanelas
inner join users us on us.idusers = pm.idusers
where pm.idusers = ${idusers}
union all
select
${idusers} as 'idusers', up.idjanelas, jn2.descricao, jn2.title, jn2.icon, jn2.link, jn2.home, jn2.children
from usertypepermissoes up
inner join janelas jn2 on jn2.idjanelas = up.idjanelas
where up.idusertype = ${idusertype}) R
order by R.children asc, R.title asc;`, res, req.originalUrl);
});
router.get('/getAllJanelas', verifyJWT, (req, res) => {
execSQLQuery(`SELECT * from janelas order by descricao asc;`, res, req.originalUrl);
});
router.post('/insertPermissoesTipoUsuario', verifyJWT, (req, res) => {
const Permissoes = req.body.ListaPermissoes;
let SQLInsert = `insert into usertypepermissoes (idusertype, idjanelas) values `;
for (let i = 0; i < Permissoes.length; i++) {
if (i > 0)
SQLInsert += `, `;
SQLInsert += `(${Permissoes[i].idusertype}, ${Permissoes[i].idjanelas})`;
}
const SQLDelete = `delete from usertypepermissoes where idusertype = ${Permissoes[0].idusertype};`;
mysqlConnection.query(SQLDelete, null, function (error, results, fields) {
execSQLQuery(SQLInsert, res, req.originalUrl);
});
});
router.post('/insertPermissoesUsuario', verifyJWT, (req, res) => {
const Permissoes = req.body.ListaPermissoes;
let SQLInsert = `insert into permissoes (idusers, idjanelas) values `;
for (let i = 0; i < Permissoes.length; i++) {
if (i > 0)
SQLInsert += `, `;
SQLInsert += `(${Permissoes[i].idusers}, ${Permissoes[i].idjanelas})`;
}
const SQLDelete = `delete from permissoes where idusers = ${Permissoes[0].idusers};`;
mysqlConnection.query(SQLDelete, null, function (error, results, fields) {
execSQLQuery(SQLInsert, res, req.originalUrl);
});
});
router.get('/insertAllPermissoesUsuario/:idusers', (req, res) => {
const idusers = parseInt(req.params.idusers);
mysqlConnection.query(`select * from janelas;`, null, function (error, resJanelas, fields) {
let SQLInsert = "insert into permissoes (idusers, idjanelas) values ";
for (let i = 0; i < resJanelas.length; i++) {
if (i > 0)
SQLInsert += `, `;
SQLInsert += `(${idusers}, ${resJanelas[i]['idjanelas']})`;
}
execSQLQuery(SQLInsert, res, req.originalUrl);
});
});
router.get('/insertAllPermissoesUsertype/:idusertype', (req, res) => {
const idusertype = parseInt(req.params.idusertype);
mysqlConnection.query(`select * from janelas;`, null, function (error, resJanelas, fields) {
let SQLInsert = "insert into usertypepermissoes (idusertype, idjanelas) values ";
for (let i = 0; i < resJanelas.length; i++) {
if (i > 0)
SQLInsert += `, `;
SQLInsert += `(${idusertype}, ${resJanelas[i]['idjanelas']})`;
}
execSQLQuery(SQLInsert, res, req.originalUrl);
});
});
router.post('/insertJanela', verifyJWT, (req, res) => {
const idjanelas = parseInt(req.body.idjanelas);
const descricao = req.body.descricao;
const title = req.body.title;
const icon = req.body.icon;
const link = req.body.link;
const home = req.body.home ? 1 : 0;
const children = req.body.children;
execSQLQuery(`insert into janelas (descricao, title, icon, link, home, children) values
(?, ?, ?, ?, ?, ?);`, res, req.originalUrl, [descricao, title, icon, link, home, children]);
});
router.patch('/updateJanela', verifyJWT, (req, res) => {
const idjanelas = parseInt(req.body.idjanelas);
const descricao = req.body.descricao;
const title = req.body.title;
const icon = req.body.icon;
const link = req.body.link;
const home = req.body.home ? 1 : 0;
const children = req.body.children;
execSQLQuery(`update janelas set descricao = ?, title = ?, icon = ?, link = ?, home = ?, children = ? where idjanelas = ?;`, res, req.originalUrl, [descricao, title, icon, link, home, children, idjanelas]);
});
return router;
};
module.exports = routes;

View File

@ -0,0 +1,180 @@
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 () {
//#region PRODUTOS - MATERIAIS
router.post('/insert', verifyJWT, (req, res) => {
const barcode = req.body.barcode;
const description = req.body.description;
const value = parseFloat(req.body.value);
const service = req.body.service ? 1 : 0;
const registerdate = req.body.registerdate;
const amountstock = req.body.amountstock;
const minstock = req.body.minstock;
const maxstock = req.body.maxstock;
const idealstock = req.body.idealstock;
const present = req.body.present ? 1 : 0;
const amountplotspresent = req.body.amountplotspresent ? 1 : 0;
const disabled = req.body.disabled ? 1 : 0;
execSQLQuery(`INSERT INTO products (barcode, description, value, service, registerdate, amountstock, minstock, maxstock, idealstock, present, amountplotspresent, disabled)
VALUES (?, ?, ?, ?, now(), ?, ?, ?, ?, ?, ?, ?);`, res, req.originalUrl, [barcode, description, value, service, amountstock, minstock, maxstock, idealstock, present, amountplotspresent, disabled]);
});
router.patch('/update', verifyJWT, (req, res) => {
const idproducts = req.body.idproducts;
const barcode = req.body.barcode;
const description = req.body.description;
const value = parseFloat(req.body.value);
const service = req.body.service ? 1 : 0;
const registerdate = req.body.registerdate;
const amountstock = req.body.amountstock;
const minstock = req.body.minstock;
const maxstock = req.body.maxstock;
const idealstock = req.body.idealstock;
const present = req.body.present ? 1 : 0;
const amountplotspresent = req.body.amountplotspresent ? 1 : 0;
const disabled = req.body.disabled ? 1 : 0;
execSQLQuery(`UPDATE products SET
barcode = ?,
description = ?,
value = ?,
service = ?,
amountstock = ?,
minstock = ?,
maxstock = ?,
idealstock = ?,
present = ?,
amountplotspresent = ?,
disabled = ?
WHERE idproducts = ?;`, res, req.originalUrl, [barcode, description, value, service, amountstock, minstock, maxstock, idealstock, present, amountplotspresent, disabled, idproducts]);
});
router.get('/getProduct/:idproducts', verifyJWT, (req, res) => {
const idproducts = parseInt(req.params.idproducts);
execSQLQuery(`SELECT
*
FROM products
WHERE idproducts = ${idproducts};`, res, req.originalUrl);
})
router.get('/list', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
idproducts,
barcode,
description,
concat('R$ ',format(value,2,'de_DE')) as value,
disabled
FROM products;`, res, req.originalUrl);
})
router.get('/getAll', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
FROM products;`, res, req.originalUrl);
})
router.get('/getMySQLinSQLServerProducts', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
idproducts AS 'IDProduto',
barcode AS 'Codigo',
description AS 'Descricao',
value AS 'Valor',
case when service = 0 then false else true end AS 'Servico',
registerdate AS 'DataCadastro',
amountstock AS 'QtdEstoque',
minstock AS 'QtdMinima',
maxstock AS 'QtdMaxima',
idealstock AS 'QtdIdeal',
present AS 'Brinde',
amountplotspresent AS 'qtdParcelasBrinde',
case when disabled = 1 then true else false end as 'Desativado'
FROM products;`, res, req.originalUrl);
})
router.get('/getSQLServerProducts/:db', verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(`SELECT * FROM ${db}Produtos;`, res, req.originalUrl);
})
router.patch('/disable', verifyJWT, (req, res) => {
const idproducts = parseInt(req.body.idproducts);
execSQLQuery(`
UPDATE products
SET disabled = not disabled
WHERE idproducts = ${idproducts}`,
res,
req.originalUrl
);
})
//#endregion
//#region PRODUTOS VENDAS
router.post('/InserirProdutovenda', verifyJWT, (req, res) => {
const description = req.body.description;
const disabled = req.body.disabled ? 1 : 0;
execSQLQuery(`INSERT INTO productsale (description, disabled)
VALUES (?, ?);`, res, req.originalUrl, [description, disabled]);
});
router.patch('/AtualizarProdutovenda', verifyJWT, (req, res) => {
const idproductsale = req.body.idproductsale;
const description = req.body.description;
const disabled = req.body.disabled ? 1 : 0;
execSQLQuery(`UPDATE productsale SET
description = ?,
disabled = ?
WHERE idproductsale = ?;`, res, req.originalUrl, [description, disabled, idproductsale]);
});
router.get('/getProductSale/:idproductsale', verifyJWT, (req, res) => {
const idproductsale = parseInt(req.params.idproductsale);
execSQLQuery(`SELECT
*
FROM productsale
WHERE idproductsale = ${idproductsale};`, res, req.originalUrl);
})
router.get('/getAllProductSale', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
FROM productsale;`, res, req.originalUrl);
})
router.get('/getMySQLinSQLServerProductSale', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
idproductsale AS 'IDProduto',
description AS 'Descricao',
case when disabled = 1 then true else false end as 'Desativado'
FROM productsale;`, res, req.originalUrl);
})
router.get('/getSQLServerProductSale/:db', verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(`SELECT * FROM ${db}ProdutosVendas;`, res, req.originalUrl);
})
router.patch('/disableProductSale', verifyJWT, (req, res) => {
const idproductsale = parseInt(req.body.idproductsale);
execSQLQuery(`UPDATE productsale
SET disabled = not disabled
WHERE idproductsale = ${idproductsale};`, res, req.originalUrl);
});
//#endregion
return router;
}
module.exports = routes;

189
controllers/qrController.js Normal file
View File

@ -0,0 +1,189 @@
require('../connections/mysql-server');
require('../helpers/CheckToken');
require('../helpers/config');
const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
router.use(bodyParser.urlencoded({
limit: '10mb',
extended: true
}
));
router.use(bodyParser.json({
limit: '10mb',
extended: true
}));
var routes = function () {
router.get('/listLotes', verifyJWT, (req, res) => {
execSQLQuery(`
SELECT
*
FROM
qrlotes`,
res,
req.originalUrl
);
})
router.get('/listQRcodes', verifyJWT, (req, res) => {
execSQLQuery(`
SELECT
*
FROM
qrcodes`,
res,
req.originalUrl
);
})
router.get('/listLotesByID/:id', verifyJWT, (req, res) => {
var id = req.params.id;
execSQLQuery(`
SELECT
*
FROM
qrlotes
WHERE
idqrlotes = ${id}`,
res,
req.originalUrl
);
})
router.get('/listQRcodesByAny/:field/:value', verifyJWT, (req, res) => {
var field = req.params.field;
var value = req.params.value;
execSQLQuery(`
SELECT
*
FROM
qrcodes
WHERE
${field} = '${value}'`,
res,
req.originalUrl
);
})
router.post('/insertLotes', verifyJWT, (req, res) => {
const qtdepack = req.body.qtdepack;
const date = req.body.date;
const description = req.body.description;
execSQLQuery(`INSERT INTO qrlotes(qtdepack, date, description) VALUES (${qtdepack},'${date}', "${description}");`,
res,
req.originalUrl
);
})
router.post('/insertQRcodes', verifyJWT, (req, res) => {
const idqrlotes = req.body.idqrlotes;
const idusers = req.body.idusers;
const key = req.body.key;
const ordem = req.body.ordem;
execSQLQuery(`
INSERT INTO qrcodes(idqrlotes, idusers, _key, ordem)
VALUES
(${idqrlotes},${idusers}, '${key}', ${ordem});`,
res,
req.originalUrl
);
})
router.patch('/updateLotes', verifyJWT, (req, res) => {
const idqrlotes = req.body.idqrlotes;
const qtdepack = req.body.qtdepack;
const date = req.body.date;
execSQLQuery(`UPDATE qrlotes SET qtdepack = ${qtdepack}, date = '${date}' WHERE idqrlotes = ${idqrlotes};`,
res,
req.originalUrl
);
})
router.patch('/updateQRcodes', verifyJWT, (req, res) => {
const idqrcodes = req.body.idqrcodes;
const idqrlotes = req.body.idqrlotes;
const idusers = req.body.idusers;
const key = req.body.key;
const ordem = req.body.ordem;
execSQLQuery(`
UPDATE qrcodes SET
idqrlotes = ${idqrlotes},
idusers = ${idusers},
_key = ${key},
ordem = ${ordem}
WHERE
idqrcodes = ${idqrcodes};`,
res,
req.originalUrl
);
});
router.post('/generateTxt', verifyJWT, (req, res) => {
var idqrlotes = req.body.idqrlotes;
var name = req.body.name;
var content = req.body.content;
var fs = require('fs');
var path = Variables('src_media') + "qrlotes/" + idqrlotes;
fs.mkdirSync(path);
fs.writeFile(path + "/" + name + ".txt", content, function (erro) {
if (erro) {
throw erro;
}
else {
res.send(true);
}
});
});
router.post('/save', verifyJWT, (req, res) => {
var base64ToImage = require('base64-to-image');
var fs = require('fs');
var img64 = req.body.src;
var idqrlotes = req.body.idqrlotes;
var numb = req.body.itens;
var Name = 'qr_' + idqrlotes + '_' + numb;
var Obj = {'fileName': Name, 'type':'jpg'};
var path = Variables('src_media') + "qrlotes/" + idqrlotes;
if(!fs.existsSync(path)) {
fs.mkdirSync(path);
}
path += '/';
if(base64ToImage(img64,path,Obj)) {
res.send(true)
}
else {
res.send(false);
}
//res.send("images uploaded with success!");
});
router.get('/downloadPack/:idqrlotes', verifyJWT, (req, res) => {
var idqrlotes = req.params.idqrlotes;
var path = Variables('src_media') + "qrlotes/" + idqrlotes;
var fs = require("fs");
if(!fs.existsSync(path + "/qrlote_" + idqrlotes + '.zip')) {
require('all-unpacker').pack(path + "/qrlote_" + idqrlotes + '.zip', {
targetDir: path + "/*",
}, function(err, files, text) {
if (err) return console.error(err);
if (files) console.log('files', files);
if (text) {
console.log('text', text);
console.log("compactado");
res.send(true) ;
};
});
}
else {
res.send(true);
}
});
return router;
};
module.exports = routes;

View File

@ -0,0 +1,80 @@
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('/:idexercisequestions/getAnswers', verifyJWT, function (req, res, next) {
const idexercisequestions = parseInt(req.params.idexercisequestions);
execSQLQuery(`SELECT
*
FROM exerciseanswers
WHERE idexercisequestions = ${idexercisequestions};`, res, req.originalUrl);
});
router.get('/getQuestionByExercise/:idexercises', verifyJWT, function (req, res, next) {
const idexercises = parseInt(req.params.idexercises);
execSQLQuery(`SELECT
*
FROM exercisequestions
WHERE idexercises = ${idexercises};`, res, req.originalUrl);
});
router.get('/getQuestion/:idexercises', verifyJWT, function (req, res, next) {
const idexercises = parseInt(req.params.idexercises);
execSQLQuery(`SELECT
*
FROM exercisequestions
WHERE idexercises = ${idexercises};`, res, req.originalUrl);
});
router.post('/insert', verifyJWT, (req, res) => {
const content = req.body.content;
const idexercises = parseInt(req.body.idexercises);
execSQLQuery(`INSERT INTO exercisequestions (idexercises, content)
VALUES (?, ?);`, res, req.originalUrl, [idexercises, content]);
});
router.patch('/update', verifyJWT, function (req, res) {
const idexercisequestions = parseInt(req.body.idexercisequestions);
const content = req.body.content;
const idexercises = parseInt(req.body.idexercises);
execSQLQuery(`UPDATE exercisequestions SET
content = ?,
idexercises = ?
WHERE idexercisequestions = ?;`, res, req.originalUrl, [content, idexercises, idexercisequestions]);
});
router.patch('/removerPerguntas', verifyJWT, function (req, res, next) {
let idexercisequestions = req.body.idexercisequestions;
let ids = idexercisequestions.split(',');
index1 = 0;
removeQuestion(ids, res);
});
return router;
};
index1 = 0;
function removeQuestion(ids, res) {
if (index1 < ids.length - 1) {
let sqlQuery = `UPDATE exercisequestions SET idexercises = null WHERE idexercisequestions = ${ids[index1]};`;
console.log(sqlQuery);
mysqlConnection.query(sqlQuery, function (error, results, fields) {
console.log("AnswerID " + ids[index1] + " removed");
index1++;
removeQuestion(ids, res);
});
}
else {
res.send("questions removed");
}
}
module.exports = routes;

View File

@ -0,0 +1,670 @@
require('../connections/mysql-server');
require('../connections/sql-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 () {
function CheckFiltros(Filtro, reference_db, callback) {
let Condicao1 = "";
let Condicao2 = "";
if (Filtro == 0) {
callback(Condicao1, Condicao2);
}
else if (Filtro == 1) {
Condicao1 = `where R.Cancelada = 'Sim'`;
callback(Condicao1, Condicao2);
}
else if (Filtro == 2) {
Condicao1 = `where R.Cancelada = 'Não'`;
callback(Condicao1, Condicao2);
}
else if (Filtro == 3) {
Condicao2 = `where T.Cursos = T.Concluidos`;
callback(Condicao1, Condicao2);
}
else if (Filtro == 4 || Filtro == 5) {
let MySQLQuery = `select distinct group_concat(sc.idusers) as 'Matriculas' from stepclass sc inner join units un on un.idunits = sc.idunits where un.reference_db = '${reference_db.replace('.dbo.', '')}';`;
mysqlConnection.query(MySQLQuery, function (error, Matriculas, fields) {
Condicao2 = `where T.Matricula ${(Filtro == 5) ? 'not' : ''} in (${Matriculas[0]['Matriculas']})`
callback(Condicao1, Condicao2);
});
}
}
function LoopSQLMatriculas(Unidades, Index, SQLServerQuery, DataInicial, DataFinal, Filtro, callback) {
if (Index < Unidades.length) {
CheckFiltros(Filtro, Unidades[Index], function(Condicao1, Condicao2) {
if (Index > 0) {
SQLServerQuery += `union all
`;
}
SQLServerQuery += `select * from (
select
R.Matricula, R.Aluno, R.Data, R.Unidade, R.ValorTotal, R.ValorPrimeira, R.Mensalidade, R.QTDParcela, R.Parcelas, R.ValorParcela, R.TotalMaterial, R.TotalSMaterial, R.TotalCMaterial, R.Cancelada,
count(R.IDCurso) as 'Cursos',
sum(case when R.Concluiu = 1 then 1 else 0 end) as 'Concluidos',
(select top 1 cu.NomeVersao from ${Unidades[Index]}TreinandosTurmas tt inner join ${Unidades[Index]}Cursos cu on cu.Codigo = tt.IDCurso and cu.IDTipoCurso in (3,5) where tt.IDMatricula = R.Matricula) as 'Curso'
from (
select distinct
tt.IDMatricula as 'Matricula',
cl.Nome as 'Aluno',
convert(varchar, mt.DataMatricula, 103) as 'Data',
'${Unidades[Index].replace('.dbo.', '').replace('SGP', '')}' as 'Unidade',
ROUND(mt.ValorTotal, 2) as 'ValorTotal',
ROUND(pm.ValorMatricula, 2) as 'ValorPrimeira',
ROUND(pm.ValorParcela, 2) as 'Mensalidade',
pm.QTDParcela,
A.Parcelas,
ROUND(A.ValorParcela, 2) as 'ValorParcela',
ROUND(A.Parcelas * A.ValorParcela, 2) as 'TotalMaterial',
ROUND(pm.QTDParcela * pm.ValorParcela, 2) as 'TotalSMaterial',
ROUND((pm.QTDParcela * pm.ValorParcela) + (A.Parcelas * A.ValorParcela), 2) as 'TotalCMaterial',
case when pr.TipoRequerimento = 'C' then 'Sim' else 'Não' end as 'Cancelada',
tt.Concluiu,
tt.IDCurso
from ${Unidades[Index]}TreinandosTurmas tt
inner join ${Unidades[Index]}Matriculas mt on mt.IDMatricula = tt.IDMatricula
inner join ${Unidades[Index]}Clientes cl on cl.IDCliente = tt.IDTreinando
inner join ${Unidades[Index]}PreMatricula pm on pm.IDPreMatricula = mt.IDPreMatricula
left join (select R.*, R.Parcelas * R.ValorParcela as 'TotalMaterial' from (select IDPreMatricula, count(*) as 'Parcelas', ValorParcela from ${Unidades[Index]}PreMatriculaFinanceiroMaterial group by IDPreMatricula, ValorParcela) R) A on A.IDPreMatricula = pm.IDPreMatricula
left join ${Unidades[Index]}PreRequerimento pr on pr.IDTreinando = tt.IDTreinando
where ${(!DataInicial || !DataFinal) ? '1=1' : "mt.DataMatricula between '" + DataInicial + "' and '" + DataFinal + "'"}) R
${Condicao1}
group by R.Matricula, R.Aluno, R.Data, R.Unidade, R.ValorTotal, R.ValorPrimeira, R.Mensalidade, R.QTDParcela, R.Parcelas, R.ValorParcela, R.TotalMaterial, R.TotalSMaterial, R.TotalCMaterial, R.Cancelada) T
${Condicao2}
`;
Index++;
LoopSQLMatriculas(Unidades, Index, SQLServerQuery, DataInicial, DataFinal, Filtro, callback);
});
}
else {
callback(SQLServerQuery);
}
}
router.post('/getMatriculas', verifyJWT, (req, res) => {
const Unidades = req.body.Unidades;
const DataInicial = req.body.DataInicial;
const DataFinal = req.body.DataFinal;
const Filtro = parseInt(req.body.Filtro);
LoopSQLMatriculas(Unidades, 0, "", DataInicial, DataFinal, Filtro, function(SQLServerQuery) {
SQLServerQuery += `order by T.Matricula asc;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
});
router.post('/getTickets', verifyJWT, (req, res) => {
const Unidades = req.body.Unidades;
const DataInicial = req.body.DataInicial;
const DataFinal = req.body.DataFinal;
let SQLServerQuery = ``;
for (let i = 0; i < Unidades.length; i++) {
if (i > 0) {
SQLServerQuery += `union all
`;
}
SQLServerQuery += `select A.Media, B.Moda, C.*, D.MediaMatricula from (
select
round(sum(pp.Valor) / count(pp.Valor), 2) as 'Media'
from ${Unidades[i]}PreMatriculaParcelas pp
inner join ${Unidades[i]}PreMatricula pm on pm.IDPreMatricula = pp.IDPreMatricula
inner join ${Unidades[i]}Matriculas mt on mt.IDPreMatricula = pm.IDPreMatricula
where pp.Material = 0 and ${(!DataInicial || !DataFinal) ? '1=1' : "mt.DataMatricula between '" + DataInicial + "' and '" + DataFinal + "'"}) A inner join (
select top 1
round(pp.Valor, 2) as 'Moda'
from ${Unidades[i]}PreMatriculaParcelas pp
inner join ${Unidades[i]}PreMatricula pm on pm.IDPreMatricula = pp.IDPreMatricula
inner join ${Unidades[i]}Matriculas mt on mt.IDPreMatricula = pm.IDPreMatricula
where pp.Material = 0 and ${(!DataInicial || !DataFinal) ? '1=1' : "mt.DataMatricula between '" + DataInicial + "' and '" + DataFinal + "'"}
group by pp.Valor
order by count(pp.Valor) desc) B on 1 = 1
inner join (
select
round(pp.Valor, 2) as 'Valor',
'${Unidades[i].replace('.dbo.', '').replace('SGP', '')}' as 'Unidade'
from ${Unidades[i]}PreMatriculaParcelas pp
inner join ${Unidades[i]}PreMatricula pm on pm.IDPreMatricula = pp.IDPreMatricula
inner join ${Unidades[i]}Matriculas mt on mt.IDPreMatricula = pm.IDPreMatricula
where pp.Material = 0 and ${(!DataInicial || !DataFinal) ? '1=1' : "mt.DataMatricula between '" + DataInicial + "' and '" + DataFinal + "'"}
) C on 1 = 1
inner join (
select
round(sum(pm.ValorMatricula) / count(pm.ValorMatricula), 2) as 'MediaMatricula'
from ${Unidades[i]}PreMatricula pm
inner join ${Unidades[i]}Matriculas mt on mt.IDPreMatricula = pm.IDPreMatricula
where ${(!DataInicial || !DataFinal) ? '1=1' : "mt.DataMatricula between '" + DataInicial + "' and '" + DataFinal + "'"}
) D on 1 = 1
`;
}
SQLServerQuery += `order by C.Unidade asc, C.Valor asc;`;
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.post('/getCancelamentos', verifyJWT, (req, res) => {
const Unidades = req.body.Unidades;
const DataInicial = req.body.DataInicial;
const DataFinal = req.body.DataFinal;
let SQLServerQuery = ``;
for (let i = 0; i < Unidades.length; i++) {
if (i > 0) {
SQLServerQuery += `union all
`;
}
SQLServerQuery += `select distinct
cl.Nome as 'Aluno',
pr.IDMatricula as 'Matricula',
convert(varchar, pr.Data, 103) as 'Data',
mv.DescricaoMotivo as 'Motivo',
pr.DescricaoMotivo,
'${Unidades[i].replace('.dbo.', '').replace('SGP', '')}' as 'Unidade'
from ${Unidades[i]}PreRequerimento pr
inner join ${Unidades[i]}TreinandosTurmas tt on tt.IDTreinando = pr.IDTreinando
inner join ${Unidades[i]}Clientes cl on cl.IDCliente = pr.IDTreinando
inner join ${Unidades[i]}Motivos mv on mv.IDMotivo = pr.IDMotivo
where pr.TipoRequerimento = 'C' and ${(!DataInicial || !DataFinal) ? '1=1' : "pr.Data between '" + DataInicial + "' and '" + DataFinal + "'"}
`;
}
SQLServerQuery += `order by Unidade asc;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.post('/getVisitas', verifyJWT, (req, res) => {
const Unidades = req.body.Unidades;
const DataInicial = req.body.DataInicial;
const DataFinal = req.body.DataFinal;
let SQLServerQuery = ``;
for (let i = 0; i < Unidades.length; i++) {
if (i > 0) {
SQLServerQuery += `union all
`;
}
SQLServerQuery += `select distinct
ra.Descricao as 'Resultado',
mt.IDMatricula,
fa.Descricao as 'FormaAtendimento',
ve.Descricao as 'Divulgacao',
pv.Descricao as 'Curso',
fu.Nome as 'Funcionario',
ca.Nome as 'Cliente',
convert(varchar, ca.Data, 103) + ' ' + convert(varchar, ca.Hora, 8) as 'Data',
'${Unidades[i].replace('.dbo.', '').replace('SGP', '')}' as 'Unidade'
from ${Unidades[i]}ControleAtendimento ca
inner join ${Unidades[i]}FormasAtendimento fa on fa.IDFormaAtendimento = ca.IDFormaAtendimento
inner join ${Unidades[i]}Veiculos ve on ve.IDVeiculo = ca.IDVeiculo
left join ${Unidades[i]}ProdutosVendas pv on pv.IDProduto = ca.IDProduto
inner join ${Unidades[i]}Funcionarios fu on fu.IDFuncionario = ca.IDFuncionario
left join ${Unidades[i]}Atendimentos at on at.IdAtendimento = ca.IDAtendimento
left join ${Unidades[i]}ResultadosAtendimento ra on ra.IDResultadoAtendimento = at.IDResultadoAtendimento
left join ${Unidades[i]}Matriculas mt on (mt.IDAtendimento + 1) = at.IdAtendimento
where ${(!DataInicial || !DataFinal) ? '1=1' : "ca.Data between '" + DataInicial + "' and '" + DataFinal + "'"}
`;
}
SQLServerQuery += `order by Unidade asc;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.post('/getAlunosIrregulares', verifyJWT, (req, res) => {
const Unidades = req.body.Unidades;
let SQLServerQuery = ``;
for (let i = 0; i < Unidades.length; i++) {
if (i > 0) {
SQLServerQuery += `union all
`;
}
SQLServerQuery += `
select distinct
mt.IDMatricula as 'Matricula',
c.Nome,
case when tt.Faltoso = 0 then 'Não' else 'Sim' end as 'Faltoso',
case when tt.Desistente = 0 then 'Não' else 'Sim' end as 'Desistente',
case when tt.Concluiu = 0 then 'Não' else 'Sim' end as 'Concluiu',
'${Unidades[i].replace('.dbo.', '').replace('SGP', '')}' as 'Unidade'
from ${Unidades[i]}MatriculasTreinandos mt
inner join ${Unidades[i]}Clientes c ON mt.IDTreinando = c.IDCliente
inner join ${Unidades[i]}TreinandosTurmas tt on tt.IDTreinando = mt.IDTreinando
where tt.Faltoso = 1 or tt.Concluiu = 1 or tt.Desistente = 1
`;
}
SQLServerQuery += `order by Unidade asc;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.get('/getAlunosDesativados', verifyJWT, (req, res) => {
execSQLQuery(`select
ad.idusers as 'Matricula',
ad.idunits,
un.unityname as 'Unidade',
ad.desativado,
case when ad.desativado = 1 then 'Sim' else 'Não' end as 'DesativadoT'
from alunosdesativados ad
inner join units un on un.idunits = ad.idunits;`, res, req.originalUrl);
});
router.get('/getAlunosDesativadosP', verifyJWT, (req, res) => {
execSQLQuery(`select
uh.idusers as 'Matricula',
uh.idunits,
un.unityname as 'Unidade',
uh.disabled as 'desativado',
case when uh.disabled = 1 then 'Sim' else 'Não' end as 'DesativadoT'
from usershomework uh
inner join units un on un.idunits = uh.idunits;`, res, req.originalUrl);
});
router.post('/getAlunosCursos', verifyJWT, (req, res) => {
const Unidades = req.body.Unidades;
const DataInicial = req.body.DataInicial;
const DataFinal = req.body.DataFinal;
let SQLServerQuery = ``;
for (let i = 0; i < Unidades.length; i++) {
if (i > 0) {
SQLServerQuery += `union all
`;
}
SQLServerQuery += `select
S.Curso,
S.Alunos,
S.Unidade,
round((convert(decimal,S.Alunos, 2) / S.Total) * 100, 2) as 'Porcentagem'
from (
select distinct
co.Codigo as 'IDCurso',
co.NomeVersao as 'Curso',
count(tt.IDCurso) as 'Alunos',
'${Unidades[i].replace('.dbo.', '').replace('SGP', '')}' as 'Unidade',
(select sum(T.Alunos) as 'Total' from (
select distinct
co.Codigo as 'IDCurso',
count(tt.IDCurso) as 'Alunos'
from ${Unidades[i]}TreinandosTurmas tt
inner join ${Unidades[i]}Cursos co on co.Codigo = tt.IDCurso and co.IDTipoCurso in (3,5)
inner join ${Unidades[i]}Matriculas ma on ma.IDMatricula = tt.IDMatricula and ma.DataMatricula >= '${DataInicial}' and ma.DataMatricula <= '${DataFinal}'
group by co.NomeVersao, co.Codigo) T) as 'Total'
from ${Unidades[i]}TreinandosTurmas tt
inner join ${Unidades[i]}Cursos co on co.Codigo = tt.IDCurso and co.IDTipoCurso in (3,5)
inner join ${Unidades[i]}Matriculas ma on ma.IDMatricula = tt.IDMatricula and ma.DataMatricula >= '${DataInicial}' and ma.DataMatricula <= '${DataFinal}'
group by co.NomeVersao, co.Codigo) S
`;
}
SQLServerQuery += `order by Unidade asc;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.post('/getAlunosAtivos', (req, res) => {
let Unidades = req.body.Unidades;
const CruzaMySQL = req.body.cruzamysql;
const Cancelada = req.body.cancelada ? 1 : 0;
const Suspensa = req.body.suspensa ? 1 : 0;
const Desistente = req.body.desistente ? 1 : 0;
const Faltoso = req.body.faltoso ? 1 : 0;
const Concluiu = req.body.concluiu ? 1 : 0;
const DataInicial = req.body.DataInicial;
const DataFinal = req.body.DataFinal;
let NovaUnidades = [];
for (let i = 0; i < Unidades.length; i++) {
NovaUnidades.push({"db": Unidades[i], "TabelaDatas": [], "TabelaSQL": "(select * from ("});
}
GetUltimaAulaMatriculas(0, NovaUnidades, function(newUnidades) {
let SQLServerQuery = ``;
for (let i = 0; i < Unidades.length; i++) {
if (i > 0) {
SQLServerQuery += `union all
`;
}
if (!CruzaMySQL) {
SQLServerQuery += `select ROW_NUMBER() OVER(ORDER BY GG.Unidade ASC, GG.Matricula ASC) AS 'N', * from (
select distinct
T.Unidade,
T.IDMatricula as 'Matricula',
T.Nome,
T.Responsavel,
T.Endereco,
T.Fone,
T.UltimaData
from (
select
'${NovaUnidades[i]['db'].replace('.dbo.', '').replace('SGP', '')}' as 'Unidade',
*,
case when R.CH_Consumida >= R.CargaHorariaTotal then 1 else 0 end as 'Concluiu'
from (
select
tt.IDMatricula,
tt.IDTreinando,
tt.IDCurso,
tu.IdTurma,
(select re.Nome from ${NovaUnidades[i]['db']}Clientes re where re.IDCliente = mt.IDClienteResponsavel) as 'Responsavel',
cl.Endereco,
case
when cl.Celular != '' then cl.Celular
when cl.FoneResidencial != '' then cl.FoneResidencial
when cl.FoneRecado != '' then cl.FoneRecado
when cl.FoneComercial != '' then cl.FoneComercial
end as 'Fone',
cl.Nome,
tu.Codigo,
tu.DataInicio,
(select top(1) tc.Data from ${NovaUnidades[i]['db']}TurmasCalendario tc where tc.IdTurma = tt.CodigoTurma and tc.CodigoCurso = tt.IDCurso order by tc.IdTurmasCalendario asc) as 'PrimeiraAula',
tu.DataTermino,
(select top(1) tc.Data from ${NovaUnidades[i]['db']}TurmasCalendario tc where tc.IdTurma = tt.CodigoTurma and tc.CodigoCurso = tt.IDCurso order by tc.IdTurmasCalendario desc) as 'UltimaAula',
cu.CH_Individual,
(select (count(*) * 2) from ${NovaUnidades[i]['db']}Chamadas ch where ch.IDTurma = tt.CodigoTurma and ch. IDCurso = tt.IDCurso) as 'CH_Consumida',
(select top(1) ch.Data from ${NovaUnidades[i]['db']}Chamadas ch where ch.IDTurma = tt.CodigoTurma and ch. IDCurso = tt.IDCurso order by ch.IDChamadas desc) as 'UltimaChamada',
H_${i}.UltimaData,
case when pr.IDPreRequerimento is not null then 1 else 0 end as 'Trancada',
tt.Desistente,
tt.Faltoso,
tu.Cancelada,
tu.Suspensa,
tu.CargaHorariaTotal,
mt.DataMatricula
from ${NovaUnidades[i]['db']}TreinandosTurmas tt
inner join ${NovaUnidades[i]['db']}Turmas tu on tu.IdTurma = tt.CodigoTurma
inner join ${NovaUnidades[i]['db']}Cursos cu on cu.Codigo = tt.IDCurso
inner join ${NovaUnidades[i]['db']}Clientes cl on cl.IDCliente = tt.IDTreinando
inner join ${NovaUnidades[i]['db']}Matriculas mt on mt.IDMatricula = tt.IDMatricula
left join ${NovaUnidades[i]['db']}PreRequerimento pr on pr.IDMatricula = tt.IDMatricula and pr.IDTurma = tt. CodigoTurma and pr.TipoRequerimento = 'T'
left join ${NovaUnidades[i]['TabelaSQL']} on H_${i}.Matricula = tt.IDMatricula) R
) T
where (T.Cancelada = ${Cancelada} and T.Suspensa = ${Suspensa} and T.Desistente = ${Desistente} and T.Faltoso = ${Faltoso} and T.Concluiu = ${Concluiu} and T.DataMatricula < '${DataFinal}') or
T.UltimaData between '${DataInicial}' and '${DataFinal}'
) GG
`;
}
else {
SQLServerQuery += `select ROW_NUMBER() OVER(ORDER BY GG.Unidade ASC, GG.Matricula ASC) AS 'N', * from (
select distinct
T.Unidade,
T.IDMatricula as 'Matricula',
T.Nome,
T.Responsavel,
T.Endereco,
T.Fone
from (
select
'${NovaUnidades[i]['db'].replace('.dbo.', '').replace('SGP', '')}' as 'Unidade',
*,
case when R.CH_Sistema >= R.CargaHorariaTotal then 1 else 0 end as 'Concluiu'
from (
select
tt.IDMatricula,
tt.IDTreinando,
tt.IDCurso,
tu.IdTurma,
(select re.Nome from ${NovaUnidades[i]['db']}Clientes re where re.IDCliente = mt.IDClienteResponsavel) as 'Responsavel',
cl.Endereco,
case
when cl.Celular != '' then cl.Celular
when cl.FoneResidencial != '' then cl.FoneResidencial
when cl.FoneRecado != '' then cl.FoneRecado
when cl.FoneComercial != '' then cl.FoneComercial
end as 'Fone',
cl.Nome,
tu.Codigo,
tu.DataInicio,
(select top(1) tc.Data from ${NovaUnidades[i]['db']}TurmasCalendario tc where tc.IdTurma = tt.CodigoTurma and tc.CodigoCurso = tt.IDCurso order by tc.IdTurmasCalendario asc) as 'PrimeiraAula',
tu.DataTermino,
(select top(1) tc.Data from ${NovaUnidades[i]['db']}TurmasCalendario tc where tc.IdTurma = tt.CodigoTurma and tc.CodigoCurso = tt.IDCurso order by tc.IdTurmasCalendario desc) as 'UltimaAula',
cu.CH_Individual,
(select (count(*) * 2) from ${NovaUnidades[i]['db']}Chamadas ch where ch.IDTurma = tt.CodigoTurma and ch. IDCurso = tt.IDCurso) as 'CH_Consumida',
(select top(1) ch.Data from ${NovaUnidades[i]['db']}Chamadas ch where ch.IDTurma = tt.CodigoTurma and ch. IDCurso = tt.IDCurso order by ch.IDChamadas desc) as 'UltimaChamada',
H_${i}.UltimaData,
H_${i}.PrimeiraData,
H_${i}.CH_Sistema,
case when pr.IDPreRequerimento is not null then 1 else 0 end as 'Trancada',
tt.Desistente,
tt.Faltoso,
tu.Cancelada,
tu.Suspensa,
tu.CargaHorariaTotal,
mt.DataMatricula
from ${NovaUnidades[i]['db']}TreinandosTurmas tt
left join ${NovaUnidades[i]['db']}Turmas tu on tu.IdTurma = tt.CodigoTurma
inner join ${NovaUnidades[i]['db']}Cursos cu on cu.Codigo = tt.IDCurso
left join ${NovaUnidades[i]['db']}ProgramaTreinamentoCursos pc on pc.CodigoCurso = cu.Codigo
left join ${NovaUnidades[i]['db']}ProgramaTreinamento pt on pt.Codigo = pc.Codigo and pt.Desativado = 0
inner join ${NovaUnidades[i]['db']}Clientes cl on cl.IDCliente = tt.IDTreinando
left join ${NovaUnidades[i]['db']}Matriculas mt on mt.IDMatricula = tt.IDMatricula
left join ${NovaUnidades[i]['db']}PreRequerimento pr on pr.IDMatricula = tt.IDMatricula and pr.IDTurma = tt. CodigoTurma and pr.TipoRequerimento = 'T'
left join ${NovaUnidades[i]['TabelaSQL']} on H_${i}.Matricula = tt.IDMatricula) R
) T
where (T.Cancelada = ${Cancelada} and T.Suspensa = ${Suspensa} and T.Desistente = ${Desistente} and T.Faltoso = ${Faltoso} and T.Concluiu = ${Concluiu} and T.DataMatricula < '${DataFinal}')
${(Concluiu == 1) ? `` : `or ((T.PrimeiraData <= '${DataInicial}' and T.UltimaData >= '${DataFinal}') or
(T.PrimeiraData between '${DataInicial}' and '${DataFinal}') or
(T.UltimaData between '${DataInicial}' and '${DataFinal}') or
(T.PrimeiraData between '${DataInicial}' and '${DataFinal}' and T.UltimaData >= '${DataFinal}') or
(T.UltimaData between '${DataInicial}' and '${DataFinal}' and T.PrimeiraData <= '${DataInicial}')
)`}) GG
`;
}
}
SQLServerQuery += `order by GG.Unidade asc, GG.Matricula asc;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
});
function GetUltimaAulaMatriculas(Index, Unidades, callback) {
if (Index < Unidades.length) {
let SQLQuery = `select
sc.idusers,
max(date_format(sc.insert_date, '%Y-%m-%d')) as 'UltimaAula'
from stepclass sc
inner join units un on un.idunits = sc.idunits
where un.reference_db = '${Unidades[Index]['db'].replace('.dbo.', '')}'
group by sc.idusers;`;
let newSQLQuery = `select
sc.idusers,
tc.idtraineeprogram,
(count(sc.insert_date) * 2) as 'CH_Consumida',
min(date_format(sc.insert_date, '%Y-%m-%d')) as 'PrimeiraAula',
max(date_format(sc.insert_date, '%Y-%m-%d')) as 'UltimaAula'
from stepclass sc
inner join classes cl on cl.idclasses = sc.idclasses
inner join traineeprogramcourses tc on tc.idcourses = cl.idcourses
inner join traineeprogram tp on tp.idtraineeprogram = tc.idtraineeprogram and tp.disabled = 0
inner join units un on un.idunits = sc.idunits
where un.reference_db = '${Unidades[Index]['db'].replace('.dbo.', '')}'
group by sc.idusers, tc.idtraineeprogram;`;
mysqlConnection.query(newSQLQuery, function (error, Datas, fields) {
Unidades[Index]['TabelaDatas'] = Datas;
for (let i = 0; i < Datas.length; i++) {
if (i > 0)
Unidades[Index]['TabelaSQL'] += `union all `;
Unidades[Index]['TabelaSQL'] += `select '${Datas[i]['idusers']}' as 'Matricula', '${Datas[i]['PrimeiraAula']}' as 'PrimeiraData', '${Datas[i]['UltimaAula']}' as 'UltimaData', '${Datas[i]['idtraineeprogram']}' as 'ProgramaTreinamento', '${Datas[i]['CH_Consumida']}' as 'CH_Sistema' `;
}
if (Datas.length == 0) {
Unidades[Index]['TabelaSQL'] += `select '' as 'Matricula', '' as 'PrimeiraData', '' as 'UltimaData', '' as 'ProgramaTreinamento', '' as 'CH_Sistema'`;
}
Unidades[Index]['TabelaSQL'] += `) G_${Index}) H_${Index}`;
Index++;
GetUltimaAulaMatriculas(Index, Unidades, callback);
});
}
else {
callback(Unidades);
}
}
router.post('/getContasReceber', verifyJWT, (req, res) => {
const Unidades = req.body.Unidades;
const DataInicial = req.body.DataInicial;
const DataFinal = req.body.DataFinal;
LoopContasReceber(0, Unidades, DataInicial, DataFinal, [], function(Resultados) {
res.send({ "status": 200, "error": null, "response": Resultados });
});
//SQLServerQuery += `order by Unidade asc;`;
//console.log(SQLServerQuery);
//execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
function LoopContasReceber(Index, Unidades, DataInicial, DataFinal, Resultados, callback) {
if (Index < Unidades.length) {
sqlServerConnection.request().query(`exec ${Unidades[Index]}proc_InicializaRelAtrasadas '${DataInicial}','${DataFinal}',0,1,0,0,'G',0,'';`, function (error, results, fields) {
for (let i = 0; i < results['recordsets'][0].length; i++) {
results['recordsets'][0][i]['Unidade'] = Unidades[Index].split('.dbo.')[0].replace('SGP', '');
Resultados.push(results['recordsets'][0][i]);
}
Index++;
LoopContasReceber(Index, Unidades, DataInicial, DataFinal, Resultados, callback);
});
}
else {
callback(Resultados);
}
}
router.post('/getParcelasAtrasadas', verifyJWT, (req, res) => {
const Unidade = req.body.Unidade;
const IDMatricula = req.body.IDMatricula;
const IDCliente = req.body.IDCliente;
let SQLServerQuery = `exec ${Unidade}proc_PesquisaParcelasAtrasadas ${IDMatricula},${IDCliente},3, .02, .0003;`;
//SQLServerQuery += `order by Unidade asc;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.post('/getHistoricoFinanceiro', verifyJWT, (req, res) => {
const Unidade = req.body.Unidade;
const IDMatricula = req.body.IDMatricula;
let SQLServerQuery = `exec ${Unidade}proc_ContasReceberHistorico .02, .0003,3,${IDMatricula};`;
//SQLServerQuery += `order by Unidade asc;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.post('/InserirCobranca', verifyJWT, (req, res) => {
const Unidade = req.body.Unidade;
const IDMatricula = req.body.IDMatricula;
const IDFuncionario = req.body.IDFuncionario;
const DataStr = new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '').split(" ")[0];
const Data = DataStr.split('-')[0] + "-" + DataStr.split('-')[1] + "-" + DataStr.split('-')[2];
const Hora = new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '').split(" ")[1];
const Protestado = req.body.Protestado ? 1 : 0;
const Observacao = req.body.Observacao;
const IDTipoRequisicao = req.body.IDTipoRequisicao;
const IDDepartamento = req.body.IDDepartamento;
let SQLServerQuery = `exec ${Unidade}proc_InserirCobranca ${IDMatricula},${IDFuncionario},'${Data}','${Hora}',${Protestado},'${Observacao}',${IDTipoRequisicao},${IDDepartamento};`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.get('/getListaFuncionarios/:db', verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(`select IDFuncionario, Nome from ${db}Funcionarios;`, res, req.originalUrl);
});
router.get('/getHistoricoCobrancas/:db/:IDMatricula', verifyJWT, (req, res) => {
const db = req.params.db;
const IDMatricula = req.params.IDMatricula;
execSQLQuery2(`exec ${db}proc_HistoricoGeral ${IDMatricula};`, res, req.originalUrl);
});
router.get('/verificaAGendamento/:db/:IDMatricula', verifyJWT, (req, res) => {
const db = req.params.db;
const IDMatricula = req.params.IDMatricula;
execSQLQuery2(`exec ${db}proc_VerificaAgendamentoCobranca ${IDMatricula};`, res, req.originalUrl);
});
router.post('/InserirAgendamento', verifyJWT, (req, res) => {
const Unidade = req.body.Unidade;
const IDMatricula = req.body.IDMatricula;
const DataAgendamento = req.body.DataAgendamento;
let SQLServerQuery = `exec ${Unidade}proc_InserirAgendamentoCobranca ${IDMatricula},'${DataAgendamento}',1;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.patch('/AtualizarDadosCliente', verifyJWT, (req, res) => {
const Unidade = req.body.Unidade;
const IDCliente = req.body.Cliente;
const CEP = req.body.CEP;
const Endereco = req.body.Endereco;
const Bairro = req.body.Bairro;
const Cidade = req.body.Cidade;
const UF = req.body.UF;
const Celular = req.body.Celular;
const FoneComercial = req.body.FoneComercial;
const FoneResidencial = req.body.FoneResidencial;
const FoneRecado = req.body.FoneRecado;
let SQLServerQuery = `update SGP${Unidade}.dbo.Clientes set
CEP = '${CEP}',
Endereco = '${Endereco}',
Bairro = '${Bairro}',
Cidade = '${Cidade}',
UF = '${UF}',
Celular = '${Celular}',
FoneComercial = '${FoneComercial}',
FoneResidencial = '${FoneResidencial}',
FoneRecado = '${FoneRecado}'
where IDCliente = ${IDCliente};`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.post('/getAgendamentosCobranca', verifyJWT, (req, res) => {
const Unidades = req.body.Unidades;
const DataInicial = req.body.DataInicial;
const DataFinal = req.body.DataFinal;
let SQLServerQuery = ``;
for (let i = 0; i < Unidades.length; i++) {
if (i > 0) {
SQLServerQuery += `union all
`;
}
SQLServerQuery += `select
'${Unidades[i].replace('.dbo.', '').replace('SGP', '')}' as 'Unidade',
cb.IDCobranca,
ac.IDAgendamentoCobranca,
cb.IDMatricula,
cl.Nome as 'Cliente',
cl.Celular,
convert(varchar, cb.Data, 103) + ' ' + convert(varchar, cb.Hora, 24) as 'Data',
convert(varchar, ac.DataAgendamento, 103) as 'DataAgendamento',
cb.Observacao
from ${Unidades[i]}Cobranca cb
inner join ${Unidades[i]}AgendamentoCobranca ac on ac.IDCobranca = cb.IDCobranca
inner join ${Unidades[i]}Matriculas mt on mt.IDMatricula = cb.IDMatricula
inner join ${Unidades[i]}Clientes cl on cl.IDCliente = mt.IDClienteResponsavel
where ${(!DataInicial || !DataFinal) ? '1=1' : "ac.DataAgendamento between '" + DataInicial + "' and '" + DataFinal + "'"}
`;
}
SQLServerQuery += `order by Unidade asc;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
return router;
};
module.exports = routes;

View File

@ -0,0 +1,108 @@
require('../connections/mysql-server');
require('../helpers/CheckToken');
require('../helpers/config');
const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
const formidable = require('formidable');
router.use(bodyParser.urlencoded({
limit: '10mb',
extended: true
}
));
router.use(bodyParser.json({
limit: '10mb',
extended: true
}));
var routes = function () {
router.get('/getAll', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
FROM slides;`, res, req.originalUrl);
});
router.get('/getSlide/:idslides', verifyJWT, (req, res) => {
const idslides = parseInt(req.params.idslides);
execSQLQuery(`SELECT
*
FROM slides
WHERE idslides = ${idslides};`, res, req.originalUrl);
});
router.post('/insert', verifyJWT, (req, res) => {
const idslides = parseInt(req.body.idslides);
const title = req.body.title;
const itens = parseInt(req.body.itens);
execSQLQuery(`INSERT INTO slides(title, itens) VALUES
(?, ?);`, res, req.originalUrl, [title, itens]);
});
router.patch('/update', verifyJWT, (req, res) => {
const idslides = parseInt(req.body.idslides);
const title = req.body.title;
const itens = parseInt(req.body.itens);
execSQLQuery(`UPDATE slides SET
title = ?,
itens = ?
WHERE idslides = ?;`, res, req.originalUrl, [title, itens, idslides]);
});
router.get('/renomeiaSlide/:idslides/:apartirde', verifyJWT, (req, res) => {
const idslides = parseInt(req.params.idslides);
const apartirde = parseInt(req.params.apartirde);
const fs = require('fs');
const path = require('path');
const Diretorio = Variables('src_media') + 'images/';
fs.readdir(Diretorio, (err, files) => {
let ListaSlides = [];
files.forEach(file => {
if (path.basename(file).includes("slide_" + idslides)) {
ListaSlides.push(file);
}
});
LoopRenomeiaSlide(0, apartirde, idslides, 0, ListaSlides, Diretorio, function(Sucesso) {
res.send(Sucesso);
})
})
});
function LoopRenomeiaSlide(Index, apartirde, idslides, newI, ListaSlides, Diretorio, callback) {
const fs = require('fs');
if (Index < ListaSlides.length) {
if (Index != apartirde) {
if (Index >= apartirde) {
let NovoNome = "slide_" + idslides + "_" + newI + ".jpg";
console.log("De: " + ListaSlides[Index] + " - Para: " + NovoNome);
fs.rename(Diretorio + ListaSlides[Index], Diretorio + NovoNome, function (err) {
Index++;
newI++;
LoopRenomeiaSlide(Index, apartirde, idslides, newI, ListaSlides, Diretorio, callback);
});
}
else {
Index++;
newI++;
LoopRenomeiaSlide(Index, apartirde, idslides, newI, ListaSlides, Diretorio, callback);
}
}
else {
fs.unlink(Diretorio + ListaSlides[Index], function (err) {
Index++;
LoopRenomeiaSlide(Index, apartirde, idslides, newI, ListaSlides, Diretorio, callback);
});
}
}
else {
callback(true);
}
}
return router;
};
module.exports = routes;

View File

@ -0,0 +1,22 @@
require('../connections/sql-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('/dbs', verifyJWT, (req, res) => {
execSQLQuery2(`SELECT
name
FROM master.dbo.sysdatabases
WHERE cmptlevel = 80
ORDER BY name ASC;`, res, req.originalUrl);
})
return router;
};
module.exports = routes;

View File

@ -0,0 +1,314 @@
require("../connections/mysql-server");
require("../connections/sql-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());
const sqlServer = function (sqlQry) {
return new Promise((resolve, reject) => {
sqlServerConnection
.request()
.query(sqlQry, function (error, Result, fields) {
let Retorno = [];
if (error) {
Retorno = { status: 500, error: error, response: [] };
console.log(error);
return reject(error);
} else {
resolve(Result);
}
});
});
};
var routes = function () {
router.get("/getAllStudent", (req, res) => {
execSQLQuery(
`SELECT
*
FROM agenda;`,
res,
req.originalUrl
);
});
router.post("/insertStudent/:banco", (req, res) => {
const db = req.params.banco;
console.log(db, "banco de dado");
let { nome, senha, IdUnidade, IdCurso, idFuncionario } = req.body;
senha = encriptPassword(senha);
console.log([nome, senha, IdUnidade, IdCurso]);
let sqlQry = `SELECT MAX([IDCliente]) as 'lastClientId' FROM ${db}[Clientes];`;
console.log(sqlQry);
sqlServerConnection
.request()
.query(sqlQry, function (error, IdClientResult, fields) {
let Retorno = [];
if (error || IdClientResult.length == 0) {
Retorno = { status: 500, error: error, response: [] };
return res.send(JSON.stringify(Retorno));
} else {
let { lastClientId } = IdClientResult.recordsets[0][0];
console.log(lastClientId);
let newClientId = lastClientId + 1;
let sqlInsertClient = `INSERT INTO ${db}[Clientes] (IDCliente, IDUnidade, Nome, PessoaFisica, SenhaIntranet)
VALUES (${newClientId}, ${IdUnidade}, '${nome}', 1, '${senha}');`;
console.log("antes da segunda");
console.log(sqlInsertClient);
sqlServerConnection
.request()
.query(
sqlInsertClient,
function (error, cadastroClientResult, fields) {
console.log("dentro da segunda");
if (error) {
Retorno = { status: 500, error: error, response: [] };
return res.send(JSON.stringify(Retorno));
} else {
let sqlLastTurmaId = `(SELECT MAX([IdTurma]) as lastTurmaId FROM ${db}[Turmas])`;
sqlServerConnection
.request()
.query(
sqlLastTurmaId,
function (error, IdTurmarResult, fields) {
console.log("dentro da quinta");
let Retorno = [];
if (error || IdTurmarResult.length == 0) {
Retorno = {
status: 500,
error: error,
response: [],
};
return res.send(JSON.stringify(Retorno));
} else {
let { lastTurmaId } = IdTurmarResult.recordsets[0][0];
console.log(lastTurmaId);
let newTurmaId = lastTurmaId + 1;
let sqlInsertTurma = `INSERT INTO ${db}[Turmas] (IdTurma, Codigo, Nome, DataInicio, DataTermino, HorarioRegular, Domingo, Segunda, Terca, Quarta, Quinta, Sexta, Sabado, Cancelada, Suspensa, IgnoraFerias, ServeCafe, ValorHoraAula, SequenciaRotativa, BloqueadaVenda, CursosParalelos, ForcarDataFinal, IDFuncionario)
Values (${newTurmaId}, '230PYCO000', '${nome}', getDate(), dateadd(yy, 1, getdate()), 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ${idFuncionario});`;
console.log(sqlInsertTurma);
sqlServerConnection
.request()
.query(
sqlInsertTurma,
function (error, CadastroTurmaResult, fields) {
console.log("dentro da sexta");
let Retorno = [];
if (error) {
Retorno = {
status: 500,
error: error,
response: [],
};
return res.send(JSON.stringify(Retorno));
} else {
let sqlLastMatriculaId = `SELECT MAX([IDMatricula]) as 'lastMatriculaId' FROM ${db}[Matriculas];`;
sqlServerConnection
.request()
.query(
sqlLastMatriculaId,
function (
error,
IdMatriculaResult,
fields
) {
console.log("dentro da terceira");
let Retorno = [];
if (
error ||
IdMatriculaResult.length == 0
) {
Retorno = {
status: 500,
error: error,
response: [],
};
return res.send(
JSON.stringify(Retorno)
);
} else {
let { lastMatriculaId } =
IdMatriculaResult.recordsets[0][0];
console.log(lastMatriculaId);
let newMatriculaId =
lastMatriculaId + 1;
let sqlIsertMatricula = `INSERT INTO ${db}[Matriculas] (IDMatricula, IDUnidade, CodigoTurma, ContratoImpresso, Certificado, Folha, CartasBoasVindas, DescontoDiferencial, DescontoPontualidade, UsaPerDescPontualidade)
values (${newMatriculaId}, ${IdUnidade}, ${newTurmaId}, 0, 0, 0, 0, 0, 0, 0);`;
console.log(sqlIsertMatricula);
sqlServerConnection
.request()
.query(
sqlIsertMatricula,
function (
error,
CadMatriculasResult,
fields
) {
console.log("dentro da quarta");
let Retorno = [];
if (error) {
Retorno = {
status: 500,
error: error,
response: [],
};
return res.send(
JSON.stringify(Retorno)
);
} else {
let sqlInsertMatriculaCursos = `insert into ${db}[MatriculasCursos] (IDMatricula, IDCurso, CodigoTurma, Gratis, MaterialImbutido)
values (${newMatriculaId}, ${IdCurso}, ${newTurmaId}, 0, 1);`;
sqlServerConnection
.request()
.query(
sqlInsertMatriculaCursos,
function (
error,
CadastroMatriculaCursoResult,
fields
) {
let Retorno = [];
if (error) {
Retorno = {
status: 500,
error: error,
response: [],
};
return res.send(
JSON.stringify(
Retorno
)
);
} else {
let sqlInsertTreinandoTurmas = ` Insert Into ${db}[TreinandosTurmas] (IDMatricula, IDTreinando, IDCurso, CodigoTurma, Concluiu, Desistente, Faltoso, EmitiuCertificado, RecebeuMaterial, Aprovado)
Values (${newMatriculaId}, ${newClientId}, ${IdCurso}, ${newTurmaId}, 0, 0, 0, 0, 0, 0);`;
sqlServerConnection
.request()
.query(
sqlInsertTreinandoTurmas,
function (
error,
CadastroMatriculaCursoResult,
fields
) {
let Retorno =
[];
if (error) {
Retorno = {
status: 500,
error:
error,
response:
[],
};
return res.send(
JSON.stringify(
Retorno
)
);
} else {
return res.send(
JSON.stringify(
{
mensage:
"Aluno matriculado com sucesso",
matricula:
newMatriculaId,
idturma:
newTurmaId,
}
)
);
}
}
);
}
}
);
}
}
);
}
}
);
}
}
);
}
}
);
}
}
);
}
});
});
router.post("/editStudent", (req, res) => {
const id = req.body.id;
const title = req.body.title;
const date = req.body.date;
const hour = req.body.hour;
const duration = req.body.duration;
const description = req.body.description;
const access = req.body.access;
execSQLQuery(
` UPDATE agenda SET
title='${title}',
date='${date}',
hour='2021-01-01T${hour}',
duration='${duration}',
description='${description}',
access='${access}'
WHERE (idagenda = '${id}')`,
res,
req.originalUrl
);
});
router.post("/deleteStudent", (req, res) => {
const id = req.body.id;
execSQLQuery(
` DELETE FROM agenda
WHERE (idagenda = '${id}')`,
res,
req.originalUrl
);
});
router.post("/insertTurmaCalendarioChamada/:banco", async (req, res) => {
const db = req.params.banco;
const { IDCurso, IDTurma, IDFuncionario, numeroDeAulas } = req.body;
console.log(IDCurso, IDTurma, IDFuncionario, numeroDeAulas);
let sqlQry = `insert into ${db}[TurmasCalendario] (IdTurmasCalendario, IdTurma, CodigoCurso, CodigoInstrutor, Data, HoraInicial, HoraFinal, Ministrado, PesquisaOpiniao )
values((select max(IdTurmasCalendario) from ${db}[TurmasCalendario]) + 1, ${IDTurma}, ${IDCurso}, ${IDFuncionario}, getDate(), getDate(), getDate(), 0, 0 )`;
console.log(sqlQry);
let infos = [];
for (let i = 0; i < numeroDeAulas; i++) {
try {
let result = await sqlServer(sqlQry);
console.log(result);
console.log("cadastrei papai");
setTimeout(() => {}, 1000);
console.log(`cadastro ${i}`);
} catch (error) {
console.log(error);
}
}
console.log(infos);
// return res.send(
// JSON.stringify({
// message: "InseridoAulasChamadas",
// })
// );
});
return router;
};
module.exports = routes;

View File

@ -0,0 +1,597 @@
require('../connections/mysql-server');
require('../connections/sql-server');
require('../helpers/CheckToken');
require('../helpers/config');
const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
router.use(bodyParser.urlencoded({
limit: '10mb',
extended: true
}));
router.use(bodyParser.json({
limit: '10mb',
extended: true
}));
var routes = function () {
router.get('/getTurmas/:idfuncuionario/:db', verifyJWT, (req, res) => {
var idfuncuionario = parseInt(req.params.idfuncuionario);
var db = req.params.db;
execSQLQuery2(`SELECT DISTINCT
IdTurma
FROM ${db}TurmasCalendario
/*WHERE CodigoInstrutor = ${idfuncuionario}*/;`, res, req.originalUrl);
})
router.get('/getMatriculas/:idturma/:db', verifyJWT, (req, res) => {
var idturma = parseInt(req.params.idturma);
var db = req.params.db;
execSQLQuery2(`
SELECT DISTINCT
IDMatricula
FROM
${db}Matriculas
WHERE
CodigoTurma = ${idturma}`,
res,
req.originalUrl
);
})
router.get('/getNomeAluno/:idmatricula/:db', verifyJWT, (req, res) => {
var idmatricula = parseInt(req.params.idmatricula);
var db = req.params.db;
execSQLQuery2(`
SELECT
${db}Clientes.Nome
FROM
${db}MatriculasTreinandos
INNER JOIN
${db}Clientes
ON
${db}MatriculasTreinandos.IDTreinando = ${db}Clientes.IDCliente
WHERE
${db}MatriculasTreinandos.IDMatricula = '${idmatricula}'`,
res,
req.originalUrl
);
})
router.get('/getCallsOfClassesNotMaked/:idmatricula/:qtdeaulas/:idcourses/:idunits/:nome', verifyJWT, (req, res) => {
var idmatricula = parseInt(req.params.idmatricula);
var qtdeaulas = parseInt(req.params.qtdeaulas);
var idcourses = parseInt(req.params.idcourses);
var idunits = parseInt(req.params.idunits);
var nome = req.params.nome;
var sqlQry = `SELECT
t.idclasses,
(select name from classes where idclasses = t.idclasses) as Aula,
${idcourses} AS CodigoCurso,
(select name from courses where idcourses = ${idcourses}) as NomeVersao,
${idmatricula} AS IDMatricula,
'${nome}' AS Nome
FROM (
SELECT DISTINCT
CASE WHEN c.idclasses = r.idclasses THEN 1 ELSE 0 END AS Completed,
c.*
FROM
classes c
LEFT JOIN
(SELECT DISTINCT
c.idclasses
FROM
stepclass sc
INNER JOIN
classes c
ON
sc.idclasses = c.idclasses
WHERE
sc.idusers = ${idmatricula}
AND
c.idcourses = ${idcourses}
AND
sc.idunits = ${idunits}) r
ON
r.idclasses = c.idclasses
WHERE
ordem + 1 <= ${qtdeaulas}
AND
idcourses = ${idcourses}
ORDER BY
c.ordem) t
WHERE
t.Completed = 0
ORDER BY
t.ordem;`;
execSQLQuery(sqlQry, res, req.originalUrl);
})
router.get('/getStudentsByTeacher/:db/:idinstrutor', verifyJWT, (req, res) => {
var db = req.params.db;
var idinstrutor = parseInt(req.params.idinstrutor);
execSQLQuery2(`SELECT
Matriculas2.IDMatricula,
Turmas2.CodigoCurso,
(SELECT COUNT(*) AS Ministradas FROM ${db}TurmasCalendario WHERE CodigoCurso = Turmas2.CodigoCurso AND IdTurma = (SELECT TOP(1) CodigoTurma FROM ${db}TreinandosTurmas WHERE IDMatricula = Matriculas2.IDMatricula) AND Ministrado = 1) AS Ministradas,
(SELECT TOP(1) c.Nome FROM ${db}Clientes c INNER JOIN ${db}TreinandosTurmas tt ON c.IDCliente = tt.IDTreinando WHERE tt.IDMatricula = Matriculas2.IDMatricula) AS Nome
FROM (SELECT DISTINCT
IdTurma,
CodigoCurso
FROM ${db}TurmasCalendario tc
/*WHERE CodigoInstrutor = ${idinstrutor}*/) Turmas2
INNER JOIN (SELECT DISTINCT
IDMatricula,
CodigoTurma
FROM ${db}Matriculas) Matriculas2 ON Turmas2.IdTurma = Matriculas2.CodigoTurma
WHERE Turmas2.CodigoCurso > 0;`, res, req.originalUrl);
})
router.get('/getQtdeStepclass/:idunits/:idusers/:idcourses', verifyJWT, (req, res) => {
var idunits = parseInt(req.params.idunits);
var idusers = parseInt(req.params.idusers);
var idcourses = parseInt(req.params.idcourses);
execSQLQuery(`
SELECT
COUNT(sc.idusers) as qtde_stepclass
FROM
stepclass sc
INNER JOIN
classes c ON sc.idclasses = c.idclasses
INNER JOIN
courses co ON co.idcourses = c.idcourses
WHERE
sc.idusers = ${idusers} AND sc.idunits = ${idunits}
AND co.idcourses = ${idcourses};`,
res,
req.originalUrl
);
})
router.get('/getCalls/:db/:idinstrutor', verifyJWT, (req, res) => {
const db = req.params.db;
var idinstrutor = parseInt(req.params.idinstrutor);
execSQLQuery2(`SELECT DISTINCT
co.NomeVersao,
tt.IDMatricula,
c.Nome,
CONVERT(varchar, tc.Data, 103) AS Data,
CASE
WHEN tc.Ministrado = 0 THEN 'Não' else 'Sim'
END AS Ministrado
FROM ${db}TurmasCalendario tc
INNER JOIN ${db}TreinandosTurmas tt ON tt.CodigoTurma = tc.IdTurma
INNER JOIN ${db}Clientes c ON c.IDCliente = tt.IDTreinando
INNER JOIN ${db}Cursos co ON co.Codigo = tc.CodigoCurso
WHERE /*tc.CodigoInstrutor = ${idinstrutor} and*/ tt.IDMatricula > 190008 and tc.Ministrado = 0;`, res, req.originalUrl);
});
router.get('/getClassByOrdem/:idcourses/:ordem', verifyJWT, (req, res) => {
let idcourses = req.params.idcourses;
let ordem = req.params.ordem;
execSQLQuery(`
SELECT
idclasses
FROM
classes
WHERE
idcourses = ${idcourses}
AND
ordem = ${ordem};`,
res,
req.originalUrl
);
})
router.get('/getExerciseContent/:idclasses', verifyJWT, (req, res) => {
let idclasses = req.params.idclasses;
execSQLQuery(`
SELECT
e.idexercises,
e.description AS Enunciado,
eq.idexercisequestions,
eq.content AS Questao,
ea.idexerciseanswers,
ea.content AS Resposta,
ea.iscorrect,
ea.hasmedia,
(select
t.description
from
texts t
inner join
classescontent cc
on
cc.idgames = t.idtexts
where
cc.idclasses = ${idclasses}) as Jogo
FROM
classescontent cc
INNER JOIN
exercisequestions eq ON cc.idexercises = eq.idexercises
INNER JOIN
exercises e ON e.idexercises = eq.idexercises
INNER JOIN
exerciseanswers ea ON ea.idexercisequestions = eq.idexercisequestions
WHERE
cc.idclasses = ${idclasses}
ORDER BY
cc.ordem`, res, req.originalUrl);
})
router.post('/getAulasRealizadas', verifyJWT, (req, res) => {
let idusers = req.body.idusers;
let idunits = req.body.idunits;
let ip_externo = req.body.ip_externo;
let porta_mysql = req.body.porta;
let SQLQry = `SELECT DISTINCT
(SELECT idcourses FROM classes WHERE idclasses = sc.idclasses) AS IDCurso,
(SELECT description FROM courses WHERE idcourses = IDCurso) AS Curso,
idclasses AS IDAula,
(SELECT description FROM classes WHERE idclasses = sc.idclasses) AS Aula,
CASE WHEN datefinal IS NOT NULL THEN datefinal ELSE '--/--/----' END AS Data,
CASE WHEN completedClass = 0 THEN 'Não concluída' ELSE 'Concluída' END AS Status,
CASE WHEN homework = 1 THEN 'Realizada' WHEN homework = 0 THEN 'Falhou' WHEN homework IS NULL THEN 'Não realizada' END AS LicaoCasa,
CASE WHEN notegame = 1 THEN 'Sucesso' WHEN notegame IS NULL THEN 'Não concluído' WHEN notegame = 0 THEN 'Falhou' END AS Jogo,
(SELECT s.title FROM slides s WHERE idslides = (SELECT cc.idslides FROM classescontent cc INNER JOIN slides s1 ON cc. idslides = s1.idslides WHERE cc.idclasses = IDAula AND cc.idslides IS NOT NULL AND s1.title LIKE 'Montagem%')) AS Projeto,
CASE WHEN note IS NOT NULL THEN note ELSE '--' END as Nota,
(SELECT ordem + 1 FROM classes WHERE idclasses = sc.idclasses) AS Ordem
FROM
stepclass sc
WHERE
idunits = ${idunits} AND idusers = ${idusers}
ORDER BY IDCurso, Ordem;`;
mysqlConnection.query(SQLQry, function (error, results, fields) {
let Status = 0;
if (!error && results.length != 0) {
Status = 200;
console.log("/getAulasRealizadas success 200");
}
else {
Status = 500;
console.log("/getAulasRealizadas fail 500 " + error);
}
res.send(JSON.stringify({
"status": Status,
"error": [],
"error2": error,
"response": [],
"response2": results
}))
})
})
router.post('/getExerciciosAluno', verifyJWT, (req, res) => {
let idusers = req.body.idusers;
let idclasses = req.body.idclasses;
let idunits = req.body.idunits;
let ip_externo = req.body.ip_externo;
let porta_mysql = req.body.porta;
let SQLQry = `SELECT
(SELECT e.description FROM exercises e WHERE eq.idexercises = e.idexercises) AS Enunciado,
eq.content AS Questao,
ea.content AS Resposta,
CASE WHEN ea.iscorrect = 1 THEN 'Correta' ELSE 'Errada' END AS Correcao,
(SELECT e.idexercisetype FROM exercises e WHERE eq.idexercises = e.idexercises) AS Tipo
FROM
exercisequestions eq
INNER JOIN
exerciseanswers ea
ON
eq.idexercisequestions = ea.idexercisequestions
INNER JOIN
usergivenanswers ua
ON
ua.idexerciseanswers = ea.idexerciseanswers
WHERE
ua.idusers = ${idusers} AND ua.idclasses = ${idclasses} and ua.idunits = ${idunits};`;
mysqlConnection.query(SQLQry, function (error, results, fields) {
let Status = 0;
if (!error && results.length != 0) {
Status = 200;
console.log("/getAulasRealizadas success 200");
}
else {
Status = 500;
console.log("/getAulasRealizadas fail 500 " + error);
}
res.send(JSON.stringify({
"status": Status,
"error2": error,
"response2": results
}))
})
})
router.post('/getTurmasDetalhes', verifyJWT, (req, res) => {
const idfuncuionario = parseInt(req.body.IDFuncionario);
const Unidades = req.body.Unidades;
let SQLQuery = "";
for (let i = 0; i < Unidades.length; i++) {
if (i > 0) {
SQLQuery += `union all
`;
}
/*SQLQuery += `select distinct
${Unidades[i]['idunits']} as 'IDUnits',
'${Unidades[i]['unityname']}' as 'Unidade',
tt.IDMatricula as 'Matricula',
cl.Nome as 'Aluno',
tu.IdTurma,
cu.Codigo as 'IDCurso',
cu.NomeVersao as 'Curso',
(select top 1 convert(varchar, tc2.HoraInicial, 8) from ${Unidades[i]['reference_db']}.dbo.TurmasCalendario tc2 where tc2.IdTurma = tu.IdTurma) as 'HoraInicial',
(select top 1 convert(varchar, tc2.HoraFinal, 8) from ${Unidades[i]['reference_db']}.dbo.TurmasCalendario tc2 where tc2.IdTurma = tu.IdTurma) as 'HoraFinal',
--convert(varchar, tu.HoraInicial, 8) as 'HoraInicial',
--convert(varchar, tu.HoraFinal, 8) as 'HoraFinal',
convert(VARCHAR, tu.DataInicio, 103) as 'DataInicio',
convert(VARCHAR, tu.DataTermino, 103) as 'DataTermino',
(select count(*) from ${Unidades[i]['reference_db']}.dbo.TurmasCalendario tc1 where tc1.CodigoCurso = cu.Codigo and tc1.IdTurma = tu.IdTurma and tc1.Ministrado = 1) as 'Chamadas'
from ${Unidades[i]['reference_db']}.dbo.Turmas tu
inner join ${Unidades[i]['reference_db']}.dbo.TurmasCalendario tc on tc.IdTurma = tu.IdTurma
inner join ${Unidades[i]['reference_db']}.dbo.Cursos cu on cu.Codigo = tc.CodigoCurso
inner join ${Unidades[i]['reference_db']}.dbo.TreinandosTurmas tt on tt.CodigoTurma = tu.IdTurma and tt.IDCurso = cu.Codigo
inner join ${Unidades[i]['reference_db']}.dbo.Clientes cl on cl.IDCliente = tt.IDTreinando
`;*/
SQLQuery += `select distinct
${Unidades[i]['idunits']} as 'IDUnits',
'${Unidades[i]['unityname']}' as 'Unidade',
mt.IDMatricula as 'Matricula',
cl.Nome as 'Aluno',
tu.IdTurma,
tt.IDCurso,
cu.NomeVersao as 'Curso',
(select top 1 convert(varchar, tc2.HoraInicial, 8) from ${Unidades[i]['reference_db']}.dbo.TurmasCalendario tc2 where tc2.IdTurma = tu.IdTurma) as 'HoraInicial',
(select top 1 convert(varchar, tc2.HoraFinal, 8) from ${Unidades[i]['reference_db']}.dbo.TurmasCalendario tc2 where tc2.IdTurma = tu.IdTurma) as 'HoraFinal',
convert(varchar, tu.DataInicio, 103) as 'DataInicio',
convert(varchar, tu.DataTermino, 103) as 'DataTermino',
(select count(*) from ${Unidades[i]['reference_db']}.dbo.TurmasCalendario tc1 where tc1.CodigoCurso = tt.IDCurso and tc1.IdTurma = tu.IdTurma and tc1.Ministrado = 1) as 'Chamadas'
from ${Unidades[i]['reference_db']}.dbo.Matriculas mt
inner join ${Unidades[i]['reference_db']}.dbo.Turmas tu on tu.IdTurma = mt.CodigoTurma
inner join ${Unidades[i]['reference_db']}.dbo.TreinandosTurmas tt on tt.IDMatricula = mt.IDMatricula
inner join ${Unidades[i]['reference_db']}.dbo.Clientes cl on cl.IDCliente = tt.IDTreinando
inner join ${Unidades[i]['reference_db']}.dbo.Cursos cu on cu.Codigo = tt.IDCurso
`;
}
SQLQuery += `/*where tc.CodigoInstrutor = ${idfuncuionario}*/
group by mt.IDMatricula, cl.Nome, tu.IdTurma, tt.IDCurso, cu.NomeVersao, HoraInicial, HoraFinal, tu.DataInicio, tu.DataTermino
order by mt.IDMatricula asc;`;
execSQLQuery2(SQLQuery, res, req.originalUrl);
});
router.get('/getProgressoAula/:idusers/:idunits/:idcourses', verifyJWT, (req, res) => {
const idusers = parseInt(req.params.idusers);
const idunits = parseInt(req.params.idunits);
const idcourses = parseInt(req.params.idcourses);
execSQLQuery(`select distinct
*,
(Tab1.NM / Tab1.VezesAssistida) as 'NotaMedia',
(Tab1.NMGeral / Tab1.VezesAssistidaGeral) as 'NotaMediaGeral'
from (select
cl.idclasses,
sc.idstepclass,
sc.idusers,
sc.idunits,
cl.name as 'Aula',
case when sc.idstepclass then 'Sim' else 'Não' end as 'Iniciada',
case when sc.completedClass = 1 then 'Sim' else 'Não' end as 'Finalizada',
date_format(sc.insert_date, '%d/%m/%Y %h:%i') as 'DataInicio',
date_format(sc.update_date, '%d/%m/%Y %h:%i') as 'DataFinalizada',
sc.datefinal as 'DataFechamento',
case when sc.liberado = 1 then 'Sim' else 'Não' end as 'liberado',
case
when sc.homework = 1 or ((select count(*) from userstages us where us.idclasses = sc.idclasses and us.idunits = sc.idunits and us.idusers = sc.idusers and us.idstages = 2) > 0) then 'Concluída'
when sc.homework is null and sc.completedClass = 1 then 'Não Realizada'
else null
end as 'TarefaCasa',
(select date_format(us.insert_date, '%d/%m/%Y %h:%i') from userstages us where us.idclasses = sc.idclasses and us.idunits = sc.idunits and us.idusers = sc.idusers and us.idstages = 2 limit 1) as 'DataTarefa',
(select round(us.note, 2) from userstages us where us.idclasses = sc.idclasses and us.idunits = sc.idunits and us.idusers = sc.idusers and us.idstages = 3 limit 1) as 'notaProjeto',
round(sc.note, 2) as 'Nota',
case
when (sc.notegame = 1 and sc.completedClass = 1) then (sum(ea.iscorrect) + 1)
when ((sc.notegame = 0 or sc.notegame is null) and sc.completedClass = 1) then coalesce(sum(ea.iscorrect), 0)
else null
end as 'Acertos',
case
when (sc.notegame = 0 and sc.completedClass = 1) then (sum(case when ea.iscorrect = 1 then 0 else 1 end) + 1)
when ((sc.notegame = 1 or sc.notegame is null) and sc.completedClass = 1) then coalesce(sum(case when ea.iscorrect = 1 then 0 else 1 end), 0)
else null
end as 'Erros',
ExA.Questoes,
(select count(*) from stepclass sc1 where sc1.idclasses = cl.idclasses and sc1.idunits = ${idunits}) as 'VezesAssistida',
(select count(*) from stepclass sc1 where sc1.idclasses = cl.idclasses) as 'VezesAssistidaGeral',
(select count(*) from classes cl1 where cl1.idcourses = cl.idcourses and cl1.disabled = 0) as 'AulasCurso',
(select sum(sc1.note) from stepclass sc1 where sc1.idclasses = cl.idclasses and sc1.idunits = ${idunits}) as 'NM',
(select sum(sc1.note) from stepclass sc1 where sc1.idclasses = cl.idclasses) as 'NMGeral',
cn.note as 'NotaCurso'
from classes cl
left join stepclass sc on cl.idclasses = sc.idclasses and sc.idusers = ${idusers} and sc.idunits = ${idunits}
left join usergivenanswers ug on ug.idclasses = sc.idclasses and ug.idusers = sc.idusers and ug.idunits = sc.idunits
left join exerciseanswers ea on ea.idexerciseanswers = ug.idexerciseanswers
left join coursenotes cn on cn.idcourses = ${idcourses} and cn.idunits = ${idunits} and cn.idusers = ${idusers}
inner join (select distinct
cl.idclasses,
cl.name as 'Aula',
count(cc.idexercises) as 'Questoes'
from classes cl
inner join classescontent cc on cc.idclasses = cl.idclasses
left join exercisequestions eq on eq.idexercises = cc.idexercises
group by cl.idclasses, cc.idclasses
order by cl.idclasses asc) ExA on cl.idclasses = ExA.idclasses
where cl.idcourses = ${idcourses}
group by cl.idclasses, sc.idusers, sc.idunits, cl.name, sc.completedClass, sc.insert_date, sc.update_date, sc. note, sc.notegame, cl.ordem, cn.note
order by cl.ordem asc) Tab1;`, res, req.originalUrl);
});
router.post('/getAulasDoDiaSQLServer', verifyJWT, (req, res) => {
const Unidades = req.body.Unidades;
const DataInicial = req.body.DataInicial;
const DataFinal = req.body.DataFinal;
let SQLServerQuery = ``;
for (let i = 0; i < Unidades.length; i++) {
if (i > 0) {
SQLServerQuery += `union all
`;
}
SQLServerQuery += `select
* ,
case when R.Ministrado = 'Sim' then (select count(*) from ${Unidades[i]}Chamadas ch where ch.IDCurso = R.IDCurso and ch.IdTurma = R.IdTurma) else (select (count(*) + 1) from ${Unidades[i]}Chamadas ch where ch.IDCurso = R.IDCurso and ch.IdTurma = R.IdTurma) end as 'Chamadas'
from (select
fu.Nome as 'Professor',
tc.IdTurma,
tt.IDMatricula,
cl.Nome as 'Aluno',
tt.IDCurso,
cu.NomeVersao as 'Curso',
CONVERT(varchar(10), tc.Data, 103) as 'Data',
CONVERT(varchar(10), tc.HoraInicial, 108) as 'HoraInicial',
CONVERT(varchar(10), tc.HoraFinal, 108) as 'HoraFinal',
case when tc.MInistrado = 1 then 'Sim' else 'Não' end as 'Ministrado',
'${Unidades[i].replace('.dbo.', '')}' as 'Unidade',
0 as 'Concluida'
from ${Unidades[i]}TurmasCalendario tc
inner join ${Unidades[i]}TreinandosTurmas tt on tt.CodigoTurma = tc.IdTurma and tt.IDCurso = tc.CodigoCurso
inner join ${Unidades[i]}Clientes cl on cl.IDCliente = tt.IDTreinando
inner join ${Unidades[i]}Cursos cu on cu.Codigo = tt.IDCurso
inner join ${Unidades[i]}Funcionarios fu on fu.IDFuncionario = tc.CodigoInstrutor
where tc.Data >= '${DataInicial}' and tc.Data <= '${DataFinal}' and tt.IDMatricula > 190008) R
`;
}
SQLServerQuery += `order by R.Data asc, R.HoraInicial asc;`;
sqlServerConnection.request().query(SQLServerQuery, function (error, results, fields) {
if (!error && results && results['recordset']) {
let Calendario = results['recordset'];
mysqlConnection.query(`select * from classes;`, function (error, Aulas, fields) {
for (let i = 0; i < Calendario.length; i++) {
for (let o = 0; o < Aulas.length; o++) {
if (Calendario[i]['IDCurso'] == Aulas[o]['idcourses'] && Calendario[i]['Chamadas'] == (Aulas[o]['ordem'] + 1)) {
Calendario[i]['Aula'] = Calendario[i]['Chamadas'] + " - " + Aulas[o]['description'];
break;
}
}
}
res.send(JSON.stringify({
"status": 200,
"error": error,
"response": Calendario,
}));
console.log(new Date().toUTCString() + " - " + req.originalUrl + " success 200");
});
}
else {
res.send(JSON.stringify({
"status": 500,
"error": error,
"response": [],
}));
console.log(req.originalUrl + " error 500");
}
});
});
router.post('/getAulasDoDiaMySQL', verifyJWT, (req, res) => {
const Unidades = req.body.Unidades;
const DataInicial = req.body.DataInicial;
const DataFinal = req.body.DataFinal;
let SQLQuery = `select distinct * from (`;
for (let i = 0; i < Unidades.length; i++) {
if (i > 0) {
SQLQuery += `union all
`;
}
SQLQuery += `SELECT distinct
date_format(sc.insert_date, '%d/%m/%Y') as 'Data',
'' as 'Professor',
sc.idusers as 'IDMatricula',
'' as 'Aluno',
cl.idcourses as 'IDCurso',
co.name as 'Curso',
concat(cl.ordem + 1, ' - ', cl.description) as 'Aula',
date_format(sc.insert_date, '%H:%i:%s') as 'HoraInicial',
date_format(sc.update_date, '%H:%i:%s') as 'HoraFinal',
un.reference_db as 'Unidade',
sc.completedClass as 'Concluida',
false as 'Assistida',
2 as 'Horas'
FROM stepclass sc
inner join classes cl on cl.idclasses = sc.idclasses
inner join units un on un.idunits = sc.idunits and un.reference_db = '${Unidades[i].replace('.dbo.', '')}'
inner join courses co on co.idcourses = cl.idcourses
where date_format(sc.insert_date, '%Y-%m-%d') >= '${DataInicial}' and date_format(sc.insert_date, '%Y-%m-%d') <= '${DataFinal}'
`;
}
SQLQuery += `order by Data asc, HoraInicial asc) R;`;
mysqlConnection.query(SQLQuery, function (error, Aulas, fields) {
res.send(JSON.stringify({
"status": 200,
"error": error,
"response": Aulas,
}));
console.log(new Date().toUTCString() + " - " + req.originalUrl + " success 200");
});
});
router.post('/getCursosAluno', verifyJWT, (req, res) => {
const idcourses = req.body.idcourses;
const idusers = parseInt(req.body.idusers);
const idunits = parseInt(req.body.idunits);
const SQLQuery1 = `select distinct
co.idcourses,
co.name as 'Curso',
co.durationtraineeindividual as 'CargaHoraria',
co.aditional as 'Adicional',
co.extracourse as 'CursoExtra',
(select un.unityname from units un where un.idunits = ${idunits}) as 'Unidade',
(select count(*) from classes cl where cl.idcourses = co.idcourses) as 'Aulas',
(select count(*) from classes cl inner join stepclass sc on sc.idclasses = cl.idclasses where cl.idcourses = co.idcourses and sc.idusers = ${idusers} and sc.idunits = ${idunits}) as 'AulasAssistidas'
from courses co
left join classes cl on cl.idcourses = co.idcourses
left join stepclass sc on sc.idclasses = cl.idclasses
where co.idcourses in ${idcourses}
group by co.idcourses, co.name, co.durationtraineeindividual, co.aditional, co.extracourse;`;
mysqlConnection.query(SQLQuery1, function (error, Cursos, fields) {
let ExitCursos = [];
for (let i = 0; i < Cursos.length; i++) {
if (Cursos[i]['Curso'].includes('Módulo')) {
let Incluso = false;
for (let o = 0; o < ExitCursos.length; o++) {
if (Cursos[i]['Curso'].includes(ExitCursos[o]['Curso'])) {
ExitCursos[o]['QtdModulos']++;
Incluso = true;
break;
}
}
if (!Incluso)
ExitCursos.push( { 'Curso': Cursos[i]['Curso'].split(' - Módulo')[0], 'QtdModulos': 1, 'Modulos': [] } );
ExitCursos[ExitCursos.length - 1]['Modulos'].push( Cursos[i] );
}
else {
ExitCursos.push( { 'Curso': Cursos[i]['Curso'].split(' - Módulo')[0], 'QtdModulos': 1, 'Modulos': [] } );
ExitCursos[ExitCursos.length - 1]['Modulos'].push( Cursos[i] );
}
}
res.send(JSON.stringify({
"status": 200,
"error": error,
"response": ExitCursos
}));
console.log(new Date().toUTCString() + " - " + req.originalUrl + " success 200");
});
});
return router;
};
module.exports = routes;

View File

@ -0,0 +1,169 @@
require('../connections/mysql-server');
require('../helpers/CheckToken');
require('../helpers/config');
const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
const formidable = require('formidable');
router.use(bodyParser.urlencoded({
limit: '50mb',
extended: true
}));
router.use(bodyParser.json({
limit: '50mb',
extended: true
}));
var routes = function () {
router.get('/getAll', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
FROM texts;`, res, req.originalUrl);
});
router.get('/getText/:idtexts', verifyJWT, (req, res) => {
const idtexts = parseInt(req.params.idtexts);
execSQLQuery(`SELECT DISTINCT
*
FROM texts
WHERE idtexts = ${idtexts};`, res, req.originalUrl);
});
router.post('/insert', verifyJWT, (req, res) => {
const text = req.body.text;
const enabled = req.body.enabled ? 1 : 0;
const description = req.body.description;
const game = req.body.game ? 1 : 0;
execSQLQuery(`INSERT INTO texts(text, enabled, description, game)
VALUES (?, ?, ?, ?);`, res, req.originalUrl, [text, enabled, description, game]);
});
router.patch('/update', verifyJWT, (req, res) => {
const idtexts = parseInt(req.body.idtexts);
const text = req.body.text;
const enabled = req.body.enabled ? 1 : 0;
const description = req.body.description;
const game = req.body.game ? 1 : 0;
execSQLQuery(`UPDATE texts SET
text = ?,
enabled = ?,
description = ?,
game = ?
WHERE idtexts = ?;`, res, req.originalUrl, [text, enabled, description, game, idtexts]);
});
router.post('/copy', 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') + 'games/' + name;
var oldpath = files.file.path;
if (fs.existsSync(dir)) {
const rimraf = require('rimraf');
rimraf(dir, function(){
console.log("Apagado");
copiaJogo(dir, name, res, fs, oldpath);
});
}
else {
copiaJogo(dir, name, res, fs, oldpath);
}
});
});
router.get('/CarregarJogo/:idgames', (req, res) => {
const Protocolo = req.headers.referer.split('/')[0] + "//";
const fs = require('fs');
const idgames = parseInt(req.params.idgames);
const DirLocal = `${Variables('src_media')}games/${idgames}/`;
const DirWeb = `${Protocolo}${req.headers.host.split(':')[0]}/games/${idgames}/`;
if (fs.existsSync(DirLocal)) {
res.redirect(DirWeb + 'index.html')
}
else {
const shell = require('shelljs');
shell.exec('wget -c -P /var/www/html/ -N -m -np -nH -l3 "http://18.228.91.135/games/' + idgames + '/"', function (arquivosbaixados) {
shell.exec('wget -c -P /var/www/html/ -nH -r -k -np "http://18.228.91.135/games/' + idgames + '/Build/" -R index.html?*', function (Sucesso) {
shell.exec('chmod -R 777 /var/www/html/games/' + idgames + '/', function (Sucesso) {
console.log(DirWeb + 'index.html');
res.redirect(DirWeb + 'index.html');
})
})
})
}
})
router.get('/SolucaoProblemas/:idgames', verifyJWT, (req, res) => {
const idgames = req.params.idgames;
const shell = require('shelljs');
shell.exec('rm -rf ' + Variables('src_media') + 'games/' + idgames + '/', function(Sucesso) {
console.log("Jogo " + idgames + " excluido com sucesso!");
res.send(true);
});
});
router.post('/InsertGamesExercise', verifyJWT, (req, res) => {
const idgames = parseInt(req.body.idgames);
const idexercises = req.body.idexercises;
const idzoechattime = req.body.idzoechattime;
execSQLQuery(`INSERT INTO gamesexercises(idgames, idexercises, idzoechattime) VALUES
(?, ?, ?);`, res, req.originalUrl, [idgames, idexercises, idzoechattime]);
});
router.get('/getInteracoes/:idgames', verifyJWT, (req, res) => {
const idgames = parseInt(req.params.idgames);
execSQLQuery(`select
ge.*,
CASE
WHEN ge.idexercises IS NOT NULL THEN (SELECT e.description FROM exercises e WHERE e.idexercises = ge.idexercises)
WHEN ge.idzoechattime IS NOT NULL THEN (SELECT z.description FROM zoechattime z WHERE z.idzoechattime = ge.idzoechattime)
END AS 'description',
CASE
WHEN ge.idexercises IS NOT NULL THEN 'Exercício'
WHEN ge.idzoechattime IS NOT NULL THEN 'ChatTime'
END AS 'type'
from gamesexercises ge
where ge.idgames = ${idgames};`, res, req.originalUrl);
});
router.delete('/deleteInteracao/:idgamesexercises', verifyJWT, (req, res) => {
const idgamesexercises = parseInt(req.params.idgamesexercises);
execSQLQuery(`delete from gamesexercises
where idgamesexercises = ${idgamesexercises};`, res, req.originalUrl);
});
return router;
};
function copiaJogo(dir, name, res, fs, oldpath) {
fs.mkdirSync(dir);
fs.rename(oldpath, dir + ".zip", function (err) {
console.log('Copiado com sucesso!');
require('all-unpacker').unpackZip(dir + ".zip", {
targetDir: dir,
forceDirectory: 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("Extraído com sucesso!");
fs.unlink(dir + '.zip', function() {
console.log("Apagado com sucesso!");
res.send(true);
})
});
};
})
})
}
module.exports = routes;

View File

@ -0,0 +1,196 @@
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 traineeprogram`,
res,
req.originalUrl
);
})
router.get('/getTraineeprogram/:id', verifyJWT, (req, res) => {
id = parseInt(req.params.id);
execSQLQuery(`
SELECT
*
FROM traineeprogram
WHERE idtraineeprogram = ${id}`,
res,
req.originalUrl
);
})
router.get('/getTraineeprogramCourses/:id', verifyJWT, (req, res) => {
id = parseInt(req.params.id);
execSQLQuery(`
select
c.name,
tc.ordem,
tc.idtraineeprogramcourses
from
traineeprogramcourses tc
inner join
courses c
on
tc.idcourses = c.idcourses
where
tc.idtraineeprogram = ${id}
order by ordem;`,
res,
req.originalUrl
);
})
router.get('/list', verifyJWT, (req, res) => {
execSQLQuery(`
SELECT
idtraineeprogram,
name,
description,
concat('R$ ',format(totalvalue,2,'de_DE')) as totalvalue,
disabled
FROM traineeprogram`,
res,
req.originalUrl
);
})
router.patch('/disable', verifyJWT, (req, res) => {
const idtraineeprogram = parseInt(req.body.idtraineeprogram);
execSQLQuery(`
UPDATE traineeprogram
SET disabled = not disabled
WHERE idtraineeprogram = ${idtraineeprogram}`,
res,
req.originalUrl
);
})
router.post('/insert', verifyJWT, (req, res) => {
const idaccountplan = req.body.idaccountplan ? 1 : 0;
const name = req.body.name;
const description = req.body.description;
const totalvalue = parseFloat(req.body.totalvalue);
const totalmaterialvalue = parseFloat(req.body.totalmaterialvalue);
const durationtotal = parseFloat(req.body.durationtotal);
const disabled = req.body.disabled ? 1 : 0;
const codetraineeprog = req.body.codetraineeprog ? 1 : 0;
const peopletec = req.body.peopletec ? 1 : 0;
const matvaluefix = req.body.matvaluefix ? 1 : 0;
execSQLQuery(`INSERT INTO
traineeprogram(
idaccountplan, name, description,
totalvalue, totalmaterialvalue, durationtotal,
disabled, codetraineeprog, peopletec, matvaluefix
) VALUES (
'${idaccountplan}',"${name}","${description}",
'${totalvalue}',${totalmaterialvalue},${durationtotal},
'${disabled}','${codetraineeprog}','${peopletec}','${matvaluefix}'
)`,
res,
req.originalUrl
);
})
router.patch('/update', verifyJWT, (req, res) => {
const idtraineeprogram = req.body.idtraineeprogram;
const idaccountplan = req.body.idaccountplan ? 1 : 0;
const name = req.body.name;
const description = req.body.description;
const totalvalue = parseFloat(req.body.totalvalue);
const totalmaterialvalue = parseFloat(req.body.totalmaterialvalue);
const durationtotal = parseFloat(req.body.durationtotal);
const disabled = req.body.disabled ? 1 : 0;
const codetraineeprog = req.body.codetraineeprog ? 1 : 0;
const peopletec = req.body.peopletec ? 1 : 0;
const matvaluefix = req.body.matvaluefix ? 1 : 0;
execSQLQuery(`
UPDATE traineeprogram SET
idaccountplan = '${idaccountplan}',
name = "${name}",
description = "${description}",
totalvalue = ${totalvalue},
totalmaterialvalue = ${totalmaterialvalue},
durationtotal = '${durationtotal}',
disabled = '${disabled}',
codetraineeprog = '${codetraineeprog}',
peopletec = '${peopletec}',
matvaluefix = '${matvaluefix}'
WHERE idtraineeprogram = ${idtraineeprogram}`,
res,
req.originalUrl
);
})
router.post('/addTraineeNote', verifyJWT, (req, res) => {
const idtraineeprogram = req.body.idtraineeprogram;
const idusers = req.body.idusers;
const idunits = req.body.idunits;
const note = parseFloat(req.body.note);
execSQLQuery(`
INSERT INTO
traineeprogramnotes(idtraineeprogram, idusers, note, idunits)
VALUES
(${idtraineeprogram}, ${idusers}, ${idunits}, ${note});`,
res,
req.originalUrl
);
})
router.get('/getMySQLinSQLServerTraineeprogram', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
idtraineeprogram AS 'Codigo',
idaccountplan AS 'IDPlanoConta',
name AS 'Nome',
description AS 'DescricaoContrato',
totalvalue AS 'ValorTotal',
totalmaterialvalue AS 'ValorMaterialTotal',
durationtotal AS 'CargaHorariaTotal',
disabled AS 'Desativado',
codetraineeprog AS 'CodigoProgTreinamento',
peopletec AS 'PeopleTec'
FROM traineeprogram;`, res, req.originalUrl);
});
router.get('/getSQLServerTraineeprogram/:db', verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(`SELECT
*
FROM ${db}ProgramaTreinamento;`, res, req.originalUrl);
});
router.get('/getMySQLinSQLServerTraineeprogramcourses', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
idtraineeprogram AS 'Codigo',
idcourses AS 'CodigoCurso',
value AS 'Valor',
materialvalue AS 'ValorMaterial',
duration AS 'CargaHoraria',
ordem AS 'Ordem',
opinionsearch AS 'PesquisaOpiniao',
materialpercentual AS 'PercentualMaterial'
FROM traineeprogramcourses;`, res, req.originalUrl);
});
router.get('/getSQLServerTraineeprogramcourses/:db', verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(`SELECT
*
FROM ${db}ProgramaTreinamentoCursos;`, res, req.originalUrl);
});
return router;
};
module.exports = routes;

View File

@ -0,0 +1,151 @@
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 traineeprogramcourses`,
res,
req.originalUrl
);
})
router.get('/getTraineeprogramcourses/:id', verifyJWT, (req, res) => {
id = parseInt(req.params.id);
execSQLQuery(`
SELECT
*
FROM traineeprogramcourses
WHERE idtraineeprogramcourses = ${id}`,
res,
req.originalUrl
);
})
router.get('/getTraineeprogramByCourse/:idcourses', verifyJWT, (req, res) => {
var idcourses = parseInt(req.params.idcourses);
execSQLQuery(`
SELECT
*
FROM
traineeprogramcourses
WHERE
idcourses = ${idcourses}`,
res,
req.originalUrl
);
})
router.delete('/deleteTraineeprogramcourses/:id', verifyJWT, (req, res) => {
id = parseInt(req.params.id);
execSQLQuery(`
DELETE FROM traineeprogramcourses
WHERE idtraineeprogramcourses = ${id}`,
res,
req.originalUrl
);
})
router.get('/list/:id', verifyJWT, (req, res) => {
id = parseInt(req.params.id);
execSQLQuery(`SELECT
c.idcourses,
c.name,
tpc.idtraineeprogramcourses,
concat('R$ ',format(tpc.value,2,'de_DE')) as value,
concat('R$ ',format(tpc.materialvalue,2,'de_DE')) as materialvalue,
tpc.duration,
tpc.ordem,
tpc.opinionsearch,
concat(tpc.materialpercentual,'%') as materialpercentual,
case when tpc.opinionsearch = 0 then 'Não' else 'Sim' end as pesquisa
FROM
courses c
inner join traineeprogramcourses tpc
on tpc.idcourses = c.idcourses
WHERE
tpc.idtraineeprogram = ${id} order by ordem`,
res,
req.originalUrl
);
})
router.post('/insert', verifyJWT, (req, res) => {
const idcourse = req.body.idcourses;
const value = parseFloat(req.body.value);
const materialvalue = parseFloat(req.body.materialvalue);
const duration = parseFloat(req.body.duration);
const order = req.body.ordem;
const opinionsearch = req.body.opinionsearch;
const materialpercentual = parseFloat(req.body.materialpercentual);
const idtraineeprogram = req.body.idtraineeprogram;
execSQLQuery(`INSERT INTO
traineeprogramcourses(
idcourses, value, materialvalue,
duration, ordem, opinionsearch,
materialpercentual, idtraineeprogram
) VALUES (
'${idcourse}','${value}','${materialvalue}',
'${duration}','${order}','${opinionsearch}',
'${materialpercentual}','${idtraineeprogram}'
)`,
res,
req.originalUrl
);
})
router.patch('/update/:id', verifyJWT, (req, res) => {
id = parseInt(req.params.id);
const idtraineeprogramcourses = req.body.idtraineeprogramcourses;
const idcourse = req.body.idcourses;
const value = parseFloat(req.body.value);
const materialvalue = parseFloat(req.body.materialvalue);
const duration = parseFloat(req.body.duration);
const order = req.body.ordem;
const opinionsearch = req.body.opinionsearch;
const materialpercentual = parseFloat(req.body.materialpercentual);
const idtraineeprogram = req.body.idtraineeprogram;
execSQLQuery(`
UPDATE traineeprogramcourses SET
idcourses = '${idcourse}',
value = '${value}',
materialvalue = '${materialvalue}',
duration = '${duration}',
ordem = ${order},
opinionsearch = ${opinionsearch},
materialpercentual = '${materialpercentual}',
idtraineeprogram = '${idtraineeprogram}'
WHERE idtraineeprogramcourses = ${id}`,
res,
req.originalUrl
);
})
router.patch('/attOrdem0', verifyJWT, (req, res) => {
const idtraineeprogramcourses = req.body.idtraineeprogramcourses;
const ordemagora = req.body.ordemagora;
execSQLQuery(`
UPDATE
traineeprogramcourses
SET
ordem = ${ordemagora}
WHERE
idtraineeprogramcourses = ${idtraineeprogramcourses}`,
res,
req.originalUrl
);
})
return router;
};
module.exports = routes;

View File

@ -0,0 +1,57 @@
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('/gettypecourse/:idtypescourse', verifyJWT, (req, res) => {
const idtypescourse = parseInt(req.params.idtypescourse);
execSQLQuery(`SELECT
*
FROM typescourse
WHERE idtypescourse = ${idtypescourse};`, res, req.originalUrl);
});
router.get('/getList', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
FROM typescourse;`, res, req.originalUrl);
});
router.post('/insert', verifyJWT, (req, res) => {
const idtypescourse = parseInt(req.body.idtypescourse);
const description = req.body.description;
const gradecalc = req.body.gradecalc;
const disabled = req.body.disabled ? 1 : 0;
execSQLQuery(`INSERT INTO typescourse(description, gradecalc, disabled) VALUES
(?, ?, ?);`, res, req.originalUrl, [description, gradecalc, disabled]);
});
router.patch('/update', verifyJWT, (req, res) => {
const idtypescourse = parseInt(req.body.idtypescourse);
const description = req.body.description;
const gradecalc = req.body.gradecalc;
const disabled = req.body.disabled ? 1 : 0;
execSQLQuery(`UPDATE typescourse SET
description = ?,
gradecalc = ?,
disabled = ?
WHERE idtypescourse = ?;`, res, req.originalUrl, [description, gradecalc, disabled, idtypescourse]);
});
router.get('/disable/:idtypescourse', verifyJWT, (req, res) => {
const idtypescourse = parseInt(req.params.idtypescourse);
execSQLQuery(`UPDATE typescourse SET
disabled = not disabled
WHERE idtypescourse = ${idtypescourse};`, res, req.originalUrl);
});
return router;
};
module.exports = routes;

View File

@ -0,0 +1,176 @@
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("/listLogin", (req, res) => {
execSQLQuery(
`SELECT
un.idunits,
un.description,
un.reference_db,
un.unityname,
un.ip_externo,
un.ip_local,
un.porta_mysql
FROM units un
WHERE un.idunits in (60);`,
res,
req.originalUrl
);
});
router.post('/authUser', (req, res) => {
const type = parseInt(req.body.type);
const password = encriptPassword(req.body.password);
const user = req.body.login;
this.id = type + user + password;
const db = req.body.db;
if (user == "190000" && password == encriptPassword("zoeteacher"))
{
execMySQLQueryLogin(`SELECT
'190000' as 'IDMatricula',
'maker2019' as 'SenhaIntranet',
'Sistema' as 'Nome',
4 as 'idusertype';`, res, req.originalUrl);
}
else {
const query = `SELECT
CAST(us.user AS UNSIGNED) AS IDMatricula,
'maker2019' AS SenhaIntranet,
us.Name AS Nome,
4 AS idusertype
FROM users us
WHERE us.user = '${user}' AND us.password = '${password}' AND us.idusertype = 18;`;
execMySQLQueryLogin(query, res, req.originalUrl);
}
});
router.get("/getRobotCourses", verifyJWT, (req, res) => {
execSQLQuery(
`SELECT
0 as 'IDMatricula',
idcourses as 'IDCurso',
name as 'NomeVersao',
aditional as 'Adicional',
extracourse as 'CursoExtra'
FROM courses
WHERE idtypescourse in (5, 8) and disabled = 0;`,
res,
req.originalUrl
);
});
router.get("/getRobotCourseByStudent/:idusers/:banco", verifyJWT, (req, res) => {
const idusers = parseInt(req.params.idusers);
const db = req.params.banco;
execSQLQuery(
`SELECT distinct
sc.idusers as IDMatricula,
co.idcourses as IDCurso,
co.name as NomeVersao
FROM studentCourses sc
INNER JOIN courses co on co.idcourses = sc.idcourses
WHERE sc.idusers = ${idusers} and co.disabled = 0;`,
res,
req.originalUrl
);
}
);
router.get("/getQtdeChamadas/:idusers/:idcourses/:db", verifyJWT, (req, res) => {
const idusers = parseInt(req.params.idusers);
const idcourses = req.params.idcourses;
const db = req.params.db;
let sqlQuery = `select
co.idcourses,
coalesce((select
sc.callCounter
from studentCall sc
inner join units un on un.idunits = sc.idunit
where sc.idusers = ${idusers} and sc.idcourses = co.idcourses and un.reference_db = '${db}'
), 0) as qtde_presencas
from courses co
where co.idcourses = ${idcourses};`;
execSQLQuery(sqlQuery, res, req.originalUrl);
}
);
router.get("/getClassEnByCourse/:idcourses/:qtd/:homework", verifyJWT, (req, res) => {
const idcourses = parseInt(req.params.idcourses);
const qtd = parseInt(req.params.qtd);
const homework = parseInt(req.params.homework);
execSQLQuery(
`SELECT
idclasses,
idcourses,
name,
case when disabled = 0 and ordem < ${qtd} and (viewed < 2 or ${qtd} != 100) then 0 else 1 end as disabled,
ordem,
description,
viewed,
aval,
download,
demo,
homework,
sprites
FROM classes
WHERE idcourses = ${idcourses} AND disabled = 0 and homework = ${homework}
ORDER BY ordem asc;`,
res,
req.originalUrl
);
}
);
router.get("/getClassEnByCourseAll/:idcourses/:qtd/:homework", verifyJWT, (req, res) => {
const idcourses = parseInt(req.params.idcourses);
const qtd = parseInt(req.params.qtd);
const homework = parseInt(req.params.homework);
execSQLQuery(
`SELECT
idclasses,
idcourses,
name,
case when (disabled = 0 or disabled = 1) and (viewed < 2 or ${qtd} != 100) then 0 else 1 end as disabled,
ordem,
description,
viewed,
aval,
download,
demo,
homework,
sprites
FROM classes
WHERE idcourses = ${idcourses} AND homework = ${homework}
ORDER BY ordem asc;`,
res,
req.originalUrl
);
}
);
router.get('/getZoeRobotsApks/:idzoerobots', (req, res) => {
const idzoerobots = req.params.idzoerobots;
mysqlConnection.query(
`SELECT * FROM zoerobotsapks where idzoerobots = ${idzoerobots};`,
function (error, results, fields) {
console.log(
new Date().toUTCString() + ' - ' + req.originalUrl + ' success 200'
);
res.send(`{"Aplicativos": ` + JSON.stringify(results) + `}`);
}
);
});
return router;
};
module.exports = routes;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,427 @@
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');
var accessToken = "b78050152a551b71665045f03a2161fa";
var clientSecret = "VumfHSuZcTIAe6hyvHgrRGv+UVX9xEQlX1HqFgiA+7DDhLIIXt1hjy2mP3Ht/MQyYs++ja8Ok5+aWabRRJ5uGY+dQDIlmZGeWpplffT6VowLOLe6JEYH4OLdmv5sNQtR";
var clientIDVimeo = "addbd91428cb667f7c5d50e47626ddb8554170cb";
router.use(bodyParser.urlencoded({
parameterLimit: 100000,
limit: '2000mb',
extended: true
}));
router.use(bodyParser.json({
parameterLimit: 100000,
limit: '2000mb',
extended: true
}));
const routes = function () {
router.get('/', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
FROM media;`, res, req.originalUrl);
});
router.get('/getAllMedia', (req, res) => {
execSQLQuery(`SELECT
*
FROM media;`, res, req.originalUrl);
});
router.get('/getMedia/:idmedia', verifyJWT, (req, res) => {
const idmedia = parseInt(req.params.idmedia);
execSQLQuery(`SELECT
*
FROM media
WHERE idmedia = ${idmedia};`, res, req.originalUrl);
});
router.get('/viewvideo/:_key', (req, res) => {
var _key = req.params._key;
execSQLQueryVideo(`SELECT * FROM videoaccess WHERE _key = '${_key}' AND expired = 0`, res, req.originalUrl);
});
router.post('/insertVA', verifyJWT, (req, res) => {
const idvideoaccess = req.body.idvideoaccess;
const _key = (req.body._key).trim();
const expired = req.body.expired ? 1 : 0;
const url = req.body.url;
const tag = req.body.tag;
execSQLQuery(`INSERT INTO videoaccess(_key, expired, url, tag)
VALUES (?, ?, ?, ?);`, res, req.originalUrl, [_key, expired, url, tag]);
});
router.patch('/updateVA', verifyJWT, (req, res) => {
const idvideoaccess = req.body.idvideoaccess;
const _key = (req.body._key).trim();
const expired = req.body.expired ? 1 : 0;
const url = req.body.url;
execSQLQuery(`UPDATE videoaccess SET
_key = ?,
expired = ?,
url = ?
WHERE idvideoaccess = ?;`, res, req.originalUrl, [_key, expired, url, idvideoaccess]);
});
router.get('/getVA/:tag', verifyJWT, (req, res) => {
const tag = req.params.tag;
execSQLQuery(`SELECT * FROM videoaccess WHERE tag = '${tag}' AND expired = 0;`, res, req.originalUrl);
});
router.post('/insertMedia', verifyJWT, (req, res) => {
const idmedia = req.body.idmedia;
const description = req.body.description;
const publishid = req.body.publishid;
const type = req.body.type;
execSQLQuery(`INSERT INTO media(description, publishid, type)
VALUES (?, ?, ?);`, res, req.originalUrl, [description, publishid, type]);
});
router.patch('/updateMedia', verifyJWT, (req, res) => {
const idmedia = req.body.idmedia;
const description = req.body.description;
const publishid = req.body.publishid;
const type = req.body.type;
execSQLQuery(`UPDATE media SET
description = ?,
publishid = ?,
type = ?
WHERE idmedia = ?;`, res, req.originalUrl, [description, publishid, type, idmedia]);
});
router.get('/backVideo/:idvideo/:Online', (req, res) => {
var idvideos = req.params.idvideo;
var dir = Variables('src_media') + 'videos/tmp/var/www/html/videos/' + idvideos + '.mp4';
const fs = require('fs');
if (fs.existsSync(dir)) {
console.log("Requisição de vídeo: " + idvideos);
res.send(true);
}
else {
const shell = require('shelljs');
shell.exec(`unzip -o -P "${Variables('passdecrypt')}" ${Variables('src_media')}videos/${idvideos}.zip -d ${Variables('src_media')}videos/tmp/`, function (ResExtract) {
console.log("RESULTADO: " + ResExtract);
if (ResExtract == 0) { // EXTRAIDO COM SUCESSO
shell.exec(`chmod -R 777 ${Variables('src_media')}videos/tmp/`);
if (fs.existsSync(dir)) {
console.log("Requisição de vídeo: " + idvideos);
res.send(true);
}
else {
res.send(false);
}
}
else { // ERRO AO EXTRAIR ( BAIXA O ARQUIVO DO SERVIDOR E REPRODUZ NO VIMEO )
shell.exec('cd ' + Variables('src_media') + 'videos/;wget http://18.228.91.135/videos/' + idvideos + '.zip', function (sucesso) {
console.log(sucesso);
});
res.send(false);
}
});
/*require('all-unpacker').unpack(Variables('src_media') + 'videos/' + idvideos + '.zip', {
targetDir: Variables('src_media') + 'videos/tmp/',
password: Variables('passdecrypt'),
forceOverwrite: true,
}, function(err, files, text) {
if (err) {
console.error(err);
shell.exec('cd ' + Variables('src_media') + 'videos/;wget http://18.228.91.135/videos/' + idvideos + '.zip', function (sucesso) {
console.log(sucesso);
});
if (check == 0) {
res.redirect("https://player.vimeo.com/video/" + idvideos);
}
else {
res.send(false);
}
}
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 vídeo: " + idvideos);
if (check == 0) {
res.setHeader('Content-Type', 'video/mp4');
res.send(data);
}
else {
res.send(true);
}
});
//res.redirect(dir);
};
});*/
}
});
router.get('/deleteVideo/:publishid', verifyJWT, (req, res) => {
const publishid = req.params.publishid;
let Vimeo = require('vimeo').Vimeo;
let client = new Vimeo(clientIDVimeo, clientSecret, accessToken);
client.request({
method: 'DELETE',
path: '/videos/' + publishid,
}, function (error, body, status_code, headers) {
mysqlConnection.query(`DELETE FROM media WHERE publishid = '${publishid}';`, function (error, results, fields) {
const fs = require('fs');
fs.unlink(Variables('src_media') + 'videos/' + publishid + '.zip', function(Sucesso) {
res.send(JSON.stringify({
"status": 200,
"error": error,
"response": results
}));
console.log(req.originalUrl + "/ success 200");
});
});
});
})
let uploads = {};
router.post('/uploadwithProgress', verifyJWT, (req, res, next) => {
let fs = require('fs');
let fileId = req.headers['x-file-id'];
let startByte = parseInt(req.headers['x-start-byte'], 10);
let name = req.headers['name'];
let fileSize = parseInt(req.headers['size'], 10);
let Copiar = req.headers['Copiar'] || "1";
let ext = '.mp4';
console.log('file Size', fileSize, fileId, startByte);
if (uploads[fileId] && fileSize == uploads[fileId].bytesReceived) {
res.end();
return;
}
console.log(fileSize);
if (!fileId) {
res.writeHead(400, "No file id");
res.end(400);
}
console.log(uploads[fileId]);
if (!uploads[fileId])
uploads[fileId] = {};
let upload = uploads[fileId]; //Bytes of file already present
let fileStream;
let Caminho = `${Variables('src_media')}videos/`;
let dir = `${Caminho}${name}`;
//checking bytes of file uploaded and sending to server
if (!startByte) {
upload.bytesReceived = 0;
let name = req.headers['name'];
fileStream = fs.createWriteStream(dir + ext, {
flags: 'w' //with "w"(write stream ) it keeps on adding data
});
} else {
if (upload.bytesReceived != startByte) {//if same name file is sent with different size it will not upload
res.writeHead(400, "Wrong start byte");
res.end(upload.bytesReceived);
return;
}
// append to existing file
fileStream = fs.createWriteStream(dir + ext, {
flags: 'a'
});
}
req.on('data', function (data) {
upload.bytesReceived += data.length; //adding length of data we are adding
});
req.pipe(fileStream);
// when the request is finished, and all its data is written
fileStream.on('close', function () {
console.log(upload.bytesReceived, fileSize);
if (upload.bytesReceived == fileSize) {
console.log("Upload finished");
delete uploads[fileId];
// can do something else with the uploaded file here
UploadVimeo(name, dir + ext, function(URI) {
if (URI == false) {
// ERRO
fs.unlink(dir + ext, function(Sucesso) {
res.send({ 'status': 'falhou' });
res.end();
})
}
else {
// SUCESSO
let novoNome = URI.split('/')[2];
if (Copiar == "1") {
fs.rename(dir + ext, Caminho + novoNome + ext, function(Sucesso) {
zipVideoSync(novoNome, Caminho + novoNome, function(Sucesso) {
res.send({ 'status': 'uploaded', 'uri': URI });
res.end();
});
})
}
else {
fs.unlink(dir + ext, function(Sucesso) {
res.send({ 'status': 'uploaded', 'uri': URI });
res.end();
})
}
}
})
} else {
// connection lost, leave the unfinished file around
console.log("File unfinished, stopped at " + upload.bytesReceived);
res.writeHead(500, "Server Error");
res.end();
}
});
// in case of I/O error - finish the request
fileStream.on('error', function (err) {
console.log("fileStream error", err);
res.writeHead(500, "File error");
res.end();
});
});
router.get('/status', verifyJWT, (req, res) => {
//console.log('Successfully came');
//From GET request 3 parameters below and store in variable
let fileId = req.headers['x-file-id'];
let name = req.headers['name'];
let fileSize = parseInt(req.headers['size'], 10);
console.log(name);
if (name) {
try {
let stats = fs.statSync(`${Variables('src_media')}videos/${name}`); //grabs file information and returns
//checking file exists or not
if (stats.isFile()) {
console.log(`fileSize is ${fileSize} and already uploaded file size ${stats.size}`);
if (fileSize == stats.size) {
res.send({ 'status': 'file is present' }) //returns if file exists
return;
}
if (!uploads[fileId])
uploads[fileId] = {}
console.log(uploads[fileId]);
uploads[fileId]['bytesReceived'] = stats.size;//checks total amount of file uploaded
console.log(uploads[fileId], stats.size);
}
} catch (er) {
}
}
let upload = uploads[fileId];
if (upload)
res.send({ "uploaded": upload.bytesReceived });//returns to FrontEnd amout of bytes uploaded
else
res.send({ "uploaded": 0 });
});
router.get('/SolucaoProblemas/:publishid/:tentativa', verifyJWT, (req, res) => {
const publishid = req.params.publishid;
const tentativa = parseInt(req.params.tentativa);
const fs = require('fs');
if (tentativa == 1) {
fs.unlink(Variables('src_media') + 'videos/tmp/var/www/html/videos/' + publishid + '.mp4', function(Sucesso) {
console.log("Video MP4 excluido com sucesso!");
res.send(true);
});
}
else {
fs.unlink(Variables('src_media') + 'videos/' + publishid + '.zip', function(Sucesso) {
console.log("Video ZIP excluido com sucesso!");
fs.unlink(Variables('src_media') + 'videos/tmp/var/www/html/videos/' + publishid + '.mp4', function(Sucesso) {
console.log("Video MP4 excluido com sucesso!");
res.send(true);
});
});
}
});
return router;
};
function UploadVimeo(description, oldpath, callback) {
let Vimeo = require('vimeo').Vimeo;
let client = new Vimeo(clientIDVimeo, clientSecret, accessToken);
client.upload(
oldpath,
{
'name': description,
'description': description
},
function (uri) {
console.log('Your video URI is: ' + uri);
callback(uri);
},
function (bytes_uploaded, bytes_total) {
var percentage = (bytes_uploaded / bytes_total * 100).toFixed(2)
console.log(bytes_uploaded, bytes_total, percentage + '%')
},
function (error) {
console.log('Failed because: ' + error)
callback(false);
})
}
function zipVideoSync(name, dir, callback) {
const fs = require('fs');
require('all-unpacker').pack(Variables('src_media') + 'videos/' + name + '.zip', {
targetDir: Variables('src_media') + 'videos/' + name + '.mp4',
password: Variables('passdecrypt'),
}, function(err, files, text) {
if (err) return console.error(err);
if (files) console.log('files', files);
if (text) {
console.log('text', text);
if(fs.unlinkSync(dir + '.mp4'))
console.log("Falha ao excluir");
else
console.log("Excluído com sucesso!");
callback(true);
};
});
}
module.exports = routes;
/*
//função pack - inserida no index.js da biblioteca all-unpacker//
unpackAll.pack = function pack(archiveFile, options, callback) {
if (!callback) return new Error('No callback function');
if (!archiveFile) archiveFile = options.archiveFile;
if (!archiveFile) return callback(Error("Error: archiveFile or options.archiveFile missing."), null);
if (!options) options = {};
var unar = options.unar;
if (!unar) unar = (process.platform != "linux") ? path.join(__dirname,'zip') : 'zip';
var ar = [unar];
if (options.password) {
ar.push('-P');
ar.push(options.password);
}
ar.push('SOURCEFILE');
var targetDir = options.targetDir;
ar.push(targetDir);
var cmd = quote(ar).replace('SOURCEFILE', archiveFile);
exec_unar(cmd, targetDir, callback);
};
*/

View File

@ -0,0 +1,427 @@
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('/getAllFormasAtendimento/:db', verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(`SELECT
*
FROM ${db}FormasAtendimento where IDFormaAtendimento > 100;`, res, req.originalUrl);
});
router.get('/getAllVeiculos/:db', verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(`SELECT
*
FROM ${db}Veiculos where IDVeiculo > 100;`, res, req.originalUrl);
});
router.get('/getAllProdutosVendas/:db', verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(`SELECT
*
FROM ${db}ProdutosVendas where IDProduto > 100;`, res, req.originalUrl);
});
router.get('/getAllResultadosAtendimento/:db', verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(`SELECT
*
FROM ${db}ResultadosAtendimento where IDResultadoAtendimento > 100;`, res, req.originalUrl);
});
router.get('/getAllFuncionarios/:db', verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(`SELECT
*
FROM ${db}Funcionarios;`, res, req.originalUrl);
});
router.post('/CadastrarControleDeVisita/:db', verifyJWT, (req, res) => {
const db = req.params.db;
const IDControle = parseInt(req.body.IDControle);
const IDFormaAtendimento = parseInt(req.body.IDFormaAtendimento);
const IDVeiculo = parseInt(req.body.IDVeiculo);
const IDProduto = parseInt(req.body.IDProduto);
const IDFuncionario = parseInt(req.body.IDFuncionario);
const Nome = req.body.Nome;
const Telefone = req.body.Telefone;
const CursoPraVoce = req.body.CursoPraVoce ? 1 : 0;
const Concluido = req.body.Concluido ? 1 : 0;
const CursoPraQuem = req.body.CursoPraQuem;
const Observacao = req.body.Observacao;
const Data = req.body.Data;
const Hora = req.body.Hora;
const PessoaFisica = req.body.PessoaFisica ? 1 : 0;
const IDPessoa = parseInt(req.body.IDPessoa);
const IDFuncionarioTelemarketing = parseInt(req.body.IDFuncionarioTelemarketing);
const IDAtendimento = parseInt(req.body.IDAtendimento) || 0;
const Celular = req.body.Celular;
const Email = req.body.Email;
execSQLQuery2(`INSERT INTO ${db}ControleAtendimento (IDControle, IDFormaAtendimento, IDVeiculo, IDProduto, IDFuncionario, Nome, Telefone, CursoPraVoce, Concluido, CursoPraQuem, Observacao, Data, Hora, PessoaFisica, IDPessoa, IDFuncionarioTelemarketing, IDAtendimento, Celular, Email)
VALUES (${IDControle}, ${IDFormaAtendimento}, ${IDVeiculo}, ${IDProduto}, ${IDFuncionario}, '${Nome}', '${Telefone}', ${CursoPraVoce}, ${Concluido}, '${CursoPraQuem}', '${Observacao}', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, ${PessoaFisica}, ${IDPessoa}, ${IDFuncionarioTelemarketing}, ${IDAtendimento}, '${Celular}', '${Email}');`, res, req.originalUrl);
});
router.patch('/AtualizarControleDeVisita/:db', verifyJWT, (req, res) => {
const db = req.params.db;
const IDControle = parseInt(req.body.IDControle);
const IdAtendimento = parseInt(req.body.IDAtendimento);
execSQLQuery2(`UPDATE ${db}ControleAtendimento SET IDAtendimento = ${IdAtendimento} WHERE IDControle = ${IDControle};`, res, req.originalUrl);
});
router.post('/CadastrarPessoa/:db', verifyJWT, (req, res) => {
const db = req.params.db;
const IDPessoa = parseInt(req.body.IDPessoa);
const IDFuncionarioCadastro = parseInt(req.body.IDFuncionarioCadastro);
const Nome = req.body.Nome;
const FoneResidencial = req.body.FoneResidencial;
const Celular = req.body.Celular;
execSQLQuery2(`INSERT INTO ${db}Pessoas (IDPessoa, IDResponsavel, IDFuncionarioCadastro, IDCupom, IDOrigemCadastro, Nome, NomeFantasia, Sexo, DataNascimento, Endereco, Complemento, Bairro, Cidade, CEP, UF, FoneResidencial, FoneComercial, Celular, Fax, CPF, RG, CGC, InscricaoEstadual, Profissao, EmpresaTrabalha, EnderecoEmpresa, BairroEmpresa, CidadeEmpresa, CEPEmpresa, UFEmpresa, NomePai, NomeMae, NomeConjugue, e_mail, Data, DataRetorno, ResponsavelEmpresa, Contato, PessoaFisica)
VALUES (${IDPessoa}, 0, ${IDFuncionarioCadastro}, 0, 0, '${Nome}', null, '', '1900-01-01', '', null, '', '', '', '', '${FoneResidencial}', '', '${Celular}', null, '', '', null, null, '', '', '', '', '', '', '', '', '', '', '', CURRENT_TIMESTAMP, null, null, null, 1);`, res, req.originalUrl);
});
router.post('/CadastrarAtendimento/:db', verifyJWT, (req, res) => {
const db = req.params.db;
const IdAtendimento = parseInt(req.body.IdAtendimento);
const IDAtendente = parseInt(req.body.IDAtendente);
const Resumo = req.body.Resumo;
const IDFormaAtendimento = parseInt(req.body.IDFormaAtendimento);
const IDResultadoAtendimento = parseInt(req.body.IDResultadoAtendimento);
const ProximoRetorno = req.body.ProximoRetorno;
const Finalizado = req.body.Finalizado ? 1 : 0;
const Concluido = req.body.Concluido ? 1 : 0;
const DataVisita = req.body.DataVisita;
const SQLInsert = `INSERT INTO ${db}Atendimentos (IdAtendimento, IDAtendente, DataHora, Data, Hora, Resumo, IDFormaAtendimento, IDResultadoAtendimento, ProximoRetorno, DataVisita, Finalizado, Concluido, IDFuncionarioCadastro) VALUES (${IdAtendimento}, ${IDAtendente}, CURRENT_TIMESTAMP, null, null, '${Resumo}', ${IDFormaAtendimento}, ${IDResultadoAtendimento}, ${(ProximoRetorno) ? "'" + ProximoRetorno + "'" : null}, '${DataVisita}', ${Finalizado}, ${Concluido}, null);`;
console.log(SQLInsert);
execSQLQuery2(SQLInsert, res, req.originalUrl);
});
router.post('/CadastrarAtendimentosCabecalho/:db', verifyJWT, (req, res) => {
const db = req.params.db;
const IdAtendimento = parseInt(req.body.IdAtendimento);
const IDPessoa = parseInt(req.body.IDPessoa);
const IDResultadoAtendimento = parseInt(req.body.IDResultadoAtendimento);
const ProximoRetorno = req.body.ProximoRetorno;
const Concluido = req.body.Concluido ? 1 : 0;
const IDFuncionarioCadastro = parseInt(req.body.IDFuncionarioCadastro);
execSQLQuery2(`INSERT INTO ${db}AtendimentosCabecalho (IdAtendimento, IDPessoa, IDResultadoAtendimento, ProximoRetorno, DataAtendimento, Concluido, SemInteresse, NivelInteresse, IDFuncionarioCadastro, IDTipoCurso, IDMatricula, Automatico) VALUES (${IdAtendimento}, ${IDPessoa}, ${IDResultadoAtendimento}, ${(ProximoRetorno) ? "'" + ProximoRetorno + "'" : null}, CURRENT_TIMESTAMP, ${Concluido}, 0, 0, ${IDFuncionarioCadastro}, 0, null, 0);`, res, req.originalUrl);
if (IDResultadoAtendimento == 102) {
sqlServerConnection.request().query(`update ${db}AtendimentosCabecalho set Concluido = 1 where IdAtendimento = ${IdAtendimento};`, function (error, results, fields) {
console.log("Fechou Matrícula");
});
}
});
router.post('/CadastrarPessoasProdutos/:db', verifyJWT, (req, res) => {
const db = req.params.db;
const IDProduto = parseInt(req.body.IDProduto);
const IDPessoa = parseInt(req.body.IDPessoa);
execSQLQuery2(`INSERT INTO ${db}PessoasProdutos (IDPessoa, IDProduto) VALUES (${IDPessoa}, ${IDProduto});`, res, req.originalUrl);
});
router.get('/getAllControleAtendimento/:db', verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(`SELECT
*
FROM ${db}ControleAtendimento
ORDER BY IDControle ASC;`, res, req.originalUrl);
});
router.get('/getAllPessoas/:db', verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(`SELECT
*
FROM ${db}Pessoas
ORDER BY IDPessoa ASC;`, res, req.originalUrl);
});
router.get('/getAllAtendimentos/:db', verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(`SELECT
*
FROM ${db}Atendimentos
ORDER BY IdAtendimento ASC;`, res, req.originalUrl);
});
router.post('/CadastrarVeiculo/:db', verifyJWT, (req, res) => {
const db = req.params.db;
const IDVeiculo = parseInt(req.body.IDVeiculo);
const Descricao = req.body.Descricao;
execSQLQuery2(`INSERT INTO ${db}Veiculos (IDVeiculo, Descricao) VALUES (${IDVeiculo}, '${Descricao}');`, res, req.originalUrl);
});
router.post('/getVisitasCadastradas/:db', verifyJWT, (req, res) => {
const IDFuncionario = parseInt(req.body.IDFuncionario);
const DataInicial = req.body.DataInicial;
const DataFinal = req.body.DataFinal;
const Tipo = req.body.Tipo;
const db = req.params.db;
let SQLServerQuery = `select distinct * from (
select distinct
ctd.IDControle,
--ctd.IDFormaAtendimento,
ctd.IDProduto,
ctd.IDPessoa,
ctd.IDVeiculo,
rat.Descricao as 'Resultado',
--fat.Descricao as 'FormaAtendimento',
--vei.Descricao as 'Divulgacao',
--pv.Descricao as 'Curso',
--fun.Nome as 'Funcionario',
ctd.Nome as 'Cliente',
ctd.Celular as 'Celular',
(convert(varchar, ctd.Data, 103) + ' ' + convert(varchar, ctd.Data, 8)) as 'DataL',
(convert(varchar, atd.ProximoRetorno, 103) + ' ' + convert(varchar, atd.ProximoRetorno, 8)) as 'Retorno',
ctd.Data,
atd.ProximoRetorno,
ctd.Observacao
/*from ${db}ControleAtendimento ctd
left join ${db}Atendimentos atd on atd.IdAtendimento = ctd.IDAtendimento and convert(varchar, atd.Data, 120) = convert(varchar, ctd.Data, 120)
left join ${db}PessoasProdutos pp on pp.IDPessoa = ctd.IDPessoa
left join ${db}ProdutosVendas pv on pv.IDProduto = ctd.IDProduto
left join ${db}ResultadosAtendimento rat on rat.IDResultadoAtendimento = atd.IDResultadoAtendimento
inner join ${db}FormasAtendimento fat on fat.IDFormaAtendimento = ctd.IDFormaAtendimento
inner join ${db}Veiculos vei on vei.IDVeiculo = ctd.IDVeiculo
inner join ${db}Funcionarios fun on fun.IDFuncionario = ctd.IDFuncionario*/
from ${db}ControleAtendimento ctd
left join ${db}Atendimentos atd on atd.IdAtendimento = ctd.IDAtendimento and convert(varchar, atd.DataVisita, 100) = convert(varchar, ctd.Data, 100)
--inner join ${db}PessoasProdutos pp on pp.IDPessoa = ctd.IDPessoa
--inner join ${db}ProdutosVendas pv on pv.IDProduto = pp.IDProduto
inner join ${db}ResultadosAtendimento rat on rat.IDResultadoAtendimento = atd.IDResultadoAtendimento
--inner join ${db}FormasAtendimento fat on fat.IDFormaAtendimento = ctd.IDFormaAtendimento
--inner join ${db}Veiculos vei on vei.IDVeiculo = ctd.IDVeiculo
--inner join ${db}Funcionarios fun on fun.IDFuncionario = ctd.IDFuncionario
where ${(IDFuncionario > 0) ? ('(ctd.IDFuncionarioTelemarketing = ' + IDFuncionario + ' or ctd.IDFuncionario = ' + IDFuncionario + ' or atd.IDAtendente = ' + IDFuncionario + ')') : '1=1'} and ${(DataInicial == null || DataFinal == null) ? '1=1' : Tipo + " between '" + DataInicial + " 00:00' and '" + DataFinal + " 23:59'"}
union all
select distinct
(select top 1 ctd2.IDControle from ${db}ControleAtendimento ctd2 where ctd2.IDAtendimento = atd.IDAtendimento) as 'IDControle',
(select top 1 ctd2.IDProduto from ${db}ControleAtendimento ctd2 where ctd2.IDAtendimento = atd.IDAtendimento) as 'IDProduto',
(select top 1 ctd2.IDPessoa from ${db}ControleAtendimento ctd2 where ctd2.IDAtendimento = atd.IDAtendimento) as 'IDPessoa',
(select top 1 ctd2.IDVeiculo from ${db}ControleAtendimento ctd2 where ctd2.IDAtendimento = atd.IDAtendimento) as 'IDVeiculo',
rat.Descricao as 'Resultado',
(select top 1 ctd2.Nome from ${db}ControleAtendimento ctd2 where ctd2.IDAtendimento = atd.IDAtendimento) as 'Cliente',
(select top 1 ctd2.Celular from ${db}ControleAtendimento ctd2 where ctd2.IDAtendimento = atd.IDAtendimento) as 'Celular',
(select top 1 (convert(varchar, ctd2.Data, 103) + ' ' + convert(varchar, ctd2.Data, 8)) from ${db}ControleAtendimento ctd2 where ctd2.IDAtendimento = atd.IDAtendimento) as 'DataL',
(convert(varchar, atd.ProximoRetorno, 103) + ' ' + convert(varchar, atd.ProximoRetorno, 8)) as 'Retorno',
(select top 1 ctd2.Data from ${db}ControleAtendimento ctd2 where ctd2.IDAtendimento = atd.IDAtendimento) as 'Data',
atd.ProximoRetorno,
(select top 1 ctd2.Observacao from ${db}ControleAtendimento ctd2 where ctd2.IDAtendimento = atd.IDAtendimento) as 'Observacao'
from ${db}Atendimentos atd
left join ${db}ResultadosAtendimento rat on rat.IDResultadoAtendimento = atd.IDResultadoAtendimento
where atd.IdAtendimento in (select IDAtendimento from ${db}ControleAtendimento where IDFuncionarioTelemarketing = ${IDFuncionario} and IDAtendimento != 0)
) R
where ${(Tipo == "ProximoRetorno") ? 'R.ProximoRetorno is not null' : '1=1'}
order by R.${Tipo} desc;`;
let NewSQLQuery = `select distinct
R.IDControle, max(R.IDProduto) as 'IDProduto', R.IDPessoa, R.IDVeiculo, R.Resultado, R.Cliente, R.Celular, R.DataL, R.Retorno, R.Data, R.ProximoRetorno, R.Observacao
from (
select distinct
ctd.IDControle,
(select top(1) pp.IDProduto from ${db}PessoasProdutos pp where pp.IDPessoa = ctd.IDPessoa order by IDProduto asc) as 'IDProduto',
ctd.IDPessoa,
ctd.IDVeiculo,
rat.Descricao as 'Resultado',
ctd.Nome as 'Cliente',
ctd.Celular as 'Celular',
(convert(varchar, ctd.Data, 103) + ' ' + convert(varchar, ctd.Data, 8)) as 'DataL',
(convert(varchar, atd.ProximoRetorno, 103) + ' ' + convert(varchar, atd.ProximoRetorno, 8)) as 'Retorno',
ctd.Data,
atd.ProximoRetorno,
atd.Resumo as 'Observacao'
from ${db}ControleAtendimento ctd
left join ${db}Atendimentos atd on atd.IdAtendimento = ctd.IDAtendimento and convert(varchar, atd.DataVisita, 100) = convert(varchar, ctd.Data, 100)
inner join ${db}ResultadosAtendimento rat on rat.IDResultadoAtendimento = atd.IDResultadoAtendimento
where 1=1 and 1=1
union all
select distinct
(select top 1 ctd2.IDControle from ${db}ControleAtendimento ctd2 where ctd2.IDAtendimento = atd.IDAtendimento) as 'IDControle',
(select top 1 ctd2.IDProduto from ${db}ControleAtendimento ctd2 where ctd2.IDAtendimento = atd.IDAtendimento) as 'IDProduto',
(select top 1 ctd2.IDPessoa from ${db}ControleAtendimento ctd2 where ctd2.IDAtendimento = atd.IDAtendimento) as 'IDPessoa',
(select top 1 ctd2.IDVeiculo from ${db}ControleAtendimento ctd2 where ctd2.IDAtendimento = atd.IDAtendimento) as 'IDVeiculo',
rat.Descricao as 'Resultado',
(select top 1 ctd2.Nome from ${db}ControleAtendimento ctd2 where ctd2.IDAtendimento = atd.IDAtendimento) as 'Cliente',
(select top 1 ctd2.Celular from ${db}ControleAtendimento ctd2 where ctd2.IDAtendimento = atd.IDAtendimento) as 'Celular',
(select top 1 (convert(varchar, ctd2.Data, 103) + ' ' + convert(varchar, ctd2.Data, 8)) from ${db}ControleAtendimento ctd2 where ctd2.IDAtendimento = atd.IDAtendimento) as 'DataL',
(convert(varchar, atd.ProximoRetorno, 103) + ' ' + convert(varchar, atd.ProximoRetorno, 8)) as 'Retorno',
(select top 1 ctd2.Data from ${db}ControleAtendimento ctd2 where ctd2.IDAtendimento = atd.IDAtendimento) as 'Data',
atd.ProximoRetorno,
atd.Resumo as 'Observacao'
from ${db}Atendimentos atd
left join ${db}ResultadosAtendimento rat on rat.IDResultadoAtendimento = atd.IDResultadoAtendimento
where atd.IdAtendimento in (select IDAtendimento from ${db}ControleAtendimento where IDFuncionarioTelemarketing = 0 and IDAtendimento != 0)
) R
where 1=1
group by R.IDControle, R.IDPessoa, R.IDVeiculo, R.Resultado, R.Cliente, R.Celular, R.DataL, R.Retorno, R.Data, R.ProximoRetorno, R.Observacao
order by R.Data desc;`;
let NewSQLQuery2 = `select distinct
ctd.IDControle,
(select top(1) pp.IDProduto from ${db}PessoasProdutos pp where pp.IDPessoa = ctd.IDPessoa order by IDProduto asc) as 'IDProduto',
ctd.IDPessoa,
ctd.IDVeiculo,
rat.Descricao as 'Resultado',
ctd.Nome as 'Cliente',
ctd.Celular as 'Celular',
(convert(varchar, ctd.Data, 103) + ' ' + convert(varchar, ctd.Data, 8)) as 'DataL',
(convert(varchar, atd.ProximoRetorno, 103) + ' ' + convert(varchar, atd.ProximoRetorno, 8)) as 'Retorno',
ctd.Data,
atd.ProximoRetorno,
atd.Resumo as 'Observacao'
from ${db}ControleAtendimento ctd
left join ${db}Atendimentos atd on atd.IdAtendimento = ctd.IDAtendimento and convert(varchar, atd. DataVisita, 100) = convert(varchar, ctd.Data, 100)
inner join ${db}ResultadosAtendimento rat on rat.IDResultadoAtendimento = atd.IDResultadoAtendimento
where 1=1 and 1=1
order by ctd.Data desc;`;
//console.log(SQLServerQuery);
execSQLQuery2(NewSQLQuery2, res, req.originalUrl);
});
router.get('/getAtendimentosPessoa/:Celular/:db', verifyJWT, (req, res) => {
const db = req.params.db;
const Celular = req.params.Celular;
execSQLQuery2(`select
atd.*
from ${db}Atendimentos atd
inner join ${db}ControleAtendimento cat on cat.IDAtendimento = atd.IdAtendimento
where cat.Celular = '${Celular}'
order by atd.DataHora desc;`, res, req.originalUrl);
});
router.get('/getVisitasAbertas/:idunits', verifyJWT, (req, res) => {
const idunits = parseInt(req.params.idunits);
execSQLQuery(`select *, date_format(data_checkin, '%Y-%m-%d %H:%i:%s') as 'DataL' from visitas where idunits = ${idunits} and checkout = 0 order by data_checkin desc;`, res, req.originalUrl);
});
router.post('/FazerCheckIn', verifyJWT, (req, res) => {
const idvisitas = req.body.idvisitas;
const idunits = parseInt(req.body.idunits);
const idcontrole = parseInt(req.body.idcontrole);
const idatendimento = parseInt(req.body.idatendimento);
const idformaatendimento = parseInt(req.body.idformaatendimento);
const idveiculo = parseInt(req.body.idveiculo);
const idproduto = parseInt(req.body.idproduto);
const idpessoa = parseInt(req.body.idpessoa);
const idresultadoatendimento = parseInt(req.body.idresultadoatendimento);
const nome = req.body.nome;
const telefone = req.body.telefone;
const checkin = req.body.checkin ? 1 : 0;
const data_checkin = req.body.data_checkin;
const idusers_checkin = parseInt(req.body.idusers_checkin);
const checkout = req.body.checkout ? 1 : 0;
const data_checkout = req.body.data_checkout;
const idusers_checkout = parseInt(req.body.idusers_checkout);
const retorno = req.body.retorno;
execSQLQuery(`insert into visitas (idunits, idcontrole, idformaatendimento, idveiculo, idproduto, idpessoa, nome, telefone, checkin, data_checkin, idusers_checkin) values (?, ?, ?, ?, ?, ?, ?, ?, ?, now(), ?);`, res, req.originalUrl, [idunits, idcontrole, idformaatendimento, idveiculo, idproduto, idpessoa, nome, telefone, checkin, idusers_checkin]);
});
router.post('/FazerCheckOut', verifyJWT, (req, res) => {
const idvisitas = parseInt(req.body.idvisitas);
const idunits = parseInt(req.body.idunits);
const idcontrole = parseInt(req.body.idcontrole);
const idatendimento = parseInt(req.body.idatendimento);
const idformaatendimento = parseInt(req.body.idformaatendimento);
const idveiculo = parseInt(req.body.idveiculo);
const idproduto = parseInt(req.body.idproduto);
const idpessoa = parseInt(req.body.idpessoa);
const idresultadoatendimento = parseInt(req.body.idresultadoatendimento);
const nome = req.body.nome;
const telefone = req.body.telefone;
const checkin = req.body.checkin ? 1 : 0;
const data_checkin = req.body.data_checkin;
const idusers_checkin = parseInt(req.body.idusers_checkin);
const checkout = req.body.checkout ? 1 : 0;
const data_checkout = req.body.data_checkout;
const idusers_checkout = parseInt(req.body.idusers_checkout);
const retorno = req.body.retorno;
execSQLQuery(`update visitas set
idatendimento = ?,
idproduto = ?,
idresultadoatendimento = ?,
checkout = ?,
data_checkout = now(),
idusers_checkout = ?,
retorno = ?
where idvisitas = ?;`, res, req.originalUrl, [idatendimento, idproduto, idresultadoatendimento, checkout, idusers_checkout, retorno, idvisitas]);
});
router.get('/getEnviosLeads/:idunits', verifyJWT, (req, res) => {
const idunits = parseInt(req.params.idunits);
execSQLQuery(`select idenviosleads, descricao, date_format(data_envio, '%d/%m/%Y %H:%i:%s') as 'data_envio' from enviosleads where idunits = ${idunits} order by data_envio desc;`, res, req.originalUrl);
});
router.delete('/deleteEnviosLeads/:idenviosleads', verifyJWT, (req, res) => {
const idenviosleads = parseInt(req.params.idenviosleads);
execSQLQuery(`delete from enviosleads where idenviosleads = ${idenviosleads};`, res, req.originalUrl);
});
router.post('/CadastrarEnvio', verifyJWT, (req, res) => {
const idunits = parseInt(req.body.idunits);
const descricao = req.body.descricao;
execSQLQuery(`insert into enviosleads (idunits, descricao) values (?, ?);`, res, req.originalUrl, [idunits, descricao]);
});
router.get('/getLeadsFranqueados/:idunits', verifyJWT, (req, res) => {
const idunits = parseInt(req.params.idunits);
execSQLQuery(`select lf.*, date_format(lf.insert_date, '%d/%m/%Y %H:%i:%s') as 'data_cadastro', case when lf.visto = 0 then 'Não' else 'Sim' end as 'status' from leadsfranqueados lf where lf.idunits = ${idunits} order by data_cadastro desc;`, res, req.originalUrl);
});
router.delete('/deleteLeadsFranqueados/:idleadsfranqueados', verifyJWT, (req, res) => {
const idleadsfranqueados = parseInt(req.params.idleadsfranqueados);
execSQLQuery(`delete from leadsfranqueados where idleadsfranqueados = ${idleadsfranqueados};`, res, req.originalUrl);
});
router.post('/CadastrarLeadFranqueado', verifyJWT, (req, res) => {
const idunits = parseInt(req.body.idunits);
const aluno = req.body.aluno;
const responsavel = req.body.responsavel;
const email = req.body.email;
const telefone1 = req.body.telefone1;
const telefone2 = req.body.telefone2;
const telefone3 = req.body.telefone3;
execSQLQuery(`insert into leadsfranqueados (idunits, aluno, responsavel, email, telefone1, telefone2, telefone3) values (?, ?, ?, ?, ?, ?, ?);`, res, req.originalUrl, [idunits, aluno, responsavel, email, telefone1, telefone2, telefone3]);
});
router.patch('/AtualizarLeadFranqueado', verifyJWT, (req, res) => {
const idleadsfranqueados = parseInt(req.body.idleadsfranqueados);
const aluno = req.body.aluno;
const responsavel = req.body.responsavel;
const email = req.body.email;
const telefone1 = req.body.telefone1;
const telefone2 = req.body.telefone2;
const telefone3 = req.body.telefone3;
const visto = req.body.visto ? 1 : 0;
execSQLQuery(`update leadsfranqueados set
aluno = ?,
responsavel = ?,
email = ?,
telefone1 = ?,
telefone2 = ?,
telefone3 = ?,
visto = ?
where idleadsfranqueados = ?;`, res, req.originalUrl, [aluno, responsavel, email, telefone1, telefone2, telefone3, visto, idleadsfranqueados]);
});
return router;
};
module.exports = routes;

10
forever.json Normal file
View File

@ -0,0 +1,10 @@
[
{
"uid": "zoe_api",
"append": true,
"watch": false,
"script": "server.js",
"sourceDir": "/var/www/zoe_api/",
"workingDir": "/var/www/zoe_api/"
}
]

118
helpers/CheckToken.js Normal file
View File

@ -0,0 +1,118 @@
require("dotenv-safe").load();
var jwt = require('jsonwebtoken');
//#region Encript
function LTrim(x) {
return x.replace(/^\s+/, "");
}
global.encriptPassword = function encriptPassword(password, amount = 10) {
return Cript(RPad(password, amount), " ");
}
function RPad(St, Tm) {
text = (LTrim(St) + " ").substr(0, Tm);
return text;
}
function Cript(St, Pw) {
x = "";
p = 0;
for (i = 0; i < St.length; i++) {
if (p > Pw.length) {
p = 1;
}
j = ord(Pw.substr(p, 1)) + 128;
n = ord(St.substr(i, 1));
x = x + Again(n, j);
p = 0;
}
return x;
}
function Again(n, j) {
exitloop = false;
while (exitloop == false) {
n = n ^ j;
if (n < 31) {
n = 128 + n;
} else if ((n > 127) && (n < 159)) {
n = n - 128;
} else {
exitloop = true;
}
}
return String.fromCharCode(n);
}
function ord(string) {
var str = string + ''
var code = str.charCodeAt(0)
if (code >= 0xD800 && code <= 0xDBFF) {
var hi = code
if (str.length === 1) {
return code
}
var low = str.charCodeAt(1)
return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000
}
if (code >= 0xDC00 && code <= 0xDFFF) {
return code
}
return code
}
//#endregion
global.verifyJWT = function verifyJWT(req, res, next) {
//console.log(req.headers.token);
var token = decodeURI(req.headers.token);
if(!token)
token = req.params.tk || req.body.token;
//console.log(token);
//token = encriptPassword(token, token.length);
//console.log(token);
if (!token) return res.status(401).send({ auth: false, message: 'Não foi enviado token' });
jwt.verify(token, process.env.SECRET, function (err, decoded) {
if (err) {
//console.log(err);
res.status(200).send({ status: 'expired' });
}
else {
req.idusers = decoded.id;
next();
}
});
}
global.fixApostrofe = function fixApostrofe(content) {
for (let i = 0; i < 20; i++) {
content = content.replace("'", '&apos;');
}
return content;
}
global.fixAspas = function fixAspas(content) {
for (let i = 0; i < 20; i++) {
content = content.replace('"', '&quot;');
}
return content;
}
global.replaceAll = function ReplaceAll(Texto, Palavras, TrocarPor, Vezes) {
for (let i = 0; i < Vezes; i++) {
for (let o = 0; o < Palavras.length; o++) {
Texto = Texto.replace(Palavras[o], TrocarPor[o]);
}
}
return Texto;
}

103
helpers/config.js Normal file
View File

@ -0,0 +1,103 @@
var Online = true; // MODO PRODUCAO - ACESSA O BANCO ONLINE QUANDO TRUE - ACESSA O BANCO LOCAL QUANDO FALSE
var linux = true; // MODO DESENVOLVIMENTO - TRUE PARA LINUX OU FALSE PARA WINDOWS
var passdecrypt = ""; // CHAVE DE DESCRIPTOGRAFIA DOS VIDEOS - ADIQUIRE VALOR COM CONSULTA AO BANCO
var porta_mysql = "3306"; // PORTA PADRAO MYSQL
var tk_fixed = ""; // TOKEN FIXO - ADIQUIRE VALOR COM CONSULTA AO BANCO
global.Variables = function Variables(data) {
var ret;
switch (data) {
case 'passdecrypt':
ret = passdecrypt;
break;
case 'tk_fixed':
ret = tk_fixed;
break;
case 'portHttp':
ret = 3337;
break;
case 'portHttps':
ret = 1338;
break;
case 'time_token':
ret = 36000; // 9000 = 2,5 horas
break;
case 'src_qrcodes':
ret = 'http://18.228.91.135/qrlotes/';
break;
case 'ip_mysql':
if(Online == true)
ret = '18.228.91.135';
//ret = '10.23.0.79';
else
ret = '127.0.0.1';
break;
case 'user_mysql':
if(Online == true)
ret = 'root';
else
ret = 'myrobot';
break;
case 'password_mysql':
if(Online == true)
//ret = '123123';
ret = 'maker2018**==';
else
ret = 'myrobot2019';
break;
case 'database_mysql':
ret = 'myrobot';
break;
case 'ip_sqlServer':
ret = '18.231.41.93';
break;
case 'porta_mysql':
ret = porta_mysql;
break;
case 'user_sqlServer':
ret = 'Usuario';
break;
case 'password_sqlServer':
ret = 'AbbAchUs';
break;
case 'src_media':
if(linux == false)
ret = 'C:/var/www/html/';
else
ret = '/var/www/html/';
break;
case 'src_fotos':
if(linux == false)
ret = 'C:/var/www/fotos/';
else
ret = '/var/www/fotos/';
break;
case 'local':
if(Online == true)
ret = 'Online';
else
ret = 'Local';
break;
case 'linux':
ret = linux;
break;
}
return ret;
}
global.Variables_Set = function Variables_Set(Variavel, Valor) {
switch (Variavel) {
case "local":
Online = Valor;
break;
}
}
// CONSULTA VALORES PADROES NO BANCO
require('../connections/mysql-server');
mysqlConnection.query(`SELECT * FROM config;`, function (error, results, fields) {
if (!error && results.length > 0) {
passdecrypt = results[0]['passdecrypt'];
tk_fixed = results[0]['tk_fixed'];
}
})

View File

@ -0,0 +1,28 @@
var fs = require('fs');
var JsBarcode = require('jsbarcode');
var { createCanvas } = require("canvas");
var canvas = createCanvas();
var JSZip = require("jszip");
var zip = new JSZip();
function NovoGeradorBarCode(numBarCodeGerado) {
for (i = 0; i < numBarCodeGerado; i++) {
let random = Math.random();
console.log(random);
let date = new Date;
random = random.toString().match(/[^.][0-9]{6}/)[0];
let month = (date.getMonth() + 1).toString().padStart(2, "0");
let day = date.getDate().toString().padStart(2, "0");
let milli = date.getMilliseconds().toString().slice(1,3);
let barCode = random.concat(month, day, milli);
console.log('barcode',barCode);
JsBarcode(canvas, barCode);
zip.file(`barcode_${i}.png`, canvas.toBuffer());
}
zip.generateNodeStream({type:'nodebuffer',streamFiles:true})
.pipe(fs.createWriteStream('C:\\Users\\Maker\\Desktop\\out.zip'))
.on('finish', function () {
console.log("out.zip written.");
});
}

333
helpers/helper.js Normal file
View File

@ -0,0 +1,333 @@
class Helpers {
constructor() {
var jwt = require('jsonwebtoken');
}
verifyJWT(req, res, next){
var token = req.headers['x-access-token'];
if (!token) return res.status(401).send({ auth: false, message: 'Não foi enviado token' });
jwt.verify(token, process.env.SECRET, function(err, decoded) {
if (err) return res.status(500).send({ auth: false, message: 'Falha na autenticação do token' });
// se tudo estiver ok, salva no request para uso posterior
req.idusers = decoded.id;
next();
});
}
}
module.exports = Helpers;
/* index.js da biblioteca all-unpacker
(function () {
'use strict';
// see http://unarchiver.c3.cx/commandline
// unar and lsar
var log = require('npmlog');
var path = require('path');
var exec = require('child_process').exec;
var os = require('os');
// from http://github.com/substack/node-shell-quote, needed to remove more escaping
var map = require('array-map');
function quote(xs) {
return map(xs, function (s) {
return String(s).replace(/([#!"$&'(),;<=>?@\[\\\]^`{|}])/g, '\\$1');
}).join(' ');
};
//
module.exports = unpackAll.list = unpackAll;
var archiveTypePattern = /: [A-Z,7]*$/g;
var escapeFileName = function(s) {
return '"'+s+'"';
//if (isWindows()) return '"'+s+'"';
//// '"'+cmd.replace(/(["\s'$`\\])/g,'\\$1')+'"'
//return s;
};
var isInt = function isInt(x) {
return !isNaN(x) && eval(x).toString().length == parseInt(eval(x)).toString().length;
};
unpackAll.defaultListFilter = function defaultListFilter(s) {
return s && s != ''
&& s.indexOf('\r') == -1
&& s.indexOf('\n') == -1
&& !s.match(archiveTypePattern);
};
function exec_unar(runcmd, extractDir, docallback) {
exec(runcmd, function (err, stdout, stderr) {
if (err) return docallback(Error(err), null);
if (stderr && stderr.length > 0) return docallback(Error('Error: ' + stderr), null);
if (stdout && stdout.length > 0) {
if (stdout.indexOf('No files extracted')>=1) return docallback(Error('Error: No files extracted'), null);
}
return docallback(null, extractDir, stdout);
});
}
unpackAll.pack = function pack(archiveFile, options, callback) {
if (!callback) return new Error('No callback function');
if (!archiveFile) archiveFile = options.archiveFile;
if (!archiveFile) return callback(Error("Error: archiveFile or options.archiveFile missing."), null);
if (!options) options = {};
var unar = options.unar;
if (!unar) unar = (process.platform != "linux") ? path.join(__dirname,'zip') : 'zip';
var ar = [unar];
if (options.password) {
ar.push('-P');
ar.push(options.password);
}
ar.push('SOURCEFILE');
var targetDir = options.targetDir;
ar.push(targetDir);
var cmd = quote(ar).replace('SOURCEFILE', archiveFile);
exec_unar(cmd, targetDir, callback);
};
unpackAll.unpackZip = function unpackZip(archiveFile, options, callback) {
if (!callback) return new Error('No callback function');
if (!archiveFile) archiveFile = options.archiveFile;
if (!archiveFile) return callback(Error("Error: archiveFile or options.archiveFile missing."), null);
if (!options) options = {};
var unar = options.unar;
if (!unar) unar = (process.platform != "linux") ? path.join(__dirname,'unzip') : 'unzip';
var ar = [unar];
if (options.password) {
ar.push('-P');
ar.push(options.password);
}
ar.push('SOURCEFILE');
if (options.forceDirectory) ar.push('-d');
var targetDir = options.targetDir;
ar.push(targetDir);
var cmd = quote(ar).replace('SOURCEFILE', archiveFile);
exec_unar(cmd, targetDir, callback);
};
unpackAll.unpack = function unpack(archiveFile, options, callback) {
if (!callback) return new Error('No callback function');
if (!archiveFile) archiveFile = options.archiveFile;
if (!archiveFile) return callback(Error("Error: archiveFile or options.archiveFile missing."), null);
if (!options) options = {};
// Unar command:
var unar = options.unar;
if (!unar) unar = (process.platform != "linux") ? path.join(__dirname,'unar') : 'unar';
var ar = [unar];
// Archive file (source):
ar.push('SOURCEFILE');
//ar.push(archiveFile);
// -output-directory (-o) <string>: The directory to write the contents of the archive to. Defaults to the current directory.
ar.push('-o');
var targetDir = options.targetDir;
if (!targetDir) targetDir = path.join(os.tmpdir(), 'tmp');
ar.push(targetDir);
// -force-overwrite (-f): Always overwrite files when a file to be unpacked already exists on disk. By default, the program asks the user if possible, otherwise skips the file.
if (options.forceOverwrite) ar.push('-f');
// -force-rename (-r): Always rename files when a file to be unpacked already exists on disk.
if (options.forceRename) ar.push('-r');
// -force-skip (-s): Always skip files when a file to be unpacked already exists on disk.
if (options.forceSkip) ar.push('-s');
// -force-directory (-d): Always create a containing directory for the contents of the unpacked archive. By default, a directory is created if there is more than one top-level file or folder.
if (options.forceDirectory) ar.push('-d');
// -no-directory (-D): Never create a containing directory for the contents of the unpacked archive.
if (options.noDirectory) ar.push('-D');
// -no-recursion (-nr): Do not attempt to extract archives contained in other archives. For instance, when unpacking a .tar.gz file, only unpack the .gz file and not its contents.
if (options.noRecursion) ar.push('-nr');
// -copy-time (-t): Copy the file modification time from the archive file to the containing directory, if one is created.
if (options.copyTime) ar.push('-t');
// -quiet (-q): Run in quiet mode.
if (options.quiet) ar.push('-q');
// -password (-p) <string>: The password to use for decrypting protected archives.
if (options.password) {
ar.push('-p');
ar.push(options.password);
}
// -password-encoding (-E) <name>: The encoding to use for the password for the archive, when it is not known. If not specified, then either the encoding given by the -encoding option or the auto-detected encoding is used.
if (options.passwordEncoding) {
ar.push('-E');
ar.push(options.passwordEncoding);
}
// -encoding (-e) <encoding name>: The encoding to use for filenames in the archive, when it is not known. If not specified, the program attempts to auto-detect the encoding used. Use "help" or "list" as the argument to give
if (options.encoding) {
ar.push('-e');
ar.push(options.encoding);
}
if (options.indexes) {
// -indexes (-i): Instead of specifying the files to unpack as filenames or wildcard patterns, specify them as indexes, as output by lsar.
if (Array.isArray(options.indexes)) {
options.indexes.forEach(function (idx) {
ar.push('-i');
ar.push(''+idx); // string!
});
} else if (isInt(options.indexes)) {
console.error('options.indexes must be an array of integer, but it is: ' + JSON.stringify(options.indexes))
}
} else if (options.files) {
if (Array.isArray(options.files)) {
options.files.forEach(function (s) {
ar.push(s);
});
} else {
ar.push(options.files);
}
}
//if (!options.quiet) log.info('command', quote(ar));
var cmd = quote(ar).replace('SOURCEFILE', archiveFile);
//if (!options.quiet) log.info('cmd', cmd);
exec_unar(cmd, targetDir, callback);
}; // unpackAll.unpack
unpackAll.unpackonly = function unpackonly(archiveFile, unpackDir, unpackOnly, callback) {
if (!callback) return new Error('No callback function');
if (!archiveFile) return callback(Error("Error: archiveFile missing."), null);
if (!unpackDir) return callback(Error("Error: target Directory missing."), null);
if (!unpackOnly) return callback(Error("Error: files or directory to extract form archive missing."), null);
// Unar command:
var unar = (process.platform != "linux") ? path.join(__dirname,'unar') : 'unar';
var ar = [unar];
// Archive file (source):
ar.push('SOURCEFILE');
//ar.push(archiveFile);
// -output-directory (-o) <string>: The directory to write the contents of the archive to. Defaults to the current directory.
ar.push('-o');
ar.push(unpackDir);
// -force-overwrite (-f): Always overwrite files when a file to be unpacked already exists on disk. By default, the program asks the user if possible, otherwise skips the file.
ar.push('-f');
// -no-directory (-D): Never create a containing directory for the contents of the unpacked archive.
ar.push('-D');
// -copy-time (-t): Copy the file modification time from the archive file to the containing directory, if one is created.
ar.push('-t');
if (unpackOnly) {
if (Array.isArray(unpackOnly)) {
unpackOnly.forEach(function (s) {
ar.push(s);
});
} else {
ar.push(unpackOnly);
}
}
//log.info('command', quote(ar));
var cmd = quote(ar).replace('SOURCEFILE', escapeFileName(archiveFile));
//log.info('cmd', cmd);
exec_unar(cmd, unpackDir, callback);
}; // unpackAll.unpackonly
unpackAll.list = function list(archiveFile, options, callback) {
if (!callback) return new Error('No callback function');
if (!archiveFile) archiveFile = options.archiveFile;
if (!archiveFile) return callback(Error("Error: archiveFile or options.archiveFile missing."), null);
if (!options) options = {};
// Usar command:
var lsar = options.lsar;
if (!lsar) lsar = (process.platform != "linux") ? path.join(__dirname,'lsar') : 'lsar';
var ar = [lsar];
// Archive file (source):
ar.push('SOURCEFILE');
// -no-recursion (-nr): Do not attempt to extract archives contained in other archives. For instance, when unpacking a .tar.gz file, only unpack the .gz file and not its contents.
if (options.noRecursion) ar.push('-nr');
// -password (-p) <string>: The password to use for decrypting protected archives.
if (options.password) {
ar.push('-p');
ar.push(options.password);
}
// -password-encoding (-E) <name>: The encoding to use for the password for the archive, when it is not known. If not specified, then either the encoding given by the -encoding option or the auto-detected encoding is used.
if (options.passwordEncoding) {
ar.push('-E');
ar.push(options.passwordEncoding);
}
// -encoding (-e) <encoding name>: The encoding to use for filenames in the archive, when it is not known. If not specified, the program attempts to auto-detect the encoding used. Use "help" or "list" as the argument to give
if (options.encoding) {
ar.push('-e');
ar.push(options.encoding);
}
// -print-encoding (-pe): Print the auto-detected encoding and the confidence factor after the file list
if (options.printEncoding) {
ar.push('-pe');
ar.push(options.printEncoding);
}
// -json (-j): Print the listing in JSON format.
if (options.json) ar.push('-j');
// -json-ascii (-ja): Print the listing in JSON format, encoded as pure ASCII text.
if (options.jsonAscii) ar.push('-ja');
var cmd = quote(ar).replace('SOURCEFILE', escapeFileName(archiveFile));
if (!options.quiet) log.info('cmd', cmd);
exec(cmd, function (err, stdout, stderr) {
if (err) return callback(Error(err), null);
if (stderr && stderr.length > 0) return callback(Error('Error: ' + stderr), null);
var lines = stdout.split(/(\r?\n)/g);
if (lines.length > 0) {
var files = lines.filter(unpackAll.defaultListFilter);
return callback(null, files);
} else {
return callback(Error('Error: no files foound in archive. ' + stderr), null);
}
});
}; // unpackAll.list
unpackAll();
function unpackAll() {
}
})();
*/

3
helpers/mycsv.csv Normal file
View File

@ -0,0 +1,3 @@
FIRSTLINE;SECONDLINE
D28B 6277;B8F2 3011
BE2B 6277;48F1 3011
1 FIRSTLINE SECONDLINE
2 D28B 6277 B8F2 3011
3 BE2B 6277 48F1 3011

115
helpers/serialBook.js Normal file
View File

@ -0,0 +1,115 @@
const { v4: uuidv4 } = require("uuid");
const fs = require("fs");
const { stringify } = require("csv-stringify");
let columns = {
fisrt: "FIRSTLINE",
second: "SECONDLINE",
};
var serialList = [];
function genSerialList(quantity, results) {
let oldValues = [];
Object.values(results).forEach((element) => {
oldValues.push(element.serial);
});
serialList = [];
return new Promise((resolve, reject) => {
while (serialList.length < quantity) {
let uui = uuidv4();
uui = uui.replace(/-/gm, "");
uui = uui.toUpperCase();
let milliseconds = Date.now().toString();
milliseconds = milliseconds.match(/[0-9]{4}/gm);
let partition = uui.match(/[0-9A-Z]{4}/gm);
let head = partition[0].concat(
" ",
milliseconds[1],
" ",
partition[1],
" ",
milliseconds[2]
);
let body = partition[2].concat(
" ",
milliseconds[1],
" ",
partition[3],
" ",
milliseconds[2]
);
let legs = partition[4].concat(
" ",
milliseconds[1],
" ",
partition[5],
" ",
milliseconds[2]
);
let tail = partition[6].concat(
" ",
milliseconds[1],
" ",
partition[7],
" ",
milliseconds[2]
);
let now = new Date();
oldValues.includes(head)
? ""
: serialList.push({ serial: head, createdAt: now, updatedAt: now });
oldValues.includes(body)
? ""
: serialList.push({ serial: body, createdAt: now, updatedAt: now });
oldValues.includes(legs)
? ""
: serialList.push({ serial: legs, createdAt: now, updatedAt: now });
oldValues.includes(tail)
? ""
: serialList.push({ serial: tail, createdAt: now, updatedAt: now });
}
serialList = serialList.slice(0, quantity);
resolve(serialList);
});
}
function generateCSV(list) {
return new Promise((resolve, reject) => {
let filename = `${__dirname}\\mycsv.csv`;
let data = [];
Object.values(list).forEach((element) => {
let partSerial = element.serial.match(/[0-9A-Z]{4}/gm);
data.push([
partSerial[0].concat(" ", partSerial[1]),
partSerial[2].concat(" ", partSerial[3]),
]);
});
stringify(
data,
{
header: true,
columns: columns,
delimiter: ";",
},
(err, output) => {
if (err) {
reject(err);
}
fs.writeFile(filename, output, (err) => {
if (err) {
reject(err);
}
resolve(filename);
});
}
);
});
}
module.exports = {
genSerialList,
generateCSV,
};

9701
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

72
package.json Normal file
View File

@ -0,0 +1,72 @@
{
"name": "myrobot_api",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"@google-cloud/speech": "^4.2.0",
"alexa-sdk": "^1.0.25",
"alexa-verifier": "^2.0.1",
"alexa-verifier-middleware": "^1.0.2",
"all-unpacker": "^0.1.2",
"angularx-qrcode": "^1.5.3",
"archiver": "^3.0.0",
"ask-sdk-core": "^2.7.0",
"ask-sdk-model": "^1.18.0",
"async": "^2.6.2",
"base-64": "^0.1.0",
"base64-img": "^1.0.4",
"base64-to-image": "^1.0.2",
"base64topdf": "^1.1.8",
"body-parser": "^1.19.0",
"canvas": "^2.9.1",
"cors": "^2.8.5",
"csv-stringify": "^6.1.0",
"del": "^4.1.1",
"dotenv-safe": "^6.1.0",
"express": "^4.17.1",
"express-formidable": "^1.2.0",
"express-routes-map": "0.0.1",
"fastest-levenshtein": "^1.0.12",
"file-base64": "^1.0.0",
"forever": "^1.0.0",
"formidable": "^1.2.1",
"gzipme": "^0.1.2",
"ibm-watson": "^6.0.0",
"joi": "^13.7.0",
"jsbarcode": "^3.11.5",
"jsonwebtoken": "^8.5.1",
"jszip": "^3.10.0",
"lokijs": "^1.5.6",
"minizip-asm.js": "^1.0.10",
"mp3-to-wav": "^0.1.11",
"mssql": "^4.3.7",
"multer": "^1.4.1",
"mysql": "^2.18.1",
"ng2-file-upload": "^1.3.0",
"node-7z": "^1.1.0",
"node-7z-forall": "^1.0.0",
"node-lame": "^1.2.0",
"node-unrar": "^0.1.5",
"nodemailer": "^4.7.0",
"nodemon": "^1.19.4",
"rand-token": "^0.4.0",
"rimraf": "^2.6.3",
"rxjs-compat": "^6.5.2",
"shelljs": "^0.8.3",
"striptags": "^3.1.1",
"tedious": "^2.7.1",
"unrar": "^0.1.7",
"unrar-promise": "^2.0.1",
"unzip": "^0.1.11",
"unzipper": "^0.9.15",
"vimeo": "^2.1.1",
"winrarjs": "0.0.16",
"xmlhttprequest": "^1.8.0"
}
}

160
server.js Normal file
View File

@ -0,0 +1,160 @@
require("./helpers/config");
const express = require("express");
const https = require("https");
const http = require("http");
const fs = require("fs");
const app = express();
const portHttp = Variables("portHttp");
const portHttps = Variables("portHttps");
const cors = require("cors");
const bodyParser = require("body-parser");
const cluster = require("cluster");
const numCPUs = require("os").cpus().length;
let HttpsLigado = false;
var corsOptions = {
origin: "*",
optionsSuccessStatus: 200,
};
app.use(cors(corsOptions));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
res.header(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept, Authorization"
);
next();
});
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on("exit", (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
console.log(`Worker ${process.pid} started`);
app.get("/cluster", (req, res) => {
let worker = cluster.worker.id;
res.send(`Running on worker with id ==> ${worker}`);
});
http.createServer(app).listen(portHttp, function () {
console.log("API running success");
});
if (HttpsLigado) {
var httpsOptions = {
key: fs.readFileSync("/etc/ca-certificates/myrobotlab_com_br.key"),
cert: fs.readFileSync("/etc/ca-certificates/myrobotlab_com_br.crt"),
};
https.createServer(httpsOptions, app).listen(portHttps);
}
}
const unityController = require("./controllers/unityController")();
const courseController = require("./controllers/courseController")();
const addressController = require("./controllers/addressController")();
const classController = require("./controllers/classController")();
const sqlServerController = require("./controllers/sqlServerController")();
const productsController = require("./controllers/productsController")();
const loginController = require("./controllers/loginController")();
const exerciseController = require("./controllers/exerciseController")();
const questionController = require("./controllers/questionController")();
const answerController = require("./controllers/answerController")();
const traineeprogramController = require("./controllers/traineeprogramController")();
const traineeprogramcoursesController = require("./controllers/traineeprogramcoursesController")();
const textController = require("./controllers/textController")();
const classescontentController = require("./controllers/classescontentController")();
const videoController = require("./controllers/videoController")();
const usersController = require("./controllers/usersController")();
const emailController = require("./controllers/emailController")();
const typescourseController = require("./controllers/typescourseController")();
const migrationController = require("./controllers/migrationController")();
const slidesController = require("./controllers/slidesController")();
const conceptsController = require("./controllers/conceptsController")();
const teacherController = require("./controllers/teacherController")();
const franchiseeController = require("./controllers/franchiseeController")();
const appController = require("./controllers/appController")();
const qrController = require("./controllers/qrController")();
const curiositiesController = require("./controllers/curiositiesController")();
const barcodeController = require("./controllers/barcodeController")();
const elloController = require("./controllers/elloController")();
const fileController = require("./controllers/fileController")();
const alexaController = require("./controllers/alexaController")();
const animationsController = require("./controllers/animationsController")();
const iyrcController = require("./controllers/iyrcController")();
const chatController = require("./controllers/chatController")();
const chamadaController = require("./controllers/chamadaController")();
const holidayController = require("./controllers/holidayController")();
const charactersController = require("./controllers/charactersController")();
const visitasController = require("./controllers/visitasController")();
const chattimeController = require("./controllers/chattimeController")();
const relatorioController = require("./controllers/relatorioController")();
const configController = require("./controllers/configController")();
const listenrepeatController = require("./controllers/listenrepeatController")();
const customizeController = require("./controllers/customizeController")();
const ig40Controller = require("./controllers/ig40Controller")();
const permissoesController = require("./controllers/permissoesController")();
const agendaController = require("./controllers/agendaController")();
const studentController = require("./controllers/studentController")();
const unileverController = require("./controllers/unileverController")();
app.use("/api/units", unityController);
app.use("/api/courses", courseController);
app.use("/api/address", addressController);
app.use("/api/classes", classController);
app.use("/api/sqlserver", sqlServerController);
app.use("/api/products", productsController);
app.use("/api/access", loginController);
app.use("/api/exercises", exerciseController);
app.use("/api/questions", questionController);
app.use("/api/answers", answerController);
app.use("/api/products", productsController);
app.use("/api/traineeprogram", traineeprogramController);
app.use("/api/traineeprogramcourses", traineeprogramcoursesController);
app.use("/api/text", textController);
app.use("/api/classescontent", classescontentController);
app.use("/api/videos", videoController);
app.use("/api/email", emailController);
app.use("/api/typescourse", typescourseController);
app.use("/api/migration", migrationController);
app.use("/api/users", usersController);
app.use("/api/slides", slidesController);
app.use("/api/concepts", conceptsController);
app.use("/api/teacher", teacherController);
app.use("/api/franchisee", franchiseeController);
app.use("/api/app", appController);
app.use("/api/qr", qrController);
app.use("/api/curiosities", curiositiesController);
app.use("/api/barcode", barcodeController);
app.use("/api/ello", elloController);
app.use("/api/files", fileController);
app.use("/api/alexa", alexaController);
app.use("/api/animations", animationsController);
app.use("/api/iyrc", iyrcController);
app.use("/api/chat", chatController);
app.use("/api/chamadas", chamadaController);
app.use("/api/holidays", holidayController);
app.use("/api/characters", charactersController);
app.use("/api/visitas", visitasController);
app.use("/api/chattime", chattimeController);
app.use("/api/relatorios", relatorioController);
app.use("/api/config", configController);
app.use("/api/listenrepeat", listenrepeatController);
app.use("/api/customize", customizeController);
app.use("/api/ig40", ig40Controller);
app.use("/api/permissoes", permissoesController);
app.use("/api/agenda", agendaController);
app.use("/api/student", studentController);
app.use("/api/unilever", unileverController);

0
wgetOut Normal file
View File