8 Commits

Author SHA1 Message Date
Patriots01 8a6fdc718a modificacinoes 2026-04-22 21:01:28 +01:00
Patriots01 954c76b899 Mod 2026-04-22 20:40:40 +01:00
Patriots01 577f40a817 Modificaciones 2026-04-22 20:24:40 +01:00
Patriots01 c1e79a0b7b Se quito la validacion del periodo que causa erro, no afecta a la logica 2026-02-05 01:09:25 +00:00
Patriots01 ceeb284bfa Merge branch 'dev' 2026-02-05 01:07:09 +00:00
Patriots01 73b5a91d89 Se corrigio un error 2026-02-05 00:58:56 +00:00
Patriots01 d2223b8b4c Se agrego manual el id, despues revisar para que funcione en automatico 2026-02-05 00:54:43 +00:00
Patriots01 13d3981f58 Se agrego el id del peridodo en automatico al momeno de registrar 2026-02-05 00:49:38 +00:00
6 changed files with 1462 additions and 3075 deletions
+1364 -3014
View File
File diff suppressed because it is too large Load Diff
+5 -5
View File
@@ -8,7 +8,7 @@
"db:install": "node ./server/db/install",
"db:data-fake": "node ./server/db/data-fake",
"dev": "nodemon ./server/app",
"start": "source ~/.nvm/nvm.sh && nvm use 16.15.1 && npm install && node ./server/app"
"start": "npm install && node ./server/app"
},
"repository": {
"type": "git",
@@ -17,8 +17,8 @@
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^0.25.0",
"bcrypt": "^5.0.1",
"axios": "^1.13.4",
"bcrypt": "^6.0.0",
"body-parser": "^1.19.0",
"colors": "^1.4.0",
"convert-array-to-csv": "^2.0.0",
@@ -28,10 +28,10 @@
"express": "^4.17.1",
"fs": "^0.0.1-security",
"gmail-send": "^1.8.14",
"jsonwebtoken": "^8.5.1",
"jsonwebtoken": "^9.0.3",
"mariadb": "^2.5.3",
"moment": "^2.29.1",
"multer": "^1.4.4",
"multer": "^2.0.2",
"nodemailer": "^7.0.5",
"sequelize": "^6.6.2",
"validator": "^13.6.0"
+13 -2
View File
@@ -34,8 +34,19 @@ app.get('/', (req, res) => res.send('API de Inscripciones a CEDETEC'));
app.use(require('./routes/index'));
app.listen(Number(process.env.PORT), () =>
const port = Number(process.env.PORT) || 3000;
const server = app.listen(port, () =>
console.log(
`API Inscripciones corriendo en el puerto: ${process.env.PORT}`.rainbow
`API Inscripciones corriendo en el puerto: ${port}`.rainbow
)
);
server.on('error', (error) => {
if (error.code === 'EADDRINUSE') {
console.error(
`Error: el puerto ${port} ya está en uso. Usa otra variable PORT en .env o detén el proceso que lo está ocupando.`
);
process.exit(1);
}
throw error;
});
+60 -53
View File
@@ -6,69 +6,75 @@ const pool = mariadb.createPool({
user: process.env.USER_DB,
password: process.env.PASSWORD_DB,
database: process.env.SAT_DB,
connectionLimit: 5, // Limitar a 5 conexiones para evitar sobrecarga
acquireTimeout: 60000, // Timeout de 60 segundos para adquirir conexión
timeout: 60000, // Timeout general
});
const obtenerDatosUsr = async (numeroCuenta) => {
const conn = await pool.getConnection().catch((err) => {
throw new Error('No se pudo conectar con la db. ' + err);
});
return conn
.query(
`SELECT id_carrera, generacion FROM alumno WHERE id_cuenta = ${numeroCuenta}`
)
.then((rows) => {
conn.end();
return rows[0];
})
.catch((err) => {
conn.end();
throw new Error('Hubo un problema con el querry.' + err);
let conn;
try {
conn = await pool.getConnection().catch((err) => {
throw new Error('No se pudo conectar con la db. ' + err);
});
const rows = await conn.query(
`SELECT id_carrera, generacion FROM alumno WHERE id_cuenta = ${numeroCuenta}`
);
return rows[0];
} catch (err) {
throw new Error('Hubo un problema con el querry.' + err);
} finally {
if (conn) conn.end();
}
};
// Agregue para profesores
const buscarProfesorPorNumero = async (numeroTrabajador) => {
//console.log("Buscando profesor con numeroCuenta:", numeroTrabajador);
const conn = await pool.getConnection().catch((err) => {
throw new Error('No se pudo conectar con la base de datos. ' + err);
});
let conn;
try {
conn = await pool.getConnection().catch((err) => {
throw new Error('No se pudo conectar con la base de datos. ' + err);
});
return conn
.query(
const rows = await conn.query(
`SELECT nombre, id_cuenta FROM alumno WHERE id_cuenta = ?`,
[numeroTrabajador] // NUmero de cuenta
)
.then((rows) => {
console.log(numeroTrabajador)
conn.end();
if (rows.length === 0) return null;
//console.log('Resultado de la consulta:', rows); // <--- Aquí
return rows[0]; // { nombre: 'Juan', rfc: 'JUAP123' }
})
.catch((err) => {
conn.end();
throw new Error('Error al buscar el profesor: ' + err);
});
);
console.log(numeroTrabajador);
if (rows.length === 0) return null;
//console.log('Resultado de la consulta:', rows); // <--- Aquí
return rows[0]; // { nombre: 'Juan', rfc: 'JUAP123' }
} catch (err) {
throw new Error('Error al buscar el profesor: ' + err);
} finally {
if (conn) conn.end();
}
};
const validarPeriodoActivo = async (conn) => {
const rows = await conn.query(
`SELECT id_periodo
FROM periodo
WHERE activo = b'1'
LIMIT 1`
);
return conn
.query(
`SELECT id_periodo FROM periodo WHERE activo = b'1' LIMIT 1`
)
.then((rows) => {
if (!rows || rows.length === 0) {
console.log('No existe');
throw new Error('No existe un periodo activo en el sistema');
}
return rows;
})
.catch((err) => {
throw new Error('Error al validar periodo activo: ' + err);
});
if (!rows || rows.length === 0) {
console.log('No existe')
throw new Error('No existe un periodo activo en el sistema')
}
console.log('Este es el periodo: ', rows[0])
console.log('Este es el id del periodo: ', rows[0].id_periodo)
return rows[0].id_periodo;
// console.log('Este es el periodo: ', rows[0])
// console.log('Este es el id del periodo: ', rows[0].id_periodo)
// return rows[0].id_periodo;
}
const validarAlumnoInscrito = async (idCuenta) => {
@@ -82,11 +88,12 @@ const validarAlumnoInscrito = async (idCuenta) => {
throw new Error('Error: el número de trabajador no existe');
}
const conn = await pool.getConnection().catch((err) => {
throw new Error('No se pudo conectar con la base de datos. ' + err);
});
let conn;
try {
conn = await pool.getConnection().catch((err) => {
throw new Error('No se pudo conectar con la base de datos. ' + err);
});
const idPeriodoActivo = await validarPeriodoActivo(conn);
console.log("id del periodo: " + idPeriodoActivo)
@@ -98,11 +105,11 @@ const validarAlumnoInscrito = async (idCuenta) => {
if (rows.length === 0) return null;
return rows[0]
return rows[0];
} catch (error) {
throw new Error('Error al validar alumno inscrito: ' + err)
throw new Error('Error al validar alumno inscrito: ' + error);
} finally {
conn.end()
if (conn) conn.end();
}
// return conn
+7 -1
View File
@@ -7,12 +7,18 @@ const sequelize = new Sequelize(
process.env.PASSWORD_DB,
{
host: process.env.HOST_DB,
dialect: process.env.TYPEDB,
dialect: process.env.TYPEDB || 'mariadb',
logging: false,
dialectOptions: {
useUTC: false,
},
timezone: '-06:00',
pool: {
max: 5, // Máximo 5 conexiones
min: 0, // Mínimo 0
acquire: 30000, // Tiempo para adquirir conexión (30s)
idle: 10000, // Tiempo idle antes de cerrar (10s)
},
}
);
@@ -37,6 +37,19 @@ async function realizarInscripcion(req, res) {
});
}
// // 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
await AlumnoInscrito.create({
id_cuenta: usuario.id_cuenta,