Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8b424bc77c | |||
| 7329f70a02 | |||
| 765c596b79 | |||
| 84618be3b4 | |||
| b1465cfdb4 | |||
| a4a714616e |
@@ -1,27 +1,24 @@
|
||||
require('./config');
|
||||
const mariadb = require('mariadb');
|
||||
const nodemailer = require('nodemailer');
|
||||
|
||||
const pool = mariadb.createPool({
|
||||
host: process.env.HOST_DB,
|
||||
user: process.env.USER_DB,
|
||||
password: process.env.PASSWORD_DB,
|
||||
database: process.env.SAT_DB,
|
||||
connectionLimit: 5, // Limitar a 5 conexiones para evitar sobrecarga
|
||||
acquireTimeout: 60000, // Timeout de 60 segundos para adquirir conexión
|
||||
timeout: 60000, // Timeout general
|
||||
connectionLimit: 5,
|
||||
acquireTimeout: 60000,
|
||||
timeout: 60000,
|
||||
});
|
||||
|
||||
const obtenerDatosUsr = async (numeroCuenta) => {
|
||||
let conn;
|
||||
try {
|
||||
conn = await pool.getConnection().catch((err) => {
|
||||
throw new Error('No se pudo conectar con la db. ' + err);
|
||||
});
|
||||
|
||||
conn = await pool.getConnection();
|
||||
const rows = await conn.query(
|
||||
`SELECT id_carrera, generacion FROM alumno WHERE id_cuenta = ${numeroCuenta}`
|
||||
);
|
||||
|
||||
return rows[0];
|
||||
} catch (err) {
|
||||
throw new Error('Hubo un problema con el querry.' + err);
|
||||
@@ -30,25 +27,20 @@ const obtenerDatosUsr = async (numeroCuenta) => {
|
||||
}
|
||||
};
|
||||
|
||||
// Agregue para profesores
|
||||
const buscarProfesorPorNumero = async (numeroTrabajador) => {
|
||||
//console.log("Buscando profesor con numeroCuenta:", numeroTrabajador);
|
||||
|
||||
let conn;
|
||||
try {
|
||||
conn = await pool.getConnection().catch((err) => {
|
||||
throw new Error('No se pudo conectar con la base de datos. ' + err);
|
||||
});
|
||||
|
||||
conn = await pool.getConnection();
|
||||
const rows = await conn.query(
|
||||
`SELECT nombre, id_cuenta FROM alumno WHERE id_cuenta = ?`,
|
||||
[numeroTrabajador] // NUmero de cuenta
|
||||
`SELECT nombre, id_cuenta FROM alumno WHERE id_cuenta = ?`,
|
||||
[numeroTrabajador]
|
||||
);
|
||||
|
||||
console.log('Este es la info que trae:', rows);
|
||||
|
||||
console.log(numeroTrabajador);
|
||||
if (rows.length === 0) return null;
|
||||
//console.log('Resultado de la consulta:', rows); // <--- Aquí
|
||||
return rows[0]; // { nombre: 'Juan', rfc: 'JUAP123' }
|
||||
return rows[0];
|
||||
} catch (err) {
|
||||
throw new Error('Error al buscar el profesor: ' + err);
|
||||
} finally {
|
||||
@@ -57,86 +49,67 @@ const buscarProfesorPorNumero = async (numeroTrabajador) => {
|
||||
};
|
||||
|
||||
const validarPeriodoActivo = async (conn) => {
|
||||
return conn
|
||||
.query(
|
||||
`SELECT id_periodo FROM periodo WHERE activo = b'1' LIMIT 1`
|
||||
)
|
||||
return conn
|
||||
.query(`SELECT id_periodo FROM periodo WHERE activo = '1' LIMIT 1`)
|
||||
.then((rows) => {
|
||||
if (!rows || rows.length === 0) {
|
||||
console.log('No existe');
|
||||
throw new Error('No existe un periodo activo en el sistema');
|
||||
}
|
||||
console.log('Periodo: ', rows)
|
||||
return rows;
|
||||
})
|
||||
.catch((err) => {
|
||||
throw new Error('Error al validar periodo activo: ' + err);
|
||||
});
|
||||
|
||||
// console.log('Este es el periodo: ', rows[0])
|
||||
// console.log('Este es el id del periodo: ', rows[0].id_periodo)
|
||||
// return rows[0].id_periodo;
|
||||
}
|
||||
};
|
||||
|
||||
const validarAlumnoInscrito = async (idCuenta) => {
|
||||
console.log("Validando alumno inscrito con id_cuenta:", idCuenta);
|
||||
console.log('Validando alumno inscrito con id_cuenta:', idCuenta);
|
||||
|
||||
// Convertimos a número para quitar ceros a la izquierda
|
||||
const idLimpio = parseInt(idCuenta, 10);
|
||||
|
||||
// Si después de limpiar tiene más de 6 dígitos, no es profesor
|
||||
if (idLimpio.toString().length > 6) {
|
||||
throw new Error('Error: el número de trabajador no existe');
|
||||
}
|
||||
|
||||
let conn;
|
||||
try {
|
||||
conn = await pool.getConnection().catch((err) => {
|
||||
throw new Error('No se pudo conectar con la base de datos. ' + err);
|
||||
});
|
||||
|
||||
conn = await pool.getConnection();
|
||||
const idPeriodoActivo = await validarPeriodoActivo(conn);
|
||||
|
||||
console.log("id del periodo: " + idPeriodoActivo)
|
||||
|
||||
console.log('id del periodo: ', idPeriodoActivo[0]);
|
||||
|
||||
const rows = await conn.query(
|
||||
`SELECT * FROM alumno_inscrito WHERE id_cuenta = ? AND id_periodo = ?`,
|
||||
[idCuenta, idPeriodoActivo]
|
||||
)
|
||||
[idCuenta, idPeriodoActivo[0].id_periodo]
|
||||
);
|
||||
// const [rows] = await conn.query(
|
||||
// `SELECT * FROM alumno_inscrito WHERE id_cuenta = 000031231 AND id_periodo = 43`
|
||||
// );
|
||||
console.log("rows:", rows);
|
||||
console.log("Tipo:", typeof rows);
|
||||
console.log("Es arreglo:", Array.isArray(rows));
|
||||
|
||||
if (rows.length === 0) return null;
|
||||
console.log('Esto es dentro de validar alumno inscrito', rows);
|
||||
console.log(rows.length)
|
||||
|
||||
|
||||
if (rows.length > 0) {
|
||||
return ("El alumno ya se encuentra inscrito en el período actual.");
|
||||
}
|
||||
|
||||
return rows[0];
|
||||
} catch (error) {
|
||||
throw new Error('Error al validar alumno inscrito: ' + error);
|
||||
throw new Error(`Error al validar alumno inscrito: ${error.message}`);
|
||||
} finally {
|
||||
if (conn) conn.end();
|
||||
}
|
||||
|
||||
// return conn
|
||||
// .query(
|
||||
// `SELECT * FROM alumno_inscrito WHERE id_cuenta = ? AND id_periodo = 27`,
|
||||
// [idCuenta]
|
||||
// )
|
||||
// .then((rows) => {
|
||||
// //console.log('Resultado de la consulta alumno_inscrito:', rows);
|
||||
|
||||
// conn.end();
|
||||
// if (rows.length === 0) return null;
|
||||
// return rows[0]; // Devuelve el primer registro encontrado
|
||||
// })
|
||||
// .catch((err) => {
|
||||
// conn.end();
|
||||
// throw new Error('Error al validar alumno inscrito: ' + err);
|
||||
// });
|
||||
};
|
||||
|
||||
|
||||
// Para envios de correos
|
||||
const nodemailer = require('nodemailer');
|
||||
|
||||
const enviarCorreoInscripcion = async (destinatario, nombreProfesor) => {
|
||||
const transporter = nodemailer.createTransport({
|
||||
service: 'gmail', // o smtp host como 'smtp.mailtrap.io'
|
||||
service: 'gmail',
|
||||
auth: {
|
||||
type: 'OAuth2',
|
||||
user: process.env.CORREO_ORIGEN,
|
||||
@@ -147,4 +120,4 @@ const enviarCorreoInscripcion = async (destinatario, nombreProfesor) => {
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = { buscarProfesorPorNumero, validarAlumnoInscrito };
|
||||
module.exports = { buscarProfesorPorNumero, validarAlumnoInscrito };
|
||||
|
||||
@@ -1,39 +1,81 @@
|
||||
const enviarCorreoInscripcion = require('../../controller/Profesor/enviarCorreo'); // Ajusta si está en otra ruta
|
||||
const Alumno = require('../../db/tablas/Alumno');
|
||||
const AlumnoInscrito = require('../../db/tablas/AlumnoInscrito');
|
||||
const sequelize = require('../../config/sequelize.conf');
|
||||
|
||||
async function realizarInscripcion(req, res) {
|
||||
const { id_cuenta, nombre, correo } = req.body;
|
||||
|
||||
try {
|
||||
console.log('\n=== INICIO INSCRIPCION PROFESOR ===');
|
||||
console.log('Datos recibidos:', { id_cuenta, nombre, correo });
|
||||
|
||||
// Validar datos requeridos primero
|
||||
if (!nombre || !id_cuenta || !correo) {
|
||||
console.error('Datos incompletos');
|
||||
return res.status(400).json({ message: 'Faltan datos requeridos: id_cuenta, nombre y correo.' });
|
||||
}
|
||||
|
||||
if (!nombre || !id_cuenta) {
|
||||
return res.status(400).json({ message: 'Faltan datos requeridos.' });
|
||||
// Obtener periodo activo
|
||||
let idPeriodoActivo;
|
||||
try {
|
||||
console.log('Buscando periodo activo...');
|
||||
const periodoActivo = await sequelize.query(`
|
||||
SELECT id_periodo
|
||||
FROM periodo
|
||||
WHERE activo = 1
|
||||
LIMIT 1
|
||||
`, { raw: true, type: sequelize.QueryTypes.SELECT });
|
||||
|
||||
console.log('Resultado periodo:', periodoActivo);
|
||||
|
||||
if (!periodoActivo || !periodoActivo.length) {
|
||||
console.warn('No hay periodo activo');
|
||||
return res.status(400).json({
|
||||
message: 'No hay periodo activo configurado'
|
||||
});
|
||||
}
|
||||
|
||||
idPeriodoActivo = periodoActivo[0].id_periodo;
|
||||
console.log('ID Periodo Activo encontrado:', idPeriodoActivo);
|
||||
} catch (dbError) {
|
||||
console.error('❌ Error al obtener periodo activo:');
|
||||
console.error(' Mensaje:', dbError.message);
|
||||
console.error(' SQL:', dbError.sql);
|
||||
console.error(' Stack:', dbError.stack);
|
||||
return res.status(500).json({
|
||||
message: 'Error al obtener el período activo.',
|
||||
error: dbError.message,
|
||||
sql: dbError.sql || 'N/A'
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// 1. Buscar si el usuario existe
|
||||
console.log('Buscando usuario con id_cuenta:', id_cuenta);
|
||||
const usuario = await Alumno.findOne({ where: { id_cuenta } });
|
||||
console.log('Usuario encontrado:', usuario ? 'SÍ' : 'NO');
|
||||
|
||||
if (!usuario) {
|
||||
return res.status(404).json({ message: 'Usuario no encontrado en la base de datos.' });
|
||||
console.error('Usuario no encontrado');
|
||||
return res.status(404).json({ message: 'Usuario (Alumno) no encontrado en la base de datos.' });
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 2. Verificar si ya tiene inscripción
|
||||
console.log('Verificando inscripción existente...');
|
||||
const inscripcionExistente = await AlumnoInscrito.findOne({
|
||||
where: {
|
||||
id_cuenta: usuario.id_cuenta,
|
||||
id_periodo: 28
|
||||
id_periodo: idPeriodoActivo
|
||||
}
|
||||
});
|
||||
|
||||
console.log('Inscripcion:', inscripcionExistente)
|
||||
console.log('Inscripción existente:', inscripcionExistente ? 'SÍ' : 'NO');
|
||||
|
||||
if (inscripcionExistente) {
|
||||
console.log('Usuario ya inscrito en este período');
|
||||
return res.status(200).json({
|
||||
message: 'El usuario ya está inscrito.',
|
||||
message: 'El usuario ya está inscrito en este período.',
|
||||
data: inscripcionExistente
|
||||
});
|
||||
}
|
||||
|
||||
@@ -51,38 +93,54 @@ async function realizarInscripcion(req, res) {
|
||||
|
||||
|
||||
// 3. Crear inscripción
|
||||
await AlumnoInscrito.create({
|
||||
console.log('Creando nueva inscripción...');
|
||||
const nuevaInscripcion = await AlumnoInscrito.create({
|
||||
id_cuenta: usuario.id_cuenta,
|
||||
id_periodo: 28,
|
||||
id_periodo: idPeriodoActivo,
|
||||
id_plataforma: 5,
|
||||
fecha_inscripcion: new Date(),
|
||||
tiempo_disponible: 3600,
|
||||
realizo_pago: 0,
|
||||
platica: 1,
|
||||
ad: 0
|
||||
realizo_pago: false,
|
||||
platica: true,
|
||||
ad: false
|
||||
});
|
||||
|
||||
console.log('✓ Inscripción creada:', nuevaInscripcion.id_alumno_inscrito);
|
||||
|
||||
// 4. Realizar confirmacion
|
||||
await AlumnoInscrito.update(
|
||||
{ platica: 1 },
|
||||
{ where: { id_cuenta: usuario.id_cuenta } }
|
||||
);
|
||||
// 4. Enviar correo
|
||||
try {
|
||||
console.log('Enviando correo a:', correo);
|
||||
await enviarCorreoInscripcion(correo, nombre);
|
||||
console.log('✓ Correo enviado exitosamente');
|
||||
} catch (emailError) {
|
||||
console.warn('⚠ Correo no enviado (pero inscripción OK):', emailError.message);
|
||||
}
|
||||
|
||||
|
||||
console.log(correo)
|
||||
console.log(nombre)
|
||||
// 5. Enviar correo
|
||||
await enviarCorreoInscripcion(correo, nombre);
|
||||
|
||||
// 6. Respuesta final
|
||||
res.status(200).json({ message: 'Inscripción creada y correo enviado correctamente.' });
|
||||
// 5. Respuesta final
|
||||
console.log('=== INSCRIPCION COMPLETADA EXITOSAMENTE ===\n');
|
||||
res.status(200).json({
|
||||
message: 'Inscripción creada correctamente.',
|
||||
data: {
|
||||
id_alumno_inscrito: nuevaInscripcion.id_alumno_inscrito,
|
||||
id_cuenta: usuario.id_cuenta,
|
||||
id_periodo: idPeriodoActivo
|
||||
}
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
console.error('Error en realizarInscripcion:', error);
|
||||
//console.log('Datos recibidos para inscripción:', req.body);
|
||||
console.error('\n❌ ERROR EN realizarInscripcion ❌');
|
||||
console.error('Tipo de error:', error.name);
|
||||
console.error('Mensaje:', error.message);
|
||||
console.error('Stack completo:', error.stack);
|
||||
console.error('Datos recibidos:', req.body);
|
||||
if (error.sql) console.error('SQL:', error.sql);
|
||||
console.error('=====================================\n');
|
||||
|
||||
res.status(500).json({ message: 'Error al procesar la inscripción o enviar el correo.' });
|
||||
res.status(500).json({
|
||||
message: 'Error al procesar la inscripción o enviar el correo.',
|
||||
error: error.message,
|
||||
type: error.name
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user