Skip to content

Repositorio con el código solución del desafío 5 del módulo 7 Acceso a datos en aplicaciones Node

Notifications You must be signed in to change notification settings

waldohidalgo/desafio_5_modulo_7

Repository files navigation

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

Requisitos

Requisitos Hoja 1 y 2 Requisitos Hoja 3 y 4

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:

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

1.1 Estado Inicial

Estado Inicial

1.2 Creación exitosa de nuevo post Front End

Creación exitosa de nuevo post Front End

1.3 Creación exitosa de nuevo post Back End

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)

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

2.1. Adición Exitosa de Like Front End

Adición Exitosa de Like Front End

2.2. Adición Exitosa de Like Back End

Adición Exitosa de Like Back End

2.3 Agregación de Múltiples Likes

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)

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

3.1 Ruta API

Ruta API

About

Repositorio con el código solución del desafío 5 del módulo 7 Acceso a datos en aplicaciones Node

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published