Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/waldohidalgo/desafio_5_modulo_7
Repositorio con el código solución del desafío 5 del módulo 7 Acceso a datos en aplicaciones Node
https://github.com/waldohidalgo/desafio_5_modulo_7
desafio desafiolatam express likeme-desafio pg
Last synced: 25 days ago
JSON representation
Repositorio con el código solución del desafío 5 del módulo 7 Acceso a datos en aplicaciones Node
- Host: GitHub
- URL: https://github.com/waldohidalgo/desafio_5_modulo_7
- Owner: waldohidalgo
- Created: 2024-04-12T19:05:25.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2024-04-12T19:48:16.000Z (8 months ago)
- Last Synced: 2024-04-13T03:03:01.445Z (8 months ago)
- Topics: desafio, desafiolatam, express, likeme-desafio, pg
- Language: JavaScript
- Homepage:
- Size: 436 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Resolución Desafío - Like Me
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.
## Tabla de Contenidos
- [Resolución Desafío - Like Me](#resolución-desafío---like-me)
- [Tabla de Contenidos](#tabla-de-contenidos)
- [Requisitos](#requisitos)
- [Soluciones](#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)](#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)
- [1.1 Estado Inicial](#11-estado-inicial)
- [1.2 Creación exitosa de nuevo post Front End](#12-creación-exitosa-de-nuevo-post-front-end)
- [1.3 Creación exitosa de nuevo post Back End](#13-creación-exitosa-de-nuevo-post-back-end)
- [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)](#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)
- [2.1. Adición Exitosa de Like Front End](#21-adición-exitosa-de-like-front-end)
- [2.2. Adición Exitosa de Like Back End](#22-adición-exitosa-de-like-back-end)
- [2.3 Agregación de Múltiples Likes](#23-agregación-de-múltiples-likes)
- [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)](#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)
- [3.1 Ruta API](#31-ruta-api)## Requisitos
![Requisitos Hoja 1 y 2](./screenshots/requisitos_1_2.webp)
![Requisitos Hoja 3 y 4](./screenshots/requisitos_3_4.webp)## 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)
He creado la siguiente ruta que cumple lo solicitado:
```js
router.post("/post", addPost);
```La cual hace uso de la siguiente función asíncrona **addPost**:
```js
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**:
```js
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);
}
}
```#### 1.1 Estado Inicial
![Estado Inicial](./screenshots/estado_inicial.png)
#### 1.2 Creación exitosa de nuevo post Front End
![Creación exitosa de nuevo post Front End](./screenshots/creacion_exitosa_front.png)
#### 1.3 Creación exitosa de nuevo post Back End
![Creación exitosa de nuevo post Back End](./screenshots/creacion_exitosa_back.jpg)
### 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:
```js
router.put("/post", editPostLike);
```Dicha ruta hace uso de la siguiente función **editPostLike**:
```js
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:
```js
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);
}
}
```#### 2.1. Adición Exitosa de Like Front End
![Adición Exitosa de Like Front End](./screenshots/adicion_exitosa_like_front.webp)
#### 2.2. Adición Exitosa de Like Back End
![Adición Exitosa de Like Back End](./screenshots/adicion_exitosa_like_back.jpg)
#### 2.3 Agregación de Múltiples Likes
![Agregación de Múltiples Likes](./screenshots/adicion_multiples_likes.webp)
### 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:
```js
router.get("/posts", getPosts);
```La cual hace uso de la siguiente función **getPosts**:
```js
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**:
```js
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);
}
}
```#### 3.1 Ruta API
![Ruta API](./screenshots/api.png)