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(''); res.write(''); res.write(''); res.write(''); res.write(''); res.write(''); res.write(''); res.write(''); res.write(''); results.forEach((result) => { res.write(''); res.write(''); res.write(''); res.write(''); res.write(''); res.write(''); res.write(''); res.write(''); res.write(''); res.write(''); res.write(''); }); res.write('
DataNomeResponsávelE-MailTelefoneEstadoCidadeInstagramJogou
' + result.cadastro + '' + result.nome + '' + result.responsavel + '' + result.email + '' + result.telefone + '' + result.estado + '' + result.cidade + '' + result.instagram + '' + result.jogou + '
'); 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}!
Seu cadastro na Etapa Online do Campeonato Internacional de Robótica IYRC foi realizado com sucesso!

Abaixo está o link para seu ambiente online de competição, onde poderá disputar seu desafio!

Clique aqui para ser direcionado ao seu ambiente de competição

Boa sorte e bom game!
`; } function CriarTextoEmail_Parabens(Pontuacao) { return `
VOCÊ FOI CLASSIFICADO PARA A 2ª ETAPA ONLINE DA IYRC!
Isso mostra que vocé está se preparando para o campeonato presencial, mas ainda faltam 2 etapas. Você consegue!

Sua pontuação:
${Pontuacao}


Confira matéria no site G1 da Globo sobre a etapa nacional de 2019

Matéria com alunos de escola pública na etapa nacional da competição
ATENÇÃO!
O PRÓXIMO DESAFIO ACONTECE EM:
`; } function CriarTextoEmail_Etapa2(NumeroRegistro) { return `
VOCÊ ESTÁ PREPARADO?
É hoje, Sábado, das 0h às 24h a segunda etapa do desafio online! São 5 mini games, tire a maior pontuação e garanta sua vaga para a final que será transmitida em uma super live!

Clique aqui para ser direcionado ao
seu ambiente de competição



Confira matéria no site G1 da Globo sobre a etapa nacional de 2019

Matéria com alunos de escola pública na etapa nacional da competição
ATENÇÃO!
A FINAL ACONTECE EM:
`; } function CriarTextoEmail_Falta1DiaEtapa2() { return `
FALTA APENAS 1 DIA PARA
A PRÓXIMA ETAPA!

É amanhã, Sábado, das 0h às 24h a segunda etapa do desafio online! São 5 mini games, tire a maior pontuação e garanta sua vaga para a final que será transmitida em uma super live!


Confira matéria no site G1 da Globo sobre a etapa nacional de 2019

Matéria com alunos de escola pública na etapa nacional da competição
ATENÇÃO!
O PRÓXIMO DESAFIO ACONTECE EM:
`; } function CriarTextoEmail_Falta3DiasEtapaFinal() { return `
FALTAM APENAS 3 DIAS PARA
A ETAPA FINAL!


Além de uma super oportunidade de estar entre os melhores da Robótica Mundial, no evento presencial ocorrem diversas premiações.

Prepare-se para estar com a gente nessa super competição!

Confira matéria no site G1 da Globo sobre a etapa nacional de 2019

Matéria com alunos de escola pública na etapa nacional da competição
ATENÇÃO! O DESAFIO FINAL ACONTECE EM:
`; } function CriarTextoEmail_Falta2DiasEtapaFinal() { return `
FALTAM APENAS 2 DIAS PARA
A ETAPA FINAL!


Além de uma super oportunidade de estar entre os melhores da Robótica Mundial, no evento presencial ocorrem diversas premiações.

Prepare-se para estar com a gente nessa super competição!

Confira matéria no site G1 da Globo sobre a etapa nacional de 2019

Matéria com alunos de escola pública na etapa nacional da competição
ATENÇÃO! O DESAFIO FINAL ACONTECE EM:
`; } function CriarTextoEmail_Falta1DiaEtapaFinal() { return `
FALTA APENAS 1 DIA PARA
A ETAPA FINAL!


Além de uma super oportunidade de estar entre os melhores da Robótica Mundial, no evento presencial ocorrem diversas premiações.

Prepare-se para estar com a gente nessa super competição!

Confira matéria no site G1 da Globo sobre a etapa nacional de 2019

Matéria com alunos de escola pública na etapa nacional da competição
ATENÇÃO! O DESAFIO FINAL ACONTECE EM:
`; } function CriarTextoEmail_MudancaDataFinal() { return `
Olá competidor!!!
Devido à grande demanda de acesso aos jogos online da IYRC, prorrogamos a data da etapa final para dia 13/06/2020, às 14h.

Fique ligado nas notícias da IYRC Onine e convide seus amigos a participarem!!!

Boa sorte na final!!!

Confira matéria no site G1 da Globo sobre a etapa nacional de 2019

Matéria com alunos de escola pública na etapa nacional da competição
ATENÇÃO! O DESAFIO FINAL ACONTECE EM:
`; } module.exports = routes;