From 4329863ee2defdd8aa4a26f8926a8c97c1fbf0aa Mon Sep 17 00:00:00 2001 From: Andres2908 Date: Mon, 24 Jan 2022 14:33:16 -0600 Subject: [PATCH] =?UTF-8?q?Conexi=C3=B3n=20con=20escolares?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/app.js | 4 +- server/config/mariadb.conf.js | 54 ++++++++++++++++ server/controller/Usuario/escolares.js | 79 +++++++++++++++++++++++ server/controller/Usuario/login.js | 0 server/routes/{Usuario .js => Usuario.js} | 20 ++++++ server/routes/index.js | 4 +- 6 files changed, 157 insertions(+), 4 deletions(-) create mode 100644 server/config/mariadb.conf.js create mode 100644 server/controller/Usuario/escolares.js create mode 100644 server/controller/Usuario/login.js rename server/routes/{Usuario .js => Usuario.js} (54%) diff --git a/server/app.js b/server/app.js index 2c2a27d..8640a9d 100644 --- a/server/app.js +++ b/server/app.js @@ -15,12 +15,12 @@ app.use( app.use(bodyParser.json()); -app.get('/', (req, res) => res.send('API Plantilla')); +app.get('/', (req, res) => res.send('API de Inscripciones a CEDETEC')); app.use(require('./routes/index')); app.listen(Number(process.env.PORT), () => console.log( - `API Plantilla corriendo en el puerto: ${process.env.PORT}`.rainbow + `API Inscripciones corriendo en el puerto: ${process.env.PORT}`.rainbow ) ); diff --git a/server/config/mariadb.conf.js b/server/config/mariadb.conf.js new file mode 100644 index 0000000..b1d162e --- /dev/null +++ b/server/config/mariadb.conf.js @@ -0,0 +1,54 @@ +require('./config'); +const mariadb = require('mariadb'); + +const pool = mariadb.createPool({ + host: process.env.ESCOLARES_HOST, + user: process.env.ESCOLARES_USER, + password: process.env.ESCOLARES_PASSWORD, + database: process.env.ESCOLARES_DB, +}); + +const pool2 = mariadb.createPool({ + host: process.env.PROFESORES_HOST, + user: process.env.PROFESORES_USER, + password: process.env.PROFESORES_PASSWORD, + database: process.env.PROFESORES_DB, +}); + +const obtenerAlumno = async (numeroCuenta) => { + const conn = await pool.getConnection().catch((err) => { + throw new Error('No se pudo conectar con la db. ' + err); + }); + + return conn + .query(`CALL busca_alumno_pcpuma('${numeroCuenta}')`) + .then((rows) => { + conn.end(); + if (rows[0].length === 0) return null; + return rows[0][0]; + }) + .catch((err) => { + conn.end(); + throw new Error('Hubo un problema con el querry.' + err); + }); +}; + +const obtenerProfesor = async (numeroCuenta) => { + const conn = await pool2.getConnection().catch((err) => { + throw new Error('No se pudo conectar con la db. ' + err); + }); + + return conn + .query(`SELECT * FROM Profesor WHERE NumTrabajador = ${numeroCuenta}`) + .then((rows) => { + conn.end(); + if (rows.length === 0) return null; + return rows[0]; + }) + .catch((err) => { + conn.end(); + throw new Error('Hubo un problema con el querry.' + err); + }); +}; + +module.exports = { obtenerAlumno, obtenerProfesor }; diff --git a/server/controller/Usuario/escolares.js b/server/controller/Usuario/escolares.js new file mode 100644 index 0000000..06463c3 --- /dev/null +++ b/server/controller/Usuario/escolares.js @@ -0,0 +1,79 @@ +const { obtenerAlumno, obtenerProfesor } = require('../../config/mariadb.conf'); +const validar = require('../../helper/validar'); +const dbPath = '../../db/tablas'; +const Carrera = require(`${dbPath}/Carrera`); +const TipoUsuario = require(`${dbPath}/TipoUsuario`); +const Usuario = require(`${dbPath}/Usuario`); + +const escolares = async (body) => { + const numeroCuenta = validar.validarNumeroCuenta(body.numeroCuenta); + + return Usuario.findOne({ + where: { usuario: numeroCuenta }, + include: [{ model: Carrera }, { model: TipoUsuario }], + }) + .then((res) => { + if (!res) { + let usuario = { Carrera: {} }; + let esAlumno = false; + + return obtenerAlumno(numeroCuenta) + .then(async (res) => { + if (!res) return obtenerProfesor(numeroCuenta); + esAlumno = true; + return res; + }) + .then(async (res) => { + usuario = res; + if (!usuario) + throw new Error( + 'Este número de cuenta o de trabajador no existe.' + ); + if (esAlumno) { + if (usuario.inscrito != 'SI') + throw new Error('Este alumno no esta inscrito este semestre.'); + await Carrera.findOne({ + where: { carrera: usuario.carrera }, + }) + .then((res) => { + if (!res) return Carrera.create({ carrera: usuario.carrera }); + return res; + }) + .then((res) => { + usuario.Carrera = res; + usuario.nombre = usuario.nombre.trim(); + usuario.idTipoUsuario = 4; + }); + } else { + usuario.idTipoUsuario = 3; + usuario.nombre = `${usuario.ApPaterno.trim()} ${usuario.ApMaterno.trim()} ${usuario.Nombre.trim()}`; + } + return Usuario.create({ + usuario: numeroCuenta, + nombre: usuario.nombre, + idCarrera: usuario.Carrera ? usuario.Carrera.idCarrera : null, + idTipoUsuario: usuario.idTipoUsuario, + }); + }) + .then((res) => + Usuario.findOne({ + where: { usuario: numeroCuenta }, + include: [{ model: Carrera }, { model: TipoUsuario }], + }) + ); + } else if (res.password) + throw new Error('Este número de cuenta ya fue registrado.'); + return res; + }) + .then((res) => { + delete res.dataValues.password; + delete res.dataValues.telefono; + delete res.dataValues.telefono; + delete res.dataValues.multa; + delete res.dataValues.idTipoUsuario; + delete res.dataValues.idCarrera; + return res; + }); +}; + +module.exports = escolares; diff --git a/server/controller/Usuario/login.js b/server/controller/Usuario/login.js new file mode 100644 index 0000000..e69de29 diff --git a/server/routes/Usuario .js b/server/routes/Usuario.js similarity index 54% rename from server/routes/Usuario .js rename to server/routes/Usuario.js index 6789afe..22dabba 100644 --- a/server/routes/Usuario .js +++ b/server/routes/Usuario.js @@ -15,4 +15,24 @@ const route = '/usuario'; // }); // }); +app.post(`${route}/login`, (req, res) => { + return login(req.body) + .then((data) => { + res.status(200).json(data); + }) + .catch((err) => { + res.status(400).json({ message: err.message }); + }); +}); + +app.get(`${route}/escolares`, (req, res) => { + return escolares(req.query) + .then((data) => { + res.status(200).json(data); + }) + .catch((err) => { + res.status(400).json({ message: err.message }); + }); +}); + module.exports = app; diff --git a/server/routes/index.js b/server/routes/index.js index 435f92b..5d305fc 100644 --- a/server/routes/index.js +++ b/server/routes/index.js @@ -1,6 +1,6 @@ -const express = require("express"); +const express = require('express'); const app = express(); -// app.use(require("./")); +app.use(require('./Usuario')); module.exports = app;