cambio de frameWork
This commit is contained in:
parent
f0f6c8bf47
commit
41b16210f2
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,38 @@
|
||||||
|
import mysql from 'mysql2/promise'; // Importa la versión de la biblioteca que soporta promesas
|
||||||
|
|
||||||
|
class Conexion {
|
||||||
|
constructor() {
|
||||||
|
this.conexion = null;
|
||||||
|
this.configuracion = {
|
||||||
|
host: 'localhost',
|
||||||
|
user: 'UserRemoto',
|
||||||
|
password: 'password123',
|
||||||
|
database: 'universidad'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async conectar() {
|
||||||
|
try {
|
||||||
|
this.conexion = await mysql.createConnection(this.configuracion);
|
||||||
|
console.log('Conexión exitosa a MySQL');
|
||||||
|
return this.conexion;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error al conectar con la base de datos:', error.message);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cerrarConexion() {
|
||||||
|
if (this.conexion) {
|
||||||
|
this.conexion.end((err) => {
|
||||||
|
if (err) {
|
||||||
|
console.error('Error al cerrar la conexión con la base de datos:', err.message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
console.log('Se desconectó de la base de datos');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Conexion;
|
|
@ -0,0 +1,160 @@
|
||||||
|
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 dameAlumnos() {
|
||||||
|
const conexion = new Conexion();
|
||||||
|
const conexionEstablecida = await conexion.conectar();
|
||||||
|
try {
|
||||||
|
const sql = `SELECT id, nombre, apellido, matricula FROM usuario`;
|
||||||
|
const [rows] = await conexionEstablecida.query(sql);
|
||||||
|
const resultado = rows.map(row => new Usuario(row.id, row.nombre, row.apellido, row.matricula));
|
||||||
|
return resultado;
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default DAO;
|
|
@ -0,0 +1,22 @@
|
||||||
|
import Conexion from './Conexion.js'; // Asegúrate de tener la ruta correcta al archivo de conexión
|
||||||
|
import Carrera from '../Model/Carrera.js'; // Asegúrate de tener la ruta correcta al archivo de Carrera
|
||||||
|
|
||||||
|
class DAOCarrera {
|
||||||
|
static async dameCarreras() {
|
||||||
|
const conexion = new Conexion();
|
||||||
|
const conexionEstablecida = await conexion.conectar();
|
||||||
|
try {
|
||||||
|
const sql = "SELECT * FROM carrera";
|
||||||
|
const [rows] = await conexionEstablecida.query(sql);
|
||||||
|
const resultado = rows.map(row => new Carrera(row.id, row.nombre, row.area, row.campus, row.descripcion, row.mision, row.vision, row.objetivo));
|
||||||
|
return resultado;
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
return [];
|
||||||
|
} finally {
|
||||||
|
conexion.cerrarConexion();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default DAOCarrera;
|
|
@ -0,0 +1,22 @@
|
||||||
|
import Conexion from './Conexion.js';
|
||||||
|
|
||||||
|
class DAODocumento {
|
||||||
|
static async agregarDocumento(req, file) {
|
||||||
|
const conexion = new Conexion();
|
||||||
|
const conexionEstablecida = await conexion.conectar()
|
||||||
|
try {
|
||||||
|
const sql = "INSERT INTO `documento`(`titulo`,`archivo`,`idUsuario`,`valido`) VALUES(?,?,?,?);";
|
||||||
|
const [result] = await conexionEstablecida.query(sql, [
|
||||||
|
req.titulo, file, req.idUsuario, 0
|
||||||
|
]);
|
||||||
|
return result.affectedRows > 0;
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
throw error;
|
||||||
|
} finally {
|
||||||
|
conexion.cerrarConexion();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default DAODocumento;
|
|
@ -0,0 +1,20 @@
|
||||||
|
import Conexion from './Conexion.js'; // Asegúrate de tener la ruta correcta al archivo de conexión
|
||||||
|
|
||||||
|
class DAORegistro {
|
||||||
|
static async registrar(usuario, descripcion, day) {
|
||||||
|
const conexion = new Conexion();
|
||||||
|
const conexionEstablecida = await conexion.conectar();
|
||||||
|
try {
|
||||||
|
const sql = "INSERT INTO registro (matricula, descripcion) VALUES (?, ?)";
|
||||||
|
const stm = await conexionEstablecida.query(sql, [usuario.getMatricula(), descripcion + day]);
|
||||||
|
return stm.affectedRows > 0;
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
return false;
|
||||||
|
} finally {
|
||||||
|
conexion.cerrarConexion();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default DAORegistro;
|
|
@ -0,0 +1,57 @@
|
||||||
|
import Conexion from './Conexion.js'; // Asegúrate de tener la ruta correcta al archivo de conexión
|
||||||
|
import Tutor from '../Model/Tutor.js'; // Asegúrate de tener la ruta correcta al archivo de Tutor
|
||||||
|
|
||||||
|
class DAOTutor {
|
||||||
|
|
||||||
|
static async agregarTutor(tutor) {
|
||||||
|
const conexion = new Conexion();
|
||||||
|
const conexionEstablecida = await conexion.conectar();
|
||||||
|
try {
|
||||||
|
const sql = `INSERT INTO tutor (nombre,apellido,numeroDeTelefono,idUsuario)VALUES(?,?,?,?);`;
|
||||||
|
const [result] = await conexionEstablecida.query(sql, [tutor.nombre, tutor.apellido, tutor.numeroDeTelefono, tutor.idUsuario]);
|
||||||
|
return result.affectedRows > 0;
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
return false;
|
||||||
|
} finally {
|
||||||
|
conexion.cerrarConexion();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static async editarTutor(tutor) {
|
||||||
|
const conexion = new Conexion();
|
||||||
|
const conexionEstablecida = await conexion.conectar();
|
||||||
|
try {
|
||||||
|
const sql = `UPDATE tutor SET nombre = ?, apellido = ?, numeroDeTelefono = ? WHERE idUsuario = ?`;
|
||||||
|
const [result] = await conexionEstablecida.query(sql, [tutor.nombre, tutor.apellido, tutor.numeroDeTelefono, tutor.idUsuario]);
|
||||||
|
return result.affectedRows > 0;
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
return false;
|
||||||
|
} finally {
|
||||||
|
conexion.cerrarConexion();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static async traerTutor(id) {
|
||||||
|
const conexion = new Conexion();
|
||||||
|
const conexionEstablecida = await conexion.conectar();
|
||||||
|
try {
|
||||||
|
const sql = `SELECT id, nombre, apellido, numeroDeTelefono, idUsuario FROM tutor WHERE idUsuario = ?`;
|
||||||
|
const [rows] = await conexionEstablecida.query(sql, [id]);
|
||||||
|
if (rows.length > 0) {
|
||||||
|
const row = rows[0];
|
||||||
|
const tutor = new Tutor(row.id, row.nombre, row.apellido, row.numeroDeTelefono, row.idUsuario);
|
||||||
|
return tutor;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
return null;
|
||||||
|
} finally {
|
||||||
|
conexion.cerrarConexion();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default DAOTutor;
|
|
@ -0,0 +1,80 @@
|
||||||
|
class Carrera {
|
||||||
|
constructor(id, nombre, area, campus, descripcion, mision, vision, objetivo) {
|
||||||
|
this.id = id;
|
||||||
|
this.nombre = nombre;
|
||||||
|
this.area = area;
|
||||||
|
this.campus = campus;
|
||||||
|
this.descripcion = descripcion;
|
||||||
|
this.mision = mision;
|
||||||
|
this.vision = vision;
|
||||||
|
this.objetivo = objetivo;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getters
|
||||||
|
getId() {
|
||||||
|
return this.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
getNombre() {
|
||||||
|
return this.nombre;
|
||||||
|
}
|
||||||
|
|
||||||
|
getArea() {
|
||||||
|
return this.area;
|
||||||
|
}
|
||||||
|
|
||||||
|
getCampus() {
|
||||||
|
return this.campus;
|
||||||
|
}
|
||||||
|
|
||||||
|
getDescripcion() {
|
||||||
|
return this.descripcion;
|
||||||
|
}
|
||||||
|
|
||||||
|
getMision() {
|
||||||
|
return this.mision;
|
||||||
|
}
|
||||||
|
|
||||||
|
getVision() {
|
||||||
|
return this.vision;
|
||||||
|
}
|
||||||
|
|
||||||
|
getObjetivo() {
|
||||||
|
return this.objetivo;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setters
|
||||||
|
setId(id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
setNombre(nombre) {
|
||||||
|
this.nombre = nombre;
|
||||||
|
}
|
||||||
|
|
||||||
|
setArea(area) {
|
||||||
|
this.area = area;
|
||||||
|
}
|
||||||
|
|
||||||
|
setCampus(campus) {
|
||||||
|
this.campus = campus;
|
||||||
|
}
|
||||||
|
|
||||||
|
setDescripcion(descripcion) {
|
||||||
|
this.descripcion = descripcion;
|
||||||
|
}
|
||||||
|
|
||||||
|
setMision(mision) {
|
||||||
|
this.mision = mision;
|
||||||
|
}
|
||||||
|
|
||||||
|
setVision(vision) {
|
||||||
|
this.vision = vision;
|
||||||
|
}
|
||||||
|
|
||||||
|
setObjetivo(objetivo) {
|
||||||
|
this.objetivo = objetivo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Carrera;
|
|
@ -0,0 +1,29 @@
|
||||||
|
class Mensaje {
|
||||||
|
constructor(verificacion, matricula, contrasena) {
|
||||||
|
this.verificacion = verificacion;
|
||||||
|
this.matricula = matricula;
|
||||||
|
this.contrasena = contrasena;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getter para la propiedad 'verificacion'
|
||||||
|
isVerificacion() {
|
||||||
|
return this.verificacion;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getter para la propiedad 'usuario'
|
||||||
|
getUsuario() {
|
||||||
|
return this.usuario;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setter para la propiedad 'verificacion'
|
||||||
|
setVerificacion(verificacion) {
|
||||||
|
this.verificacion = verificacion;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setter para la propiedad 'usuario'
|
||||||
|
setUsuario(usuario) {
|
||||||
|
this.usuario = usuario;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Mensaje;
|
|
@ -0,0 +1,39 @@
|
||||||
|
class Registro {
|
||||||
|
constructor(id, matricula, descripcion) {
|
||||||
|
this.id = id;
|
||||||
|
this.matricula = matricula;
|
||||||
|
this.descripcion = descripcion;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getter para la propiedad 'id'
|
||||||
|
getId() {
|
||||||
|
return this.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getter para la propiedad 'matricula'
|
||||||
|
getMatricula() {
|
||||||
|
return this.matricula;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getter para la propiedad 'descripcion'
|
||||||
|
getDescripcion() {
|
||||||
|
return this.descripcion;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setter para la propiedad 'id'
|
||||||
|
setId(id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setter para la propiedad 'matricula'
|
||||||
|
setMatricula(matricula) {
|
||||||
|
this.matricula = matricula;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setter para la propiedad 'descripcion'
|
||||||
|
setDescripcion(descripcion) {
|
||||||
|
this.descripcion = descripcion;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Registro;
|
|
@ -0,0 +1,51 @@
|
||||||
|
class Tutor {
|
||||||
|
constructor(id, nombre, apellido, numeroDeTelefono, idUsuario) {
|
||||||
|
this.id = id;
|
||||||
|
this.nombre = nombre;
|
||||||
|
this.apellido = apellido;
|
||||||
|
this.numeroDeTelefono = numeroDeTelefono;
|
||||||
|
this.idUsuario = idUsuario;
|
||||||
|
}
|
||||||
|
|
||||||
|
getId() {
|
||||||
|
return this.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
getNombre() {
|
||||||
|
return this.nombre;
|
||||||
|
}
|
||||||
|
|
||||||
|
getApellido() {
|
||||||
|
return this.apellido;
|
||||||
|
}
|
||||||
|
|
||||||
|
getNumeroDeTelefono() {
|
||||||
|
return this.numeroDeTelefono;
|
||||||
|
}
|
||||||
|
|
||||||
|
getIdUsuario() {
|
||||||
|
return this.idUsuario;
|
||||||
|
}
|
||||||
|
|
||||||
|
setId(id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
setNombre(nombre) {
|
||||||
|
this.nombre = nombre;
|
||||||
|
}
|
||||||
|
|
||||||
|
setApellido(apellido) {
|
||||||
|
this.apellido = apellido;
|
||||||
|
}
|
||||||
|
|
||||||
|
setNumeroDeTelefono(numeroDeTelefono) {
|
||||||
|
this.numeroDeTelefono = numeroDeTelefono;
|
||||||
|
}
|
||||||
|
|
||||||
|
setIdUsuario(idUsuario) {
|
||||||
|
this.idUsuario = idUsuario;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Tutor;
|
|
@ -0,0 +1,139 @@
|
||||||
|
class Usuario {
|
||||||
|
constructor(
|
||||||
|
id, nombre, apellido, matricula, contrasena, correo,
|
||||||
|
nacionalidad, tipoSangre, fecha_nacimiento, curp,
|
||||||
|
rol, idCarrera, inscrito
|
||||||
|
) {
|
||||||
|
this.id = id;
|
||||||
|
this.nombre = nombre;
|
||||||
|
this.apellido = apellido;
|
||||||
|
this.matricula = matricula;
|
||||||
|
this.contrasena = contrasena || ''; // Valor predeterminado para contrasena
|
||||||
|
this.correo = correo;
|
||||||
|
this.nacionalidad = nacionalidad;
|
||||||
|
this.tipoSangre = tipoSangre;
|
||||||
|
this.fecha_nacimiento = fecha_nacimiento;
|
||||||
|
this.curp = curp;
|
||||||
|
this.rol = rol;
|
||||||
|
this.idCarrera = idCarrera;
|
||||||
|
this.inscrito = inscrito;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getters
|
||||||
|
getId() {
|
||||||
|
return this.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
getNombre() {
|
||||||
|
return this.nombre;
|
||||||
|
}
|
||||||
|
|
||||||
|
getApellido() {
|
||||||
|
return this.apellido;
|
||||||
|
}
|
||||||
|
|
||||||
|
getMatricula() {
|
||||||
|
return this.matricula;
|
||||||
|
}
|
||||||
|
|
||||||
|
getContrasena() {
|
||||||
|
return this.contrasena;
|
||||||
|
}
|
||||||
|
|
||||||
|
getCorreo() {
|
||||||
|
return this.correo;
|
||||||
|
}
|
||||||
|
|
||||||
|
getNacionalidad() {
|
||||||
|
return this.nacionalidad;
|
||||||
|
}
|
||||||
|
|
||||||
|
getTipoSangre() {
|
||||||
|
return this.tipoSangre;
|
||||||
|
}
|
||||||
|
|
||||||
|
getFecha_nacimiento() {
|
||||||
|
return this.fecha_nacimiento;
|
||||||
|
}
|
||||||
|
|
||||||
|
getCurp() {
|
||||||
|
return this.curp;
|
||||||
|
}
|
||||||
|
|
||||||
|
getRol() {
|
||||||
|
return this.rol;
|
||||||
|
}
|
||||||
|
|
||||||
|
getIdCarrera() {
|
||||||
|
return this.idCarrera;
|
||||||
|
}
|
||||||
|
|
||||||
|
getInscrito() {
|
||||||
|
return this.inscrito;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setters
|
||||||
|
setId(id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
setNombre(nombre) {
|
||||||
|
this.nombre = nombre;
|
||||||
|
}
|
||||||
|
|
||||||
|
setApellido(apellido) {
|
||||||
|
this.apellido = apellido;
|
||||||
|
}
|
||||||
|
|
||||||
|
setMatricula(matricula) {
|
||||||
|
this.matricula = matricula;
|
||||||
|
}
|
||||||
|
|
||||||
|
setContrasena(contrasena) {
|
||||||
|
this.contrasena = contrasena;
|
||||||
|
}
|
||||||
|
|
||||||
|
setCorreo(correo) {
|
||||||
|
this.correo = correo;
|
||||||
|
}
|
||||||
|
|
||||||
|
setNacionalidad(nacionalidad) {
|
||||||
|
this.nacionalidad = nacionalidad;
|
||||||
|
}
|
||||||
|
|
||||||
|
setTipoSangre(tipoSangre) {
|
||||||
|
this.tipoSangre = tipoSangre;
|
||||||
|
}
|
||||||
|
|
||||||
|
setFecha_nacimiento(fecha_nacimiento) {
|
||||||
|
this.fecha_nacimiento = fecha_nacimiento;
|
||||||
|
}
|
||||||
|
|
||||||
|
setCurp(curp) {
|
||||||
|
this.curp = curp;
|
||||||
|
}
|
||||||
|
|
||||||
|
setRol(rol) {
|
||||||
|
this.rol = rol;
|
||||||
|
}
|
||||||
|
|
||||||
|
setIdCarrera(idCarrera) {
|
||||||
|
this.idCarrera = idCarrera;
|
||||||
|
}
|
||||||
|
|
||||||
|
setInscrito(inscrito) {
|
||||||
|
this.inscrito = inscrito;
|
||||||
|
}
|
||||||
|
|
||||||
|
crearToken() {
|
||||||
|
const CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
||||||
|
let token = '';
|
||||||
|
for (let i = 0; i < 15; i++) {
|
||||||
|
const index = Math.floor(Math.random() * CHARACTERS.length);
|
||||||
|
token += CHARACTERS.charAt(index);
|
||||||
|
}
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Usuario;
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,26 @@
|
||||||
|
{
|
||||||
|
"name": "server",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "index.js",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"description": "",
|
||||||
|
"dependencies": {
|
||||||
|
"body-parser": "^1.20.2",
|
||||||
|
"cors": "^2.8.5",
|
||||||
|
"express": "^4.19.2",
|
||||||
|
"jsonwebtoken": "^9.0.2",
|
||||||
|
"multer": "^1.4.5-lts.1",
|
||||||
|
"mysql": "^2.18.1",
|
||||||
|
"mysql2": "^3.9.7",
|
||||||
|
"winston": "^3.13.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"nodemon": "^3.1.0"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
import express from 'express';
|
||||||
|
import DAO from '../Controller/dao.js';// Asegúrate de que la ruta sea correcta
|
||||||
|
|
||||||
|
const router = express.Router();
|
||||||
|
|
||||||
|
router.post('/alumnoIniciado', async (req, res) => {
|
||||||
|
const { matricula, contrasena } = req.body;
|
||||||
|
try {
|
||||||
|
// Verificar si el alumno está en la base de datos
|
||||||
|
const usuario = await DAO.alumnoIniciado(matricula, contrasena);
|
||||||
|
if (usuario) {
|
||||||
|
// El alumno está autenticado correctamente
|
||||||
|
const authToken = usuario.crearToken();
|
||||||
|
const authRol = usuario.getRol();
|
||||||
|
const authId = usuario.getId();
|
||||||
|
const message = `Bienvenido ${usuario.getNombre()}`;
|
||||||
|
res.json({ matricula, authToken, authRol, authId, message });
|
||||||
|
} else {
|
||||||
|
// El alumno no está autenticado
|
||||||
|
res.status(401).json({ error: "Credenciales inválidas" });
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error al iniciar sesión:', error);
|
||||||
|
res.status(500).json({ error: "Error al iniciar sesión" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
export default router;
|
|
@ -0,0 +1,180 @@
|
||||||
|
import express from 'express';
|
||||||
|
import bodyParser from 'body-parser';
|
||||||
|
import DAO from './Controller/DAO.js'; // Importa tus controladores DAO
|
||||||
|
import DAOTutor from './Controller/DAOTutor.js';
|
||||||
|
import DAOCarreras from './Controller/DAOCarrera.js';
|
||||||
|
import Usuario from './Model/Usuario.js'; // Importa tus modelos
|
||||||
|
import multer from 'multer';
|
||||||
|
import path from 'path';
|
||||||
|
import { fileURLToPath } from 'url';
|
||||||
|
import DAODocumento from './Controller/DAODocumento.js';
|
||||||
|
import fs from 'fs';
|
||||||
|
|
||||||
|
const app = express();
|
||||||
|
const port = 3000;
|
||||||
|
|
||||||
|
// Obtener el directorio actual
|
||||||
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
|
const __dirname = path.dirname(__filename);
|
||||||
|
|
||||||
|
const diskStorage = multer.diskStorage({
|
||||||
|
destination: path.join(__dirname, '/ActasNacimiento'),
|
||||||
|
filename: (req, file, cb) => {
|
||||||
|
cb(null, file.originalname);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const fileUpload = multer({
|
||||||
|
storage: diskStorage
|
||||||
|
}).single('archivo');
|
||||||
|
|
||||||
|
app.use(bodyParser.json());
|
||||||
|
|
||||||
|
// Configuración de CORS
|
||||||
|
app.use((req, res, next) => {
|
||||||
|
res.header("Access-Control-Allow-Origin", "http://localhost:5173");
|
||||||
|
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
|
||||||
|
res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
|
||||||
|
res.header("Access-Control-Allow-Credentials", "true");
|
||||||
|
next();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Rutas
|
||||||
|
app.get("/todosLosAlumnos", async (req, res) => {
|
||||||
|
try {
|
||||||
|
const alumnos = await DAO.dameAlumnos();
|
||||||
|
res.json(alumnos);
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: error.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.post("/agregarAlumno", async (req, res) => {
|
||||||
|
try {
|
||||||
|
const usuario = req.body;
|
||||||
|
usuario.rol = "estudiante";
|
||||||
|
const msj = await DAO.agregarAlumno(usuario);
|
||||||
|
res.json(msj);
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: error.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.put("/editarUsuario", async (req, res) => {
|
||||||
|
try {
|
||||||
|
const usuario = req.body;
|
||||||
|
const verificado = await DAO.editarAlumno(usuario);
|
||||||
|
res.json({ Editado: verificado });
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: error.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.put("/editarTutor", async (req, res) => {
|
||||||
|
try {
|
||||||
|
const tutor = req.body;
|
||||||
|
const verificado = await DAOTutor.editarTutor(tutor);
|
||||||
|
res.json({ Editado: verificado });
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: error.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.post("/agregarTutor", async (req, res) => {
|
||||||
|
try {
|
||||||
|
const tutor = req.body;
|
||||||
|
const agregado = await DAOTutor.agregarTutor(tutor);
|
||||||
|
res.json({ msj: agregado });
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: error.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.post("/alumnoIniciado", async (req, res) => {
|
||||||
|
try {
|
||||||
|
const alumno = req.body;
|
||||||
|
const matricula = alumno.matricula;
|
||||||
|
if (!alumno.matricula || !alumno.contrasena) {
|
||||||
|
return res.status(400).json({ error: "Missing matricula or contrasena" });
|
||||||
|
}
|
||||||
|
const usuario = await DAO.alumnoIniciado(alumno.matricula, alumno.contrasena);
|
||||||
|
const user = new Usuario();
|
||||||
|
if (usuario) {
|
||||||
|
const authToken = user.crearToken();
|
||||||
|
const authRol = usuario.getRol();
|
||||||
|
const authId = usuario.getId();
|
||||||
|
const message = `Bienvenido ${usuario.getNombre()}`;
|
||||||
|
res.json({ matricula, authToken, authRol, authId, message });
|
||||||
|
} else {
|
||||||
|
res.status(401).json({ error: "Credenciales inválidas" });
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: error.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.post("/usuarioValido", async (req, res) => {
|
||||||
|
try {
|
||||||
|
const usuario = req.body;
|
||||||
|
const verificado = await DAO.validarAlumno(usuario);
|
||||||
|
res.json({ existe: verificado });
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: error.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.post("/traerDatosAlumno", async (req, res) => {
|
||||||
|
try {
|
||||||
|
const usuario = req.body;
|
||||||
|
const datos = await DAO.traeUsuario(usuario.id);
|
||||||
|
res.json(datos);
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: error.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get("/carreras", async (req, res) => {
|
||||||
|
try {
|
||||||
|
const carreras = await DAOCarreras.dameCarreras();
|
||||||
|
res.json(carreras);
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: error.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.post("/traerDatosTutor", async (req, res) => {
|
||||||
|
try {
|
||||||
|
const usuario = req.body;
|
||||||
|
const datos = await DAOTutor.traerTutor(usuario.id);
|
||||||
|
res.json(datos);
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: error.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.post("/agregarDocumentoAN", fileUpload, async (req, res) => {
|
||||||
|
try {
|
||||||
|
const data = req.body;
|
||||||
|
const file = fs.readFileSync(path.join(__dirname, '/ActasNacimiento/' + req.file.filename))
|
||||||
|
const guardado = await DAODocumento.agregarDocumento(data, file);
|
||||||
|
|
||||||
|
if (guardado) {
|
||||||
|
res.json({ message: "Archivo guardado correctamente" });
|
||||||
|
} else {
|
||||||
|
res.json({ message: "No se pudo guardar el archivo" });
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: error.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Manejo de errores
|
||||||
|
app.use((err, req, res, next) => {
|
||||||
|
console.error(err.stack);
|
||||||
|
res.status(500).send('Something broke!');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Iniciar el servidor
|
||||||
|
app.listen(port, () => {
|
||||||
|
console.log(`App listening at http://localhost:${port}`);
|
||||||
|
});
|
Loading…
Reference in New Issue