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.' }); } // 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) { 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: idPeriodoActivo } }); 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 en este período.', data: inscripcionExistente }); } // // Validacion del periodo // const periodoActivo = await Periodo.findOne({ // where: { // activo: 1 // o true // } // }); // if (!periodoActivo) { // throw new Error("No hay un periodo activo"); // } // 3. Crear inscripción console.log('Creando nueva inscripción...'); const nuevaInscripcion = await AlumnoInscrito.create({ id_cuenta: usuario.id_cuenta, id_periodo: idPeriodoActivo, id_plataforma: 5, fecha_inscripcion: new Date(), tiempo_disponible: 3600, realizo_pago: false, platica: true, ad: false }); console.log('✓ Inscripción creada:', nuevaInscripcion.id_alumno_inscrito); // 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); } // 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('\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.', error: error.message, type: error.name }); } } module.exports = { realizarInscripcion };