SIU_Dran_net/Server/Controller/DAO.js

219 lines
8.7 KiB
JavaScript

import Conexion from './Conexion.js'; // Asegúrate de tener la ruta correcta al archivo de conexión
import Usuario from '../Model/Usuario.js'; // Asegúrate de tener la ruta correcta al archivo de Usuario
import Mensaje from '../Model/Mensaje.js'; // Asegúrate de tener la ruta correcta al archivo de Mensaje
import DAORegistro from './DAORegistro.js';
class DAO {
static async matriculas() {
const conexion = new Conexion();
const conexionEstablecida = await conexion.conectar();
try {
const sql = `SELECT id, matricula FROM usuario where inscrito = 1`;
const [rows] = await conexionEstablecida.query(sql);
const resultado = rows.map(row => {
return { id: row.id, matricula: row.matricula };
});
return resultado;
} catch (error) {
console.error(error); s
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) {
console.error(error);
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
]);
return result.affectedRows > 0 ? new Mensaje(true, usuario.matricula, usuario.contrasena) : new Mensaje(false, null);
} catch (error) {
console.error(error);
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
]);
return result.affectedRows > 0;
} catch (error) {
console.error(error);
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, "Inicio Sesión", new Date());
return usuario;
}
return null;
} catch (error) {
console.error(error);
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) {
console.error(error);
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]; // "yyyy-MM-dd"
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) {
console.error(error);
} finally {
conexion.cerrarConexion();
}
return usuario;
}
static async editarAlumnoInscrito(data) {
const conexion = new Conexion();
const conexionEstablecida = await conexion.conectar();
try {
const sql = `UPDATE usuario SET inscrito = ? WHERE id = ?`;
const [result] = await conexionEstablecida.query(sql, [
1, data.idUsuario
]);
return result.affectedRows > 0;
} catch (error) {
} 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 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]; // "yyyy-MM-dd"
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
}
}
} catch (error) {
console.error(error);
} finally {
conexion.cerrarConexion();
}
return usuario;
}
}
export default DAO;