const connection = require('../conf/connection.js'); const express = require('express'); const nodemailer = require("nodemailer"); var app = express() async function sendEmail( destination ) { // Generate test SMTP service account from ethereal.email // Only needed if you don't have a real mail account for testing let testAccount = await nodemailer.createTestAccount(); // create reusable transporter object using the default SMTP transport let transporter = nodemailer.createTransport({ host: "smtp-mail.outlook.com", port: 587, secure: false, // true for 465, false for other ports auth: { user: 'hackatonaws@unam.mx', // generated ethereal user pass: 'H4ck4#20' }, }); // send mail with defined transport object let info = await transporter.sendMail({ from: '"Hackaton UNAM-AWS" ', // sender address to: `"${destination}"`, // list of receivers subject: "Registro Exitoso Hackaton UNAM-AWS 2020", // Subject line text: `Tu registro se ha realizado de manera correcta es importante que considere el equipo la asistencia a las siguientes actividades Capacitación 5 de agosto al 10 de septiembre 2020 Hackaton 11 al 12 de septiembre 2020 Presentación proyectos 13 de septiembre 2020 Premiación 13 de septiembre 2020 Una vez inscrito, se compartirán más detalles ¡Preparte!.`, // plain text body html: "Hello world?", }); console.log("Message sent: %s", info.messageId); // Message sent: // Preview only available when sending through an Ethereal account console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info)); // Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou... } function query(consulta) { return new Promise(function(resolve, reject) { connection.query(`${consulta}`, (error, results, files) => { if (error){ reject(error); } resolve(results); console.log("si pasa por aqui"); }); }) } function depurado(cadena) { if (cadena != null) return cadena.replace(/'/g, "''"); else return null; } // { // desafio: // campus: // numeroIntegrantes: // nombreLider: // apellidoPaLider: // apellidoMaLider: // correoLider: // carreraLider: // integrantes: [{nombre: , apellidoPa, apellidoMa, correo}] // } app.post('/registro', async(req, res) => { let body = req.body; let idEquipo = 1; try{ let n_correo = depurado( body.correoLider); let cad = `SELECT * FROM Persona WHERE correo='${n_correo}' AND lider = true;`; let respuesta = await query(cad); console.log(respuesta); if (respuesta.length != 0) { console.log( "El correo del lider ya fue registrado anteriormente"); res.status(400).json({ error: false, msj: "El correo del lider ya fue registrado anteriormente" }); return; } } catch(error){ let men = `Errror al buscar el correo ${error}`; console.log(men); res.status(400).json({ error: true, msj: men }); return; } try{ let cad = `INSERT INTO Equipo VALUES (null, '${body.nombreEqui}', '${body.desafio}', '${body.campus}', ${body.numeroIntegrantes}, false);`; await query(cad); cad = `SELECT COUNT(*) as num FROM Equipo;`; let ans = await query(cad); // console.log(`respuesta: ${ans}`); // for(key in ans){ // console.log(` ${key} : ${ans[key]}`); // for(key2 in ans[key]){ // console.log(` ${key2} : ${ans[key][key2]}`); // } // } // console.log(`aqui: ${ans[0].num}`); idEquipo = ans[0].num; } catch(error){ let men = `Error al registar Equipo ${error}`; console.log(men); res.status(400).json({ error: true, msj: men }); return; } // CREATE TABLE `Persona` ( // `idPersona` integer PRIMARY KEY NOT NULL AUTO_INCREMENT, // `idEquipo` integer, // `nombre` varchar(100), // `apellidoP` varchar(100), // `apellidoM` varchar(100), // `correo` varchar(100), // `carrera` varchar(100), // `lider` boolean // ); try{ for( let i=0; i < body.integrantes.length; i++){ let row = body.integrantes[i]; let c = depurado(row.correo); let cad = `INSERT INTO Persona VALUES ( null, ${idEquipo}, '${row.nombre}', '${row.apellidoPa}', '${row.apellidoMa}', '${c}', null, false );`; await query(cad); } let c = depurado(body.correoLider); let cad = `INSERT INTO Persona VALUES ( null, ${idEquipo}, '${body.nombreLider}', '${body.apellidoPaLider}', '${body.apellidoMaLider}', '${c}', '${body.carreraLider}', true );`; await query(cad); } catch(error){ let men = `Error al registar Integrantes ${error}` console.log(men); res.status(400).json({ error: true, msj: men }); return; } try{ await sendEmail(`${body.correoLider}`).catch(async error =>{ console.log('Not email: ' + error); res.status(400).json({ error: true, msj: "No se pudo enviar el Correo pero tu incripción fue exitosa", correo: false}); return; }).then( async ans=>{ let queryCad = `UPDATE Equipo SET notificaInscripcion=true WHERE idEquipo=${idEquipo};` await query(queryCad).catch(error=> { console.log('Not send: ' + error); res.status(400).json({ error: true, msj: "No se pudo enviar el Correo pero tu incripción fue exitosa", correo: false}); return; }); console.log('Email si fue enviado: ' + ans); res.status(200).json({ error: false, msj: "exito"}); return; }); } catch(error){ let men = `Error al enviar mensaje: ${error}`; console.log(men); res.status(400).json({ error: true, msj: men }); return; } }); module.exports = app