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}`); });