283 lines
12 KiB
JavaScript
283 lines
12 KiB
JavaScript
import Conexion from './Conexion.js';
|
|
import Usuario from '../Model/Usuario.js';
|
|
import Mensaje from '../Model/Mensaje.js';
|
|
import DAORegistro from './DAORegistro.js';
|
|
import logger from '../utils/logger.js';
|
|
|
|
class DAO {
|
|
|
|
static async matriculas() {
|
|
const conexion = new Conexion();
|
|
const conexionEstablecida = await conexion.conectar();
|
|
try {
|
|
const sql = `SELECT U.id, U.matricula FROM usuario U WHERE U.id NOT IN (SELECT I.idUsuario FROM inscripcion I, usuario U WHERE U.id = I.idUsuario) AND U.inscrito = 1;`;
|
|
const [rows] = await conexionEstablecida.query(sql);
|
|
const resultado = rows.map(row => {
|
|
return { id: row.id, matricula: row.matricula };
|
|
});
|
|
return resultado;
|
|
} catch (error) {
|
|
logger.error(`Error en DAO.matriculas: ${error.message}`);
|
|
return [];
|
|
} finally {
|
|
conexion.cerrarConexion();
|
|
}
|
|
}
|
|
|
|
static async validarAlumno(alumno) {
|
|
const conexion = new Conexion();
|
|
const conexionEstablecida = await conexion.conectar();
|
|
try {
|
|
const sql = `SELECT * FROM usuario WHERE matricula = ? AND contrasena = ?`;
|
|
const [rows] = await conexionEstablecida.query(sql, [alumno.getMatricula(), alumno.getContrasena()]);
|
|
return rows.length > 0;
|
|
} catch (error) {
|
|
logger.error(`Error en DAO.validarAlumno: ${error.message}`);
|
|
return false;
|
|
} finally {
|
|
conexion.cerrarConexion();
|
|
}
|
|
}
|
|
|
|
static async agregarAlumno(usuario) {
|
|
const conexion = new Conexion();
|
|
const conexionEstablecida = await conexion.conectar();
|
|
try {
|
|
const ultimoID = await this.obtenerUltimoID();
|
|
const matricula = "SIU24" + (1000 + ultimoID);
|
|
const password = this.crearContrasena();
|
|
usuario.contrasena = password;
|
|
usuario.matricula = matricula;
|
|
const sql = `INSERT INTO usuario (nombre, apellido, nacionalidad, matricula, contrasena, correo, rol) VALUES (?, ?, ?, ?, ?, ?, ?)`;
|
|
const [result] = await conexionEstablecida.query(sql, [
|
|
usuario.nombre, usuario.apellido, usuario.nacionalidad,
|
|
usuario.matricula, usuario.contrasena, usuario.correo, usuario.rol
|
|
]);
|
|
if (result.affectedRows > 0) {
|
|
await DAORegistro.registrar(usuario, "Alumno agregado", new Date());
|
|
logger.info(`Usuario agregado ${usuario.matricula}`);
|
|
return new Mensaje(true, usuario.matricula, usuario.contrasena);
|
|
} else {
|
|
return new Mensaje(false, null);
|
|
}
|
|
} catch (error) {
|
|
logger.error(`Error en DAO.agregarAlumno: ${error.message}`);
|
|
return new Mensaje(false, null);
|
|
} finally {
|
|
conexion.cerrarConexion();
|
|
}
|
|
}
|
|
|
|
static async editarAlumno(usuario) {
|
|
const conexion = new Conexion();
|
|
const conexionEstablecida = await conexion.conectar();
|
|
try {
|
|
const sql = `UPDATE usuario SET nombre = ?, apellido = ?, correo = ?, nacionalidad = ?, tipoSangre = ?, fecha_nacimiento = ?, curp = ?, idCarrera = ? WHERE id = ?`;
|
|
const [result] = await conexionEstablecida.query(sql, [
|
|
usuario.nombre, usuario.apellido, usuario.correo,
|
|
usuario.nacionalidad, usuario.tipoSangre, usuario.fecha_nacimiento,
|
|
usuario.curp, usuario.idCarrera, usuario.id
|
|
]);
|
|
if (result.affectedRows > 0) {
|
|
await DAORegistro.registrar(usuario, "Alumno editado", new Date());
|
|
logger.info(`Usuario Editado ${usuario.matricula}`);
|
|
return true;
|
|
}
|
|
return false;
|
|
} catch (error) {
|
|
logger.error(`Error en DAO.editarAlumno: ${error.message}`);
|
|
return false;
|
|
} finally {
|
|
conexion.cerrarConexion();
|
|
}
|
|
}
|
|
|
|
static async alumnoIniciado(matricula, contrasena) {
|
|
const conexion = new Conexion();
|
|
const conexionEstablecida = await conexion.conectar();
|
|
try {
|
|
const sql = `SELECT * FROM usuario WHERE matricula = ? AND contrasena = ?`;
|
|
const [rows] = await conexionEstablecida.query(sql, [matricula, contrasena]);
|
|
if (rows.length > 0) {
|
|
const row = rows[0];
|
|
const usuario = new Usuario(
|
|
row.id, row.nombre, row.apellido, row.matricula, row.contrasena,
|
|
row.correo, row.nacionalidad,
|
|
row.tipoSangre, row.fecha_nacimiento, row.curp,
|
|
row.rol, row.idCarrera, row.inscrito
|
|
);
|
|
await DAORegistro.registrar(usuario.matricula, "Inicio Sesión", new Date());
|
|
logger.info(`Iniciao sesion el usuario: ${usuario.matricula}`);
|
|
return usuario;
|
|
}
|
|
return null;
|
|
} catch (error) {
|
|
logger.error(`Error en DAO.alumnoIniciado: ${error.message}`);
|
|
return null;
|
|
} finally {
|
|
conexion.cerrarConexion();
|
|
}
|
|
}
|
|
|
|
static async obtenerUltimoID() {
|
|
const conexion = new Conexion();
|
|
const conexionEstablecida = await conexion.conectar();
|
|
try {
|
|
const sql = `SELECT MAX(id) AS ultimo_id FROM usuario`;
|
|
const [rows] = await conexionEstablecida.query(sql);
|
|
return rows[0].ultimo_id || -1;
|
|
} catch (error) {
|
|
logger.error(`Error en DAO.obtenerUltimoID: ${error.message}`);
|
|
return -1;
|
|
} finally {
|
|
conexion.cerrarConexion();
|
|
}
|
|
}
|
|
|
|
static crearContrasena() {
|
|
const CARACTERES_PERMITIDOS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@#";
|
|
let contrasena = '';
|
|
for (let i = 0; i < 10; i++) {
|
|
const index = Math.floor(Math.random() * CARACTERES_PERMITIDOS.length);
|
|
contrasena += CARACTERES_PERMITIDOS.charAt(index);
|
|
}
|
|
return contrasena;
|
|
}
|
|
|
|
static async traeUsuario(id) {
|
|
const conexion = new Conexion();
|
|
const conexionEstablecida = await conexion.conectar();
|
|
let usuario = null;
|
|
try {
|
|
const sql = `SELECT id, nombre, apellido, matricula, correo, nacionalidad, tipoSangre, fecha_nacimiento, curp, rol, idCarrera, inscrito FROM usuario WHERE id = ?`;
|
|
const [rows] = await conexionEstablecida.query(sql, [id]);
|
|
if (rows.length > 0) {
|
|
const row = rows[0];
|
|
|
|
// Convertir la fecha al formato "yyyy-MM-dd"
|
|
const fechaNacimiento = new Date(row.fecha_nacimiento);
|
|
const formattedDate = fechaNacimiento.toISOString().split('T')[0];
|
|
|
|
usuario = new Usuario(
|
|
row.id, row.nombre, row.apellido, row.matricula, "", row.correo,
|
|
row.nacionalidad, row.tipoSangre, formattedDate, row.curp,
|
|
row.rol, row.idCarrera, row.inscrito
|
|
);
|
|
}
|
|
} catch (error) {
|
|
logger.error(`Error en DAO.traeUsuario: ${error.message}`);
|
|
} finally {
|
|
conexion.cerrarConexion();
|
|
}
|
|
return usuario;
|
|
}
|
|
|
|
static async editarAlumnoInscrito(data, id) {
|
|
const conexion = new Conexion();
|
|
const conexionEstablecida = await conexion.conectar();
|
|
try {
|
|
const sql = `UPDATE usuario SET inscrito = ? WHERE id = ?`;
|
|
const [result] = await conexionEstablecida.query(sql, [
|
|
id, data.idUsuario
|
|
]);
|
|
if (result.affectedRows > 0) {
|
|
const usuario = new Usuario();
|
|
usuario.id = data.idUsuario;
|
|
await DAORegistro.registrar(usuario, "Alumno inscrito", new Date());
|
|
return true;
|
|
}
|
|
return false;
|
|
} catch (error) {
|
|
logger.error(`Error en DAO.editarAlumnoInscrito: ${error.message}`);
|
|
return false;
|
|
} finally {
|
|
conexion.cerrarConexion();
|
|
}
|
|
}
|
|
|
|
static async traeTodosLosDatosUsuario(id) {
|
|
const conexion = new Conexion();
|
|
const conexionEstablecida = await conexion.conectar();
|
|
let usuario = null;
|
|
try {
|
|
const sql = `SELECT U.id, U.nombre, U.apellido, matricula, correo, nacionalidad, tipoSangre, fecha_nacimiento, curp, inscrito, T.nombre as tutorNombre, T.apellido as tutorApellido, T.numeroDeTelefono, C.nombre as carreraNombre, C.id as idCarrera FROM usuario U, tutor T, carrera C WHERE C.id = U.idCarrera AND U.id = T.idUsuario AND inscrito = 1 AND U.id = ?;`;
|
|
const [rows] = await conexionEstablecida.query(sql, [id]);
|
|
if (rows.length > 0) {
|
|
const row = rows[0];
|
|
|
|
// Convertir la fecha al formato "yyyy-MM-dd"
|
|
const fechaNacimiento = new Date(row.fecha_nacimiento);
|
|
const formattedDate = fechaNacimiento.toISOString().split('T')[0];
|
|
|
|
usuario = {
|
|
id: row.id,
|
|
nombre: row.nombre,
|
|
apellido: row.apellido,
|
|
matricula: row.matricula,
|
|
correo: row.correo,
|
|
nacionalidad: row.nacionalidad,
|
|
tipoSangre: row.tipoSangre,
|
|
fecha_nacimiento: formattedDate,
|
|
curp: row.curp,
|
|
inscrito: row.inscrito,
|
|
tutorNombre: row.tutorNombre,
|
|
tutorApellido: row.tutorApellido,
|
|
numeroDeTelefono: row.numeroDeTelefono,
|
|
carreraNombre: row.carreraNombre,
|
|
idCarrera: row.idCarrera
|
|
};
|
|
}
|
|
} catch (error) {
|
|
logger.error(`Error en DAO.traeTodosLosDatosUsuario: ${error.message}`);
|
|
} finally {
|
|
conexion.cerrarConexion();
|
|
}
|
|
return usuario;
|
|
}
|
|
|
|
static async inscribirUsuario(data) {
|
|
const conexion = new Conexion();
|
|
const conexionEstablecida = await conexion.conectar();
|
|
try {
|
|
const sql = `INSERT INTO inscripcion (idUsuario, idCarrera) VALUES (?, ?);`;
|
|
const [result] = await conexionEstablecida.query(sql, [data.id, data.idCarrera]);
|
|
if (result.affectedRows > 0) {
|
|
const usuario = new Usuario();
|
|
usuario.id = data.id;
|
|
await DAORegistro.registrar(usuario, "Usuario inscrito", new Date());
|
|
return true;
|
|
}
|
|
return false;
|
|
} catch (error) {
|
|
logger.error(`Error en DAO.inscribirUsuario: ${error.message}`);
|
|
return false;
|
|
} finally {
|
|
conexion.cerrarConexion();
|
|
}
|
|
}
|
|
|
|
static async editarAlumnoRechazado(data, id) {
|
|
const conexion = new Conexion();
|
|
const conexionEstablecida = await conexion.conectar();
|
|
try {
|
|
const sql = `UPDATE usuario SET inscrito = ? WHERE id = ?`;
|
|
const [result] = await conexionEstablecida.query(sql, [
|
|
id, data.id
|
|
]);
|
|
if (result.affectedRows > 0) {
|
|
const usuario = new Usuario();
|
|
usuario.id = data.id;
|
|
await DAORegistro.registrar(usuario, "Alumno rechazado", new Date());
|
|
return true;
|
|
}
|
|
return false;
|
|
} catch (error) {
|
|
logger.error(`Error en DAO.editarAlumnoRechazado: ${error.message}`);
|
|
return false;
|
|
} finally {
|
|
conexion.cerrarConexion();
|
|
}
|
|
}
|
|
}
|
|
|
|
export default DAO; |