Repositorio con el código solución al desafío 5 del módulo 7 llamado Acceso a datos en aplicaciones Node de la beca otorgada por Talento Digital Para Chile Desarrollo de aplicaciones Full Stack Javascript Trainee dictada por Desafío Latam.
- Resolución Desafío - Like Me
- Tabla de Contenidos
- Requisitos
- Soluciones
- 1. Disponibilizar una ruta POST /post que utilice una función asíncrona para emitir una consulta SQL parametrizada y almacenar un nuevo post en la tabla posts. (3 Puntos)
- 2. Disponibilizar una ruta PUT /post que utilice una función asíncrona para emitir una consulta SQL y sume un like a un post identificado por su id. Considera que este dato es enviado como query strings. (3 Puntos)
- 3. Disponibilizar una ruta GET /posts que utilice una función asíncrona para emitir una consulta SQL y devuelva todos los posts de la tabla posts. (4 Puntos)
1. Disponibilizar una ruta POST /post que utilice una función asíncrona para emitir una consulta SQL parametrizada y almacenar un nuevo post en la tabla posts. (3 Puntos)
He creado la siguiente ruta que cumple lo solicitado:
router.post("/post", addPost);
La cual hace uso de la siguiente función asíncrona addPost:
export async function addPost(req, res) {
try {
const { titulo, img, descripcion } = req.body;
const data = [titulo, img, descripcion, 0];
const result = await addPostQuery(data);
res.status(200).send(result);
} catch (error) {
res.status(500).send(error.message);
}
}
La función anterior hace uso de la siguiente función addPostQuery:
export async function addPostQuery(datos) {
try {
const query = {
text: "INSERT INTO posts (titulo,img, descripcion, likes) VALUES ($1, $2, $3, $4) returning *",
values: datos,
};
const { rowCount, rows } = await pool.query(query);
if (rowCount === 0) {
throw new Error("No se pudo crear el post");
}
return rows[0];
} catch (error) {
console.log(error.message);
}
}
2. Disponibilizar una ruta PUT /post que utilice una función asíncrona para emitir una consulta SQL y sume un like a un post identificado por su id. Considera que este dato es enviado como query strings. (3 Puntos)
He creado la siguiente función que cumple lo solicitado:
router.put("/post", editPostLike);
Dicha ruta hace uso de la siguiente función editPostLike:
export async function editPostLike(req, res) {
try {
const { id } = req.query;
const result = await editPostLikeQuery(id);
res.status(200).send(result);
} catch (error) {
res.status(500).send(error.message);
}
}
La cual utiliza la siguiente función para editar el número de likes:
export async function editPostLikeQuery(id) {
try {
const query = {
text: "UPDATE posts SET likes =likes+ 1 WHERE id = $1 returning *",
values: [id],
};
const { rowCount, rows } = await pool.query(query);
if (rowCount === 0) {
throw new Error("No se pudo dar like");
}
return rows[0];
} catch (error) {
console.log(error.message);
}
}
3. Disponibilizar una ruta GET /posts que utilice una función asíncrona para emitir una consulta SQL y devuelva todos los posts de la tabla posts. (4 Puntos)
He creado la siguiente ruta:
router.get("/posts", getPosts);
La cual hace uso de la siguiente función getPosts:
export async function getPosts(req, res) {
try {
const rows = await getPostsQuery();
res.status(200).json(rows);
} catch (error) {
res.status(500).send(error.message);
}
}
La que a su vez hace uso de la siguiente función getPostsQuery:
export async function getPostsQuery() {
try {
const { rowCount, rows } = await pool.query(`SELECT * FROM posts`);
if (rowCount === 0) {
throw new Error("No hay datos");
}
return rows;
} catch (error) {
console.log(error.message);
}
}