SIU_Dran_net/Server/server.js

267 lines
8.1 KiB
JavaScript
Raw Normal View History

2024-05-25 05:38:51 +00:00
import express from 'express';
import bodyParser from 'body-parser';
2024-05-26 19:06:55 +00:00
import cors from 'cors';
2024-06-03 04:59:59 +00:00
import DAO from './Controller/DAO.js';
2024-05-25 05:38:51 +00:00
import DAOTutor from './Controller/DAOTutor.js';
import DAOCarreras from './Controller/DAOCarrera.js';
2024-06-03 04:59:59 +00:00
import Usuario from './Model/Usuario.js';
2024-05-25 05:38:51 +00:00
import multer from 'multer';
import path from 'path';
import { fileURLToPath } from 'url';
import DAODocumento from './Controller/DAODocumento.js';
import fs from 'fs';
2024-06-03 04:59:59 +00:00
import logger from './utils/logger.js';
2024-06-11 03:55:47 +00:00
import EmailCtrl from './utils/mailCtrl.js';
import swaggerUi from 'swagger-ui-express';
import swaggerFile from './swagger-output.json' assert { type: 'json' }; // Importar JSON con aserción de tipo
2024-05-25 05:38:51 +00:00
const app = express();
2024-06-11 03:55:47 +00:00
2024-05-25 05:38:51 +00:00
const port = 3000;
// Obtener el directorio actual
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const diskStorage = multer.diskStorage({
2024-06-03 04:59:59 +00:00
destination: path.join(__dirname, '/Documentos'),
2024-05-25 05:38:51 +00:00
filename: (req, file, cb) => {
cb(null, file.originalname);
}
});
const fileUpload = multer({
storage: diskStorage
}).single('archivo');
app.use(bodyParser.json());
// Configuración de CORS
2024-05-26 19:06:55 +00:00
app.use(cors({
2024-06-03 04:59:59 +00:00
origin: 'http://localhost:5173',
2024-05-26 19:06:55 +00:00
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
allowedHeaders: ['Origin', 'X-Requested-With', 'Content-Type', 'Accept'],
credentials: true
}));
2024-06-03 04:59:59 +00:00
app.use(express.static(path.join(__dirname, 'Documentos')));
2024-05-25 05:38:51 +00:00
2024-06-11 03:55:47 +00:00
app.use("/swagger", swaggerUi.serve, swaggerUi.setup(swaggerFile));
2024-05-25 05:38:51 +00:00
// Rutas
2024-05-26 19:06:55 +00:00
app.get("/matriculas", async (req, res) => {
2024-05-25 05:38:51 +00:00
try {
2024-05-26 19:06:55 +00:00
const alumnos = await DAO.matriculas();
2024-05-25 05:38:51 +00:00
res.json(alumnos);
} catch (error) {
2024-06-03 04:59:59 +00:00
logger.error(`Error en /matriculas: ${error.message}`);
2024-05-25 05:38:51 +00:00
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) {
2024-06-03 04:59:59 +00:00
logger.error(`Error en /agregarAlumno: ${error.message}`);
2024-05-25 05:38:51 +00:00
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) {
2024-06-03 04:59:59 +00:00
logger.error(`Error en /editarUsuario: ${error.message}`);
2024-05-25 05:38:51 +00:00
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) {
2024-06-03 04:59:59 +00:00
logger.error(`Error en /editarTutor: ${error.message}`);
2024-05-25 05:38:51 +00:00
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) {
2024-06-03 04:59:59 +00:00
logger.error(`Error en /agregarTutor: ${error.message}`);
2024-05-25 05:38:51 +00:00
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) {
2024-06-03 04:59:59 +00:00
logger.error(`Error en /alumnoIniciado: ${error.message}`);
2024-05-25 05:38:51 +00:00
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) {
2024-06-03 04:59:59 +00:00
logger.error(`Error en /usuarioValido: ${error.message}`);
2024-05-25 05:38:51 +00:00
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) {
2024-06-03 04:59:59 +00:00
logger.error(`Error en /traerDatosAlumno: ${error.message}`);
2024-05-25 05:38:51 +00:00
res.status(500).json({ error: error.message });
}
});
app.get("/carreras", async (req, res) => {
try {
const carreras = await DAOCarreras.dameCarreras();
res.json(carreras);
} catch (error) {
2024-06-03 04:59:59 +00:00
logger.error(`Error en /carreras: ${error.message}`);
2024-05-25 05:38:51 +00:00
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) {
2024-06-03 04:59:59 +00:00
logger.error(`Error en /traerDatosTutor: ${error.message}`);
2024-05-25 05:38:51 +00:00
res.status(500).json({ error: error.message });
}
});
2024-06-03 04:59:59 +00:00
app.post("/agregarDocumento", fileUpload, async (req, res) => {
2024-05-25 05:38:51 +00:00
try {
2024-06-03 04:59:59 +00:00
if (!req.file) {
return res.status(400).json({ error: "No se ha cargado ningún archivo" });
}
2024-05-25 05:38:51 +00:00
const data = req.body;
2024-06-03 04:59:59 +00:00
const filePath = path.join(__dirname, 'Documentos', req.file.filename);
const file = fs.readFileSync(filePath);
2024-05-25 05:38:51 +00:00
const guardado = await DAODocumento.agregarDocumento(data, file);
if (guardado) {
2024-06-03 04:59:59 +00:00
const cambiar = await DAO.editarAlumnoInscrito(data, 1);
2024-05-26 19:06:55 +00:00
if (cambiar) {
res.json({ message: true });
} else {
res.json({ message: false });
}
2024-05-25 05:38:51 +00:00
} else {
2024-05-26 19:06:55 +00:00
res.json({ message: false });
2024-05-25 05:38:51 +00:00
}
} catch (error) {
2024-06-03 04:59:59 +00:00
logger.error(`Error en /agregarDocumento: ${error.message}`);
2024-05-25 05:38:51 +00:00
res.status(500).json({ error: error.message });
2024-06-03 04:59:59 +00:00
logger.error(error);
2024-05-25 05:38:51 +00:00
}
});
app.use((err, req, res, next) => {
2024-06-03 04:59:59 +00:00
logger.error(err.stack);
2024-05-25 05:38:51 +00:00
res.status(500).send('Something broke!');
});
app.listen(port, () => {
2024-06-03 14:13:02 +00:00
console.info(`App listening at http://localhost:${port}`);
2024-05-25 05:38:51 +00:00
});
2024-05-26 19:06:55 +00:00
app.post("/traerTodosDatosAlumno", async (req, res) => {
try {
const usuario = req.body;
const datos = await DAO.traeTodosLosDatosUsuario(usuario.id);
res.json(datos);
} catch (error) {
2024-06-03 04:59:59 +00:00
logger.error(`Error en /traerTodosDatosAlumno: ${error.message}`);
2024-05-26 19:06:55 +00:00
res.status(500).json({ error: error.message });
}
});
2024-06-03 04:59:59 +00:00
app.post("/iscribirAlumno", async (req, res) => {
try {
const usuario = req.body;
2024-06-03 14:13:02 +00:00
const datos = await DAO.inscribirUsuario(usuario);
2024-06-03 04:59:59 +00:00
if (datos) {
res.json({ message: true });
} else {
res.json({ message: false });
}
} catch (error) {
logger.error(`Error en /iscribirAlumno: ${error.message}`);
res.status(500).json({ error: error.message, message: false });
}
});
app.post("/regresarAlumno", async (req, res) => {
try {
const data = req.body;
const cambiar = await DAO.editarAlumnoRechazado(data, 0);
if (cambiar) {
res.json({ message: true });
} else {
res.json({ message: false });
}
} catch (error) {
logger.error(`Error en /regresarAlumno: ${error.message}`);
res.status(500).json({ error: error.message, message: false });
}
});
app.post('/email', EmailCtrl.sendEmail);
2024-06-11 03:55:47 +00:00
import swaggerAutogen from 'swagger-autogen';
const doc = {
info: {
title: "API Facultad",
description: "Esta es la API de la facultad Filadelfia"
},
host: "localhost:3000"
};
const outputFile = "./swagger-output.json";
const routes = ["./server.js"];
swaggerAutogen()(outputFile, routes, doc);