2024-06-03 14:13:02 +00:00
import Conexion from './Conexion.js' ;
import Usuario from '../Model/Usuario.js' ;
import Mensaje from '../Model/Mensaje.js' ;
2024-05-25 05:38:51 +00:00
import DAORegistro from './DAORegistro.js' ;
2024-06-03 14:13:02 +00:00
import logger from '../utils/logger.js' ;
2024-05-25 05:38:51 +00:00
class DAO {
2024-05-26 19:06:55 +00:00
static async matriculas ( ) {
2024-05-25 05:38:51 +00:00
const conexion = new Conexion ( ) ;
const conexionEstablecida = await conexion . conectar ( ) ;
try {
2024-06-03 04:59:59 +00:00
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; ` ;
2024-05-25 05:38:51 +00:00
const [ rows ] = await conexionEstablecida . query ( sql ) ;
2024-05-26 19:06:55 +00:00
const resultado = rows . map ( row => {
return { id : row . id , matricula : row . matricula } ;
} ) ;
2024-05-25 05:38:51 +00:00
return resultado ;
} catch ( error ) {
2024-06-03 04:59:59 +00:00
logger . error ( ` Error en DAO.matriculas: ${ error . message } ` ) ;
2024-05-25 05:38:51 +00:00
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 ) {
2024-06-03 04:59:59 +00:00
logger . error ( ` Error en DAO.validarAlumno: ${ error . message } ` ) ;
2024-05-25 05:38:51 +00:00
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
] ) ;
2024-06-03 04:59:59 +00:00
if ( result . affectedRows > 0 ) {
await DAORegistro . registrar ( usuario , "Alumno agregado" , new Date ( ) ) ;
2024-06-03 14:13:02 +00:00
logger . info ( ` Usuario agregado ${ usuario . matricula } ` ) ;
2024-06-03 04:59:59 +00:00
return new Mensaje ( true , usuario . matricula , usuario . contrasena ) ;
} else {
return new Mensaje ( false , null ) ;
}
2024-05-25 05:38:51 +00:00
} catch ( error ) {
2024-06-03 04:59:59 +00:00
logger . error ( ` Error en DAO.agregarAlumno: ${ error . message } ` ) ;
2024-05-25 05:38:51 +00:00
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
] ) ;
2024-06-03 04:59:59 +00:00
if ( result . affectedRows > 0 ) {
await DAORegistro . registrar ( usuario , "Alumno editado" , new Date ( ) ) ;
2024-06-03 14:13:02 +00:00
logger . info ( ` Usuario Editado ${ usuario . matricula } ` ) ;
2024-06-03 04:59:59 +00:00
return true ;
}
return false ;
2024-05-25 05:38:51 +00:00
} catch ( error ) {
2024-06-03 04:59:59 +00:00
logger . error ( ` Error en DAO.editarAlumno: ${ error . message } ` ) ;
2024-05-25 05:38:51 +00:00
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
) ;
2024-06-03 14:13:02 +00:00
await DAORegistro . registrar ( usuario . matricula , "Inicio Sesión" , new Date ( ) ) ;
logger . info ( ` Iniciao sesion el usuario: ${ usuario . matricula } ` ) ;
2024-05-25 05:38:51 +00:00
return usuario ;
}
return null ;
} catch ( error ) {
2024-06-03 04:59:59 +00:00
logger . error ( ` Error en DAO.alumnoIniciado: ${ error . message } ` ) ;
2024-05-25 05:38:51 +00:00
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 ) {
2024-06-03 04:59:59 +00:00
logger . error ( ` Error en DAO.obtenerUltimoID: ${ error . message } ` ) ;
2024-05-25 05:38:51 +00:00
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 ) ;
2024-06-03 14:13:02 +00:00
const formattedDate = fechaNacimiento . toISOString ( ) . split ( 'T' ) [ 0 ] ;
2024-05-25 05:38:51 +00:00
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 ) {
2024-06-03 04:59:59 +00:00
logger . error ( ` Error en DAO.traeUsuario: ${ error . message } ` ) ;
2024-05-25 05:38:51 +00:00
} finally {
conexion . cerrarConexion ( ) ;
}
return usuario ;
}
2024-06-03 04:59:59 +00:00
static async editarAlumnoInscrito ( data , id ) {
2024-05-26 19:06:55 +00:00
const conexion = new Conexion ( ) ;
const conexionEstablecida = await conexion . conectar ( ) ;
try {
const sql = ` UPDATE usuario SET inscrito = ? WHERE id = ? ` ;
const [ result ] = await conexionEstablecida . query ( sql , [
2024-06-03 04:59:59 +00:00
id , data . idUsuario
2024-05-26 19:06:55 +00:00
] ) ;
2024-06-03 04:59:59 +00:00
if ( result . affectedRows > 0 ) {
const usuario = new Usuario ( ) ;
usuario . id = data . idUsuario ;
await DAORegistro . registrar ( usuario , "Alumno inscrito" , new Date ( ) ) ;
return true ;
}
return false ;
2024-05-26 19:06:55 +00:00
} catch ( error ) {
2024-06-03 04:59:59 +00:00
logger . error ( ` Error en DAO.editarAlumnoInscrito: ${ error . message } ` ) ;
return false ;
2024-05-26 19:06:55 +00:00
} finally {
conexion . cerrarConexion ( ) ;
}
}
static async traeTodosLosDatosUsuario ( id ) {
const conexion = new Conexion ( ) ;
const conexionEstablecida = await conexion . conectar ( ) ;
let usuario = null ;
try {
2024-06-03 04:59:59 +00:00
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 = ?; ` ;
2024-05-26 19:06:55 +00:00
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 ) ;
2024-06-03 14:13:02 +00:00
const formattedDate = fechaNacimiento . toISOString ( ) . split ( 'T' ) [ 0 ] ;
2024-05-26 19:06:55 +00:00
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 ,
2024-06-03 04:59:59 +00:00
carreraNombre : row . carreraNombre ,
idCarrera : row . idCarrera
} ;
2024-05-26 19:06:55 +00:00
}
} catch ( error ) {
2024-06-03 04:59:59 +00:00
logger . error ( ` Error en DAO.traeTodosLosDatosUsuario: ${ error . message } ` ) ;
2024-05-26 19:06:55 +00:00
} finally {
conexion . cerrarConexion ( ) ;
}
return usuario ;
}
2024-06-03 04:59:59 +00:00
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 ( ) ;
}
}
2024-05-25 05:38:51 +00:00
}
2024-06-03 04:59:59 +00:00
export default DAO ;