const Invitado = require('../../db/tablas/Invitado'); const Profesor = require('../../db/tablas/Profesor'); const Premiacion = require('../../db/tablas/Premiacion'); const validar = require('../../helper/validar'); const { correo } = require('../../helper/correos'); const gmail = require('../../helper/gmail'); const ProfesorPremiacion = require('../../db/tablas/ProfesorPremiacion'); const infoInvitados = async (body) => { const idProfesor = validar.validarNumeroEntero(body.idProfesor, 'idProfesor'); const idPremiacion = validar.validarNumeroEntero( body.idPremiacion, 'idPremiacion' ); const invitados = body.invitados; const numeroInvitados = invitados.length; const premiacion = await Premiacion.findOne({ where: idPremiacion }); if (!premiacion) throw new Error('No existe ninguna premiación con este id con este id.'); invitados.forEach((invitado) => { if (invitado.edad < 12) throw new Error( 'Alguno de sus invitados no cuenta con la edad suficiente.' ); }); if (numeroInvitados > 3) throw new Error('El número de invitados no puede ser mayor que 3.'); const profPrem = await ProfesorPremiacion.findOne({ where: { idProfesor, idPremiacion }, }); if (!profPrem) throw new Error( 'No existe ningún profesor con este id en esta premiación.' ); if (profPrem.numeroInvitados) throw new Error('A este profesor ya se le han guardado sus invitados.'); profPrem.update({ numeroInvitados: numeroInvitados }); const respuesta = []; for (let i = 0; i < numeroInvitados; i++) { const invitado = invitados[i]; const nombre = validar.validacionBasicaStr( invitado.nombreCompleto, `nombre completo invitado ${i + 1}`, true ); const edad = validar.validarNumeroEntero( invitado.edad, `edad invitado ${i + 1}`, false ); const res = await Invitado.create({ nombreCompleto: nombre, edad: edad, idProfesor: idProfesor, idPremiacion: idPremiacion, }); if (!res) throw new Error('No se ha podido ingresar los datos del invitado'); respuesta.push(res); } const Mail = correo( profPrem.idProfesor, profPrem.idPremiacion, premiacion.premiacion, premiacion.fecha, premiacion.hora ); const dataProf = await Profesor.findOne({ where: idProfesor }); gmail( Mail.subject, // `jeremy@acatlan.unam.mx`, `${dataProf.numeroTrabajador}@pcpuma.acatlan.unam.mx`, Mail.message ); return { message: 'Se registró correctamente sus invitados. Se enviaron los pases de entrada a su correo institucional pcpuma.', }; }; module.exports = infoInvitados;