index.js:
----------------------------------------------------
const express = require('express');
const swaggerUi = require('swagger-ui-express');
const YAML = require('yamljs');
const openApiValidator = require('express-openapi-validator');
const req = require('express/lib/request');
const app = express();
const port = 3000;
const swaggerDocument = YAML.load('./openapi.yaml');
app.use('/docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
app.use(express.json());
app.use(
openApiValidator.middleware({
apiSpec: swaggerDocument,
validateRequests: true, // (default)
validateResponses: true, // optional, default is false
ignorePaths: /.*\/docs.*/, // ignore the docs path
})
);
app.use((err, req, res, next) => {
res.status(err.status || 500).json({
message: err.message,
errors: err.errors,
});
});
app.get('/hello', (req, res) => {
res.json({message: 'Hello World!'});
});
app.get('/pathraiz', (req, res) => {
res.json({message: 'path, ejemplo curso ApiFirst - Platzi!!!'});
});
let users = [
{id: 1, name:'Juan perez', age:28, email:'juan@example.com' },
{id: 5, name:'Jhon perez', age:65, email:'jhon@example.com'},
{id: 9, name:'Jux perez', age:38, email:'jux@example.com'}];
//let nextId = 1;
// Crear un nuevo usuario
app.post('/users', (req, res) => {
const { name, age, email } = req.body;
if (
typeof name !== 'string' || name.length < 2 ||
typeof age !== 'number' || age < 18 ||
typeof email !== 'string' || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)
) {
return res.status(400).json({ message: 'Datos inválidos' });
}
const user = { id: nextId++, name, age, email };
users.push(user);
res.status(201).json(user);
});
// Obtener un usuario por ID
app.get('/users/:id', (req, res) => {
const id = parseInt(req.params.id);
const user = users.find(u => u.id === id);
if (!user) {
return res.status(404).json({ message: 'User not found' });
}
res.json({ id: user.id, name: user.name });
});
// Actualizar un usuario por ID
app.put('/usersp/:id', (req, res) => {
const id = parseInt(req.params.id);
const user = users.find(u => u.id === id);
if (!user) {
return res.status(404).json({ message: 'User not found' });
}
const { name, age, email } = req.body;
if (
(name && (typeof name !== 'string' || name.length < 2)) ||
(age && (typeof age !== 'number' || age < 18)) ||
(email && (typeof email !== 'string' || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)))
) {
return res.status(400).json({ message: 'Datos inválidos' });
}
if (name) user.name = name;
if (age) user.age = age;
if (email) user.email = email;
res.json(user);
});
// Eliminar un usuario por ID
app.delete('/usersd/:id', (req, res) => {
const id = parseInt(req.params.id);
const index = users.findIndex(u => u.id === id);
if (index === -1) {
return res.status(404).json({ message: 'User not found' });
}
users.splice(index, 1);
res.json({ message: 'User deleted successfully' });
});
// Iniciar el servidor
app.listen(port, () => {
console.log(Server running at http://localhost:${port}/);
});