require('../helpers/config');
require('../connections/mysql-server');
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
}));
// Criar conexão com o banco de dados
var mysqlReference = require('mysql');
var DadosConnection = {
host: Variables('ip_mysql'),
user: Variables('user_mysql'),
password: Variables('password_mysql'),
database: 'iyrc_2020',
port: 3306
};
let ConexaoMySQL = mysqlReference.createConnection(DadosConnection);
var routes = function () {
router.get('/getParticipantes', (req, res) => {
const SQLQry = `SELECT * FROM participantes;`;
ConexaoMySQL.query(SQLQry, function (error, results, fields) {
if (!error && results.length != 0) {
res.send(JSON.stringify({
"status": 200,
"error": error,
"response": results
}))
console.log(req.originalUrl + "/ success 200");
}
else {
res.send(JSON.stringify({
"status": 500,
"error": error,
"response": results
}))
console.log(req.originalUrl + "/ error 500");
}
})
})
router.get('/getParticipantesHTML/:token', (req, res) => {
const SQLQry = `SELECT pa.*, DATE_FORMAT(pa.insert_date, "%d/%m/%Y") as cadastro, case when (select COUNT(*) from pontuacao p where p.idparticipantes = pa.idparticipantes) > 0 then 'Sim' else 'Não' end as jogou FROM participantes pa ORDER BY pa.idparticipantes DESC;`;
ConexaoMySQL.query(SQLQry, function (error, results, fields) {
if (!error && results.length != 0) {
res.writeHeader(200, {"Content-Type": "text/html; charset=utf-8"});
res.write('Total:' + results.length + '
');
res.write('
');
res.write('| Data | ');
res.write('Nome | ');
res.write('Responsável | ');
res.write('E-Mail | ');
res.write('Telefone | ');
res.write('Estado | ');
res.write('Cidade | ');
res.write('Instagram | ');
res.write('Jogou | ');
results.forEach((result) => {
res.write('');
res.write('| ' + result.cadastro + ' | ');
res.write('' + result.nome + ' | ');
res.write('' + result.responsavel + ' | ');
res.write('' + result.email + ' | ');
res.write('' + result.telefone + ' | ');
res.write('' + result.estado + ' | ');
res.write('' + result.cidade + ' | ');
res.write('' + result.instagram + ' | ');
res.write('' + result.jogou + ' | ');
res.write('
');
});
res.write('
');
res.end();
console.log(req.originalUrl + "/ success 200");
}
else {
res.send(JSON.stringify({
"status": 500,
"error": error,
"response": results
}))
console.log(req.originalUrl + "/ error 500");
}
})
})
router.get('/getParticipanteByid/:idparticipantes', (req, res) => {
var idparticipantes = req.params.idparticipantes;
const SQLQry = `SELECT * FROM participantes WHERE idparticipantes = ${idparticipantes};`;
ConexaoMySQL.query(SQLQry, function (error, results, fields) {
if (!error && results.length != 0) {
res.send(JSON.stringify({
"status": 200,
"error": error,
"response": results
}))
console.log(req.originalUrl + "/ success 200");
}
else {
res.send(JSON.stringify({
"status": 500,
"error": error,
"response": results
}))
console.log(req.originalUrl + "/ error 500");
}
})
})
router.get('/getParticipanteScore/:idparticipantes/:idprovas', (req, res) => {
var idparticipantes = req.params.idparticipantes;
var idprovas = req.params.idprovas;
const SQLQry = `SELECT pa.nome, SUM(po.pontuacao) AS 'pontuacao' FROM participantes pa INNER JOIN pontuacao po ON po.idparticipantes = pa.idparticipantes WHERE pa.idparticipantes = ${idparticipantes} AND po.idprovas = ${idprovas};`;
ConexaoMySQL.query(SQLQry, function (error, results, fields) {
if (!error && results.length != 0) {
res.send(JSON.stringify({
"status": 200,
"error": error,
"response": results
}))
console.log(req.originalUrl + "/ success 200");
}
else {
res.send(JSON.stringify({
"status": 500,
"error": error,
"response": results
}))
console.log(req.originalUrl + "/ error 500");
}
})
})
router.post('/insertParticipante', (req, res) => {
const nome = req.body.nome;
const responsavel = req.body.responsavel;
const email = req.body.email;
const telefone = req.body.telefone;
const instagram = req.body.instagram;
const estado = req.body.estado;
const cidade = req.body.cidade;
var SQLQry = `SELECT * FROM participantes WHERE email = '${email}';`;
ConexaoMySQL.query(SQLQry, function (error, results, fields) {
if (!error && results.length > 0) {
res.redirect('http://iyrconline.com.br/formulario.html?erro1=email');
}
else {
SQLQry = `INSERT INTO participantes (nome, responsavel, email, telefone, instagram, estado, cidade)
VALUES ('${nome}', '${responsavel}', '${email}', '${telefone}', '${instagram}', '${estado}', '${cidade}');`;
ConexaoMySQL.query(SQLQry, function (error, results, fields) {
if (!error && results.length != 0) {
EnviarEmail(results['insertId'], nome, email, 0, 0, function(SucessoEmail) {
EnviarSMS(results['insertId'], telefone, 0, function(SucessoSMS) {
res.redirect('http://iyrconline.com.br/outform.html');
console.log(req.originalUrl + "/ success 200");
});
});
}
else {
res.send(JSON.stringify({
"status": 500,
"error": error,
"response": results
}))
console.log(req.originalUrl + "/ error 500");
}
})
}
})
})
router.post('/insertPontuacao', (req, res) => {
console.log(req.body);
const idprovas = req.body.idprovas;
const idparticipantes = req.body.idparticipantes;
const pontuacao = req.body.pontuacao;
var SQLQry = `SELECT * FROM pontuacao WHERE idprovas = ${idprovas} AND idparticipantes = ${idparticipantes};`;
ConexaoMySQL.query(SQLQry, function (error, results, fields) {
if (!error && results.length > 0) {
if (results[0]['pontuacao'] < pontuacao) { // A PONTUACAO DO USUARIO E MAIOR QUE A ANTERIOR NESSE JOGO
SQLQry = `UPDATE pontuacao SET pontuacao = ${pontuacao} WHERE idparticipantes = ${idparticipantes} AND idprovas = ${idprovas};`;
ConexaoMySQL.query(SQLQry, function (error, results, fields) {
res.send(JSON.stringify({
"status": 200,
"error": error,
"response": results
}))
console.log(req.originalUrl + " success 200");
});
}
else {
res.send(JSON.stringify({
"status": 200,
"error": error,
"response": results
}))
console.log(req.originalUrl + " success 200");
}
}
else {
SQLQry = `INSERT INTO pontuacao (idprovas, idparticipantes, pontuacao)
VALUES (${idprovas}, ${idparticipantes}, ${pontuacao});`;
ConexaoMySQL.query(SQLQry, function (error, results, fields) {
if (!error && results.length != 0) {
/*SQLQry = `SELECT email FROM participantes WHERE idparticipantes = ${idparticipantes};`;
ConexaoMySQL.query(SQLQry, function (error, results, fields) {
EnviarEmail(results[0]['idparticipantes'], results[0]['nome'], results[0]['email'], pontuacao, 2, function(Sucesso) {
console.log("Sucesso");
})
})*/
res.send(JSON.stringify({
"status": 200,
"error": error,
"response": results
}));
console.log(req.originalUrl + "/ success 200");
}
else {
res.send(JSON.stringify({
"status": 500,
"error": error,
"response": results
}))
console.log(req.originalUrl + "/ error 500");
}
})
}
})
})
router.get('/enviarEMAIL', (req, res) => {
EnviarEmail(265, 'Heloísa Nogueira Moscati', 'zendionmazinni@gmail.com', 0, 0, function(Sucesso) {
console.log("OK");
res.send(Sucesso);
})
})
router.get('/enviarSMS/:idparticipantes/:telefone', (req, res) => {
let telefone = req.params.telefone;
let idparticipantes = req.params.idparticipantes;
EnviarSMS(idparticipantes, telefone, 0);
res.send(true);
})
router.get('/sendMsgToUsers/:op1/:op2', (req, res) => {
let Quem = req.params.op1;
let Opcao = req.params.op2;
var SQLQry = ``;
if (Quem == 0) { // TODOS OS PARTICIPANTES
SQLQry = `SELECT * FROM (
SELECT DISTINCT
pa.idparticipantes,
pa.nome,
pa.email,
pa.telefone,
CASE WHEN po.idparticipantes = pa.idparticipantes THEN 'Sim' ELSE 'Não' END AS 'Jogou'
FROM participantes pa
LEFT JOIN pontuacao po
ON pa.idparticipantes = po.idparticipantes) R;`;
}
else if (Quem == 1) { // JA PARTICIPARAM DA PRIMEIRA ETAPA
SQLQry = `SELECT * FROM (
SELECT DISTINCT
pa.idparticipantes,
pa.nome,
pa.email,
pa.telefone,
CASE WHEN po.idparticipantes = pa.idparticipantes THEN 'Sim' ELSE 'Não' END AS 'Jogou'
FROM participantes pa
LEFT JOIN pontuacao po
ON pa.idparticipantes = po.idparticipantes) R
WHERE Jogou = 'Sim';`;
}
else if (Quem == 2) { // NAO PARTICIPARAM DA PRIMEIRA ETAPA
SQLQry = `SELECT * FROM (
SELECT DISTINCT
pa.idparticipantes,
pa.nome,
pa.email,
pa.telefone,
CASE WHEN po.idparticipantes = pa.idparticipantes THEN 'Sim' ELSE 'Não' END AS 'Jogou'
FROM participantes pa
LEFT JOIN pontuacao po
ON pa.idparticipantes = po.idparticipantes) R
WHERE Jogou = 'Não';`;
}
ConexaoMySQL.query(SQLQry, function (error, results, fields) {
if (!error && results.length != 0) {
EnviaMsg(results, 0, Opcao, function(Sucesso) {
res.send(Sucesso);
console.log(req.originalUrl + "/ success 200");
});
}
else {
res.send(false);
console.log(req.originalUrl + "/ error 500");
}
})
})
router.post('/getParticipanteScores', (req, res) => {
var email = req.body.email;
const SQLQry = `SELECT pa.idparticipantes, pa.nome, COUNT(po.idparticipantes) AS 'participacoes'
FROM iyrc_2020.participantes pa
INNER JOIN iyrc_2020.pontuacao po ON po.idparticipantes = pa.idparticipantes
WHERE pa.email = '${email}' group by pa.idparticipantes`;
ConexaoMySQL.query(SQLQry, function (error, results, fields) {
if (!error && results.length != 0) {
res.send(JSON.stringify({
"status": 200,
"error": error,
"response": results
}))
console.log(req.originalUrl + "/ success 200");
}
else {
res.send(JSON.stringify({
"status": 500,
"error": error,
"response": results
}))
console.log(req.originalUrl + "/ error 500");
}
})
})
return router;
};
function EnviaMsg(ListaUsuarios, Index, Opcao, callback) {
if (Index < ListaUsuarios.length) {
console.log("Participante: " + ListaUsuarios[Index].nome);
setTimeout(() => {
EnviarEmail(ListaUsuarios[Index].idparticipantes, ListaUsuarios[Index].nome, ListaUsuarios[Index].email, 0, Opcao, function(SucessoEmail) {
EnviarSMS(ListaUsuarios[Index].idparticipantes, ListaUsuarios[Index].telefone, Opcao, function(sucessoSMS) {
Index++;
EnviaMsg(ListaUsuarios, Index, Opcao, callback);
});
});
}, 1000);
}
else {
callback(true);
}
}
function EnviarSMS(idparticipantes, telefone, Opcao, callback) {
if (telefone == null || telefone == '') {
callback(false);
return;
}
let NumeroRegistro = Math.pow(idparticipantes, 2);
var mensagem = ``;
if (Opcao == 0) { // LINK DA PRIMEIRA ETAPA
mensagem = `"PARABÉNS\r\nAbaixo está o link para disputar seu desafio IYRC!\r\nhttp://iyrconline.com.br/provas.html?${NumeroRegistro}"`;
}
else if (Opcao == 1) { // LINK DA SEGUNDA ETAPA
mensagem = `"Segue o link para disputar a segunda etapa IYRC!\r\nhttp://iyrconline.com.br/provas.html?${NumeroRegistro}"`;
}
else if (Opcao == 2) { // PARABENS PRIMEIRA ETAPA
mensagem = `Sua participação na primeira etapa do Campeonato Internacional de Robótica IYRC 2020 foi registrada!`;
}
else if (Opcao == 3) { // FALTA 1 DIA PARA SEGUNDA ETAPA
mensagem = `Falta 1 dia para a segunda etapa do Campeonato Internacional de Robótica IYRC 2020!`;
}
else if (Opcao == 4) { // FALTAM 3 DIAS PARA A ETAPA FINAL
mensagem = `Faltam 3 dias para a etapa final do Campeonato Internacional de Robótica IYRC 2020!`;
}
else if (Opcao == 5) { // FALTAM 2 DIAS PARA A ETAPA FINAL
mensagem = `Faltam 2 dias para a etapa final do Campeonato Internacional de Robótica IYRC 2020!`;
}
else if (Opcao == 6) { // FALTA 1 DIA PARA A ETAPA FINAL
mensagem = `Falta 1 dia para a etapa final do Campeonato Internacional de Robótica IYRC 2020!`;
}
else if (Opcao == 7) { // MUDANCA DATA DA ETAPA FINAL
mensagem = `Fique atento! A data da etapa final do Campeonato Internacional de Robótica IYRC 2020 foi alterada para o dia 13/06/2020!`;
}
let url = `http://www.facilitamovel.com.br/api/messagesPhonesMultipleSend.ft?user=myrobot&password=3498567&destinatario=${telefone}&msg=${encodeURI(mensagem)};`//Sua URL
/*var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
let xhttp = new XMLHttpRequest();
xhttp.open("GET", url, false);
xhttp.send();*/
const http = require('http');
http.get(url, (resp) => {
let data = '';
resp.on('data', (chunk) => {
data += chunk;
});
resp.on('end', () => {
let Sucesso = false;
if (data.includes('Usuario sem Creditos')) {
console.log("ERRO AO ENVIAR SMS PARA: " + telefone + " - " + data);
Sucesso = false;
}
else {
console.log("SMS ENVIADO COM SUCESSO PARA: " + telefone + " - " + data);
Sucesso = true;
}
callback(Sucesso);
});
}).on("error", (err) => {
console.log("error: " + err);
callback(false);
});
//console.log(url);
}
function EnviarEmail(idparticipantes, nome, email, pontuacao, Opcao, callback) {
if (email == null || email == '') {
callback(false);
return;
}
const request = require('request');
let NumeroRegistro = Math.pow(idparticipantes, 2);
let Texto = ``;
if (Opcao == 0) { // LINK DA PRIMIERA ETAPA
Texto = CriarTextoEmail_Etapa1(nome, NumeroRegistro);
}
else if (Opcao == 1) { // LINK DA SEGUNDA ETAPA
Texto = CriarTextoEmail_Etapa2(NumeroRegistro);
}
else if (Opcao == 2) { // PARABENS PRIMEIRA ETAPA
Texto = CriarTextoEmail_Parabens(pontuacao);
}
else if (Opcao == 3) { // FALTA 1 DIA PARA SEGUNDA ETAPA
Texto = CriarTextoEmail_Falta1DiaEtapa2();
}
else if (Opcao == 4) { // FALTA 2 DIAS PARA ETAPA FINAL
Texto = CriarTextoEmail_Falta3DiasEtapaFinal();
}
else if (Opcao == 5) { // FALTA 2 DIAS PARA ETAPA FINAL
Texto = CriarTextoEmail_Falta2DiasEtapaFinal();
}
else if (Opcao == 6) { // FALTA 2 DIAS PARA ETAPA FINAL
Texto = CriarTextoEmail_Falta1DiaEtapaFinal();
}
else if (Opcao == 7) { // MUDANCA DA DATA DA ETAPA FINAL
Texto = CriarTextoEmail_MudancaDataFinal();
}
request.post('http://18.228.91.135:3337/api/email/send', {
json: {
from: 'iyrconline@myrobot.com.br',
to: email,
subject: "Etapa Online do Campeonato Internacional de Robótica IYRC",
text: Texto
}
}, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log("Sucesso ao enviar e-mail!");
//callback(true);
}
else {
console.log("Falha ao enviar e-mail!");
//callback(false);
}
}
);
callback(true);
}
function CriarTextoEmail_Etapa1(Nome, NumeroRegistro) {
return `
|
PARABÉNS, VOCÊ ESTÁ INSCRITO!
|
|
Olá, ${Nome}!
|
|
|
|
|
`;
}
function CriarTextoEmail_Parabens(Pontuacao) {
return `
|
VOCÊ FOI CLASSIFICADO PARA A 2ª ETAPA ONLINE DA IYRC!
|
|
|
|
ATENÇÃO!
O PRÓXIMO DESAFIO ACONTECE EM:
|
|
|
`;
}
function CriarTextoEmail_Etapa2(NumeroRegistro) {
return `
|
VOCÊ ESTÁ PREPARADO?
|
|
|
|
ATENÇÃO!
A FINAL ACONTECE EM:
|
|
|
`;
}
function CriarTextoEmail_Falta1DiaEtapa2() {
return `
|
FALTA APENAS 1 DIA PARA A PRÓXIMA ETAPA!
|
|
|
|
ATENÇÃO!
O PRÓXIMO DESAFIO ACONTECE EM:
|
|
|
`;
}
function CriarTextoEmail_Falta3DiasEtapaFinal() {
return `
|
FALTAM APENAS 3 DIAS PARA A ETAPA FINAL!
|
|
|
|
ATENÇÃO! O DESAFIO FINAL ACONTECE EM:
|
|
|
`;
}
function CriarTextoEmail_Falta2DiasEtapaFinal() {
return `
|
FALTAM APENAS 2 DIAS PARA A ETAPA FINAL!
|
|
|
|
ATENÇÃO! O DESAFIO FINAL ACONTECE EM:
|
|
|
`;
}
function CriarTextoEmail_Falta1DiaEtapaFinal() {
return `
|
FALTA APENAS 1 DIA PARA A ETAPA FINAL!
|
|
|
|
ATENÇÃO! O DESAFIO FINAL ACONTECE EM:
|
|
|
`;
}
function CriarTextoEmail_MudancaDataFinal() {
return `
|
Olá competidor!!!
|
|
|
|
ATENÇÃO! O DESAFIO FINAL ACONTECE EM:
|
|
|
`;
}
module.exports = routes;