OpenApi_MezontleTeam/openApiMT/server.js

159 lines
5.5 KiB
JavaScript

const express = require('express');
const YAML = require('yamljs');
const swaggerUi = require('swagger-ui-express');
const openApiDocument = YAML.load('./openapi.yaml');
const app = express();
app.use(express.json());
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(openApiDocument));
const usuarios = [];
const medicos = [];
const pacientes = [];
const recetas = [];
const historiales = [];
//raiz
app.get('/', (req, res) => {
//endopoint para ir a la interfaz grafica
res.send('Bienvenido a la API de MezontleTeam. Visita /api-docs para ver la documentación interactiva.');
});
//funciones auxiliares para buscar y el manejo de datos
const findById = (array, id) => array.find(item => item.id === id);
const deleteById = (array, id) => {
const index = array.findIndex(item => item.id === id);
if (index !== -1) array.splice(index, 1);
};
//endpoints de suario
app.get('/usuario', (req, res) => res.json(usuarios));
app.post('/usuario', (req, res) => {
const nuevoUsuario = req.body;
nuevoUsuario.idUsuario = usuarios.length + 1;
usuarios.push(nuevoUsuario);
res.status(201).json(nuevoUsuario);
});
app.get('/usuario/:idUsuario', (req, res) => {
const usuario = findById(usuarios, parseInt(req.params.idUsuario));
usuario ? res.json(usuario) : res.status(404).send('Usuario no encontrado');
});
app.put('/usuario/:idUsuario', (req, res) => {
const index = usuarios.findIndex(u => u.idUsuario == req.params.idUsuario);
if (index !== -1) {
usuarios[index] = req.body;
usuarios[index].idUsuario = parseInt(req.params.idUsuario, 10);
res.json(usuarios[index]);
} else res.status(404).send('Usuario no encontrado');
});
app.delete('/usuario/:idUsuario', (req, res) => {
deleteById(usuarios, parseInt(req.params.idUsuario));
res.status(204).send();
});
//endpoints de medico
app.get('/medico', (req, res) => res.json(medicos));
app.post('/medico', (req, res) => {
const nuevoMedico = req.body;
nuevoMedico.medId = medicos.length + 1;
medicos.push(nuevoMedico);
res.status(201).json(nuevoMedico);
});
app.get('/medico/:medId', (req, res) => {
const medico = findById(medicos, parseInt(req.params.medId));
medico ? res.json(medico) : res.status(404).send('Medico no encontrado');
});
app.put('/medico/:medId', (req, res) => {
const index = medicos.findIndex(m => m.medId == req.params.medId);
if (index !== -1) {
medicos[index] = req.body;
medicos[index].medId = parseInt(req.params.medId, 10);
res.json(medicos[index]);
} else res.status(404).send('Medico no encontrado');
});
app.delete('/medico/:medId', (req, res) => {
deleteById(medicos, parseInt(req.params.medId));
res.status(204).send();
});
//endpoints de paciente
app.get('/paciente', (req, res) => res.json(pacientes));
app.post('/paciente', (req, res) => {
const nuevoPaciente = req.body;
nuevoPaciente.idPac = pacientes.length + 1;
pacientes.push(nuevoPaciente);
res.status(201).json(nuevoPaciente);
});
app.get('/paciente/:idPac', (req, res) => {
const paciente = findById(pacientes, parseInt(req.params.idPac));
paciente ? res.json(paciente) : res.status(404).send('Paciente no encontrado');
});
app.put('/paciente/:idPac', (req, res) => {
const index = pacientes.findIndex(p => p.idPac == req.params.idPac);
if (index !== -1) {
pacientes[index] = req.body;
pacientes[index].idPac = parseInt(req.params.idPac, 10);
res.json(pacientes[index]);
} else res.status(404).send('Paciente no encontrado');
});
app.delete('/paciente/:idPac', (req, res) => {
deleteById(pacientes, parseInt(req.params.idPac));
res.status(204).send();
});
//endpoints de receta
app.get('/receta', (req, res) => res.json(recetas));
app.post('/receta', (req, res) => {
const nuevaReceta = req.body;
nuevaReceta.idRec = recetas.length + 1;
recetas.push(nuevaReceta);
res.status(201).json(nuevaReceta);
});
app.get('/receta/:idRec', (req, res) => {
const receta = findById(recetas, parseInt(req.params.idRec));
receta ? res.json(receta) : res.status(404).send('Receta no encontrada');
});
app.put('/receta/:idRec', (req, res) => {
const index = recetas.findIndex(r => r.idRec == req.params.idRec);
if (index !== -1) {
recetas[index] = req.body;
recetas[index].idRec = parseInt(req.params.idRec, 10);
res.json(recetas[index]);
} else res.status(404).send('Receta no encontrada');
});
app.delete('/receta/:idRec', (req, res) => {
deleteById(recetas, parseInt(req.params.idRec));
res.status(204).send();
});
//endpoints de historial
app.get('/historial', (req, res) => res.json(historiales));
app.post('/historial', (req, res) => {
const nuevoHistorial = req.body;
nuevoHistorial.idHistorial = historiales.length + 1;
historiales.push(nuevoHistorial);
res.status(201).json(nuevoHistorial);
});
app.get('/historial/:idHistorial', (req, res) => {
const historial = findById(historiales, parseInt(req.params.idHistorial));
historial ? res.json(historial) : res.status(404).send('Historial no encontrado');
});
app.put('/historial/:idHistorial', (req, res) => {
const index = historiales.findIndex(h => h.idHistorial == req.params.idHistorial);
if (index !== -1) {
historiales[index] = req.body;
historiales[index].idHistorial = parseInt(req.params.idHistorial, 10);
res.json(historiales[index]);
} else res.status(404).send('Historial no encontrado');
});
app.delete('/historial/:idHistorial', (req, res) => {
deleteById(historiales, parseInt(req.params.idHistorial));
res.status(204).send();
});
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
console.log(`Servidor corriendo en http://localhost:${PORT}`);
});