-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
158 lines (147 loc) · 6.45 KB
/
index.js
File metadata and controls
158 lines (147 loc) · 6.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
// Creamos la clase FakeStoreApi con la URL del sitio por defecto
class FakeStoreApi {
constructor(baseURL = "https://fakestoreapi.com") {
this.baseURL = baseURL;
}
// Método para obtener la lista de productos
async obtenerProductos() {
console.log("Obteniendo lista de productos...");
// Hacemos la petición a la API para obtener los productos
try {
const res = await fetch(`${this.baseURL}/products`);
// Verificamos si la respuesta es correcta
if (!res.ok) {
throw new Error(`Error al obtener productos - ${res.status} ${res.statusText}`);
}
// Convertimos la respuesta a formato JSON
const data = await res.json();
// Iteramos sobre cada producto para mostrarlo por consola
data.forEach(producto => {
const { id, title, price, description, category, image, rating } = producto;
console.log("------------------------");
console.log("ID: ", id);
console.log("Title: ", title);
console.log("Price: ", price);
console.log("Description: ", description);
console.log("Category: ", category);
console.log("Image: ", image);
console.log("Rating: ", rating);
console.log("------------------------");
});
} catch (error) {
console.error(`Se ha producido un error al obtener productos - ${error}`);
}
}
// Método para obtener un producto por su ID
async obtenerProductoPorId(id) {
console.log(`Obteniendo producto con ID ${id}...`);
try {
const res = await fetch(`${this.baseURL}/products/${id}`);
//console.log(`${this.baseURL}products/${id}`);
if (!res.ok) {
throw new Error(`Error al obtener producto con ID ${id} - ${res.status} ${res.statusText}`);
}
const data = await res.json();
console.log("ID: ", data.id);
console.log("Title: ", data.title);
console.log("Price: ", data.price);
console.log("Description: ", data.description);
console.log("Category: ", data.category);
console.log("Image: ", data.image);
console.log("Rating: ", data.rating);
console.log("------------------------");
} catch (error) {
console.error(`Se ha producido un error al obtener producto con ID ${id} - ${error}`);
}
}
// Método para agregar un nuevo producto
async agregarProducto(title, price, category) {
console.log("Agregando nuevo producto...");
const nuevoProducto = { title: title, price: price, category: category };
try {
const res = await fetch(`${this.baseURL}/products`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(nuevoProducto)
});
if (!res.ok) {
throw new Error(`Error al agregar producto - ${res.status} ${res.statusText}`);
}
const data = await res.json();
console.log(`Producto con el ID ${data.id} agregado con éxito:`);
console.log(data);
} catch (error) {
console.error(`Se ha producido un error al agregar producto - ${error}`);
}
}
// Método para borrar un producto por su ID
async borrarProductoPorId(id) {
console.log(`Borrando producto con ID ${id}...`);
try {
const res = await fetch(`${this.baseURL}/products/${id}`, {
method: "DELETE"
});
if (!res.ok) {
throw new Error(`Error al borrar producto con ID ${id} - ${res.status} ${res.statusText}`);
}
const data = await res.json();
console.log(`Producto con ID ${id} borrado con éxito:`);
console.log(data);
} catch (error) {
console.error(`Se ha producido un error al borrar producto con ID ${id} - ${error}`);
}
}
}
// Mensaje de error rehutilizable
const mensajeError = `Error. Por favor, use GET, POST o DELETE seguido de los parámetros necesarios. Ej.\n
npm run start GET products\n
npm run start GET products/{id}\n
npm run start POST products T-Shirt-Rex 300 "remeras"\n
npm run start DELETE products/{id}`;
// Guardamos los argumentos de la línea de comandos, ignorando los dos primeros (ruta de Node.js y ruta del script)
const args = process.argv.slice(2);
// Verificamos que se haya proporcionado al menos un argumento (el método a ejecutar)
if (args.length === 0) {
console.log(mensajeError);
process.exit(1); // Salimos del programa con un código de error
}
const metodo = args[0].toUpperCase(); // El primer argumento es el método a ejecutar, normalizamos a mayúscula
const api = new FakeStoreApi(); // Creamos una instancia de la clase FakeStoreApi
//console.log(args);
// Utilizamos switch para determinar qué método ejecutar según el argumento proporcionado
switch (metodo) {
case "GET":
// GET puede ser === products o === products/{id} si no se proporciona un segundo argumento mostramos el mensaje de error
if (args[1] === undefined) {
console.log(mensajeError);
} else if (args[1] === "products") {
api.obtenerProductos();
} else if (args[1].startsWith("products/")) {
const id = args[1].split("/")[1]; // Extraemos el ID del producto
api.obtenerProductoPorId(id);
}
break;
case "DELETE":
// DELETE solo puede ser === products/{id} si no se proporciona un segundo argumento mostramos el mensaje de error
if (args[1] === undefined) {
console.log(mensajeError);
} else if (args[1].startsWith("products/")) {
const id = args[1].split("/")[1]; // Extraemos el ID del producto
api.borrarProductoPorId(id);
}
break;
case "POST":
// POST solo puede ser === products seguido de los parámetros title, price y category
if (args.length !== 5 || args[1] !== "products") {
console.log(mensajeError);
}else{
const title = args[2];
const price = Number(args[3]);
const category = args[4];
api.agregarProducto(title, price, category);
}
break;
default:
console.log(mensajeError);
break;
}