Best GitHub parte 3

erikgiovani

Erik Giovani

Posted on May 3, 2023

Best GitHub parte 3

Hola de nuevo 馃憢, en este post vamos a crear el backend en Next JS.

Vamos a empezar accediendo a la carpeta api que se encuentra dentro de la carpeta pages que se encuentra dentro de la carpeta src.

Una vez ah铆, nos encontraremos con un archivo hello.ts, lo que haremos ser谩 renombrarlo a places.ts y hacer que quede de esta forma:

import type { NextApiRequest, NextApiResponse } from "next";

export default async function handler(req: NextApiRequest,res: NextApiResponse ) {

}
Enter fullscreen mode Exit fullscreen mode

Ahora en la carpeta src vamos a proceder a crear una carpeta llamada utils, que es la que va a contener todas las utilidades que vamos a utilizar en el frontend como en el backend.

Dentro de la carpeta utils vamos a crear un archivo messages.ts, que va a tener los mensajes de respuesta que se van a usar en m谩s de un lugar, as铆 evitaremos reescribir c贸digo.

Dentro del archivo messages.ts vamos a agregar el siguiente c贸digo:

const messages = {
  error: { message: "There was an error, please try again later" },
  notFound: { message: "Not found" },
};

export default messages;
Enter fullscreen mode Exit fullscreen mode

La constante messages almacena un objeto con dos objetos, el primero lo vamos a utilizar como un mensaje de error general y el segundo como un mensaje de error cuando traten de acceder a alguno de nuestros endpoints con un m茅todo distinto al que establezcamos.

Una vez aclarado, accederemos a nuesto archivo places.ts y dentro de la funci贸n handler agregaremos el siguiente c贸digo:

if (req.method !== "GET") {
  return res.status(404).json(messages.notFound);
}
Enter fullscreen mode Exit fullscreen mode

El if sirve para que si alguien trata de acceder a la ruta /api/places con un m茅todo distinto al m茅todo GET le responda al usuario con un c贸digo de estado 404 y el mensaje { message: "Not found" } en formato JSON.

As铆 que nuestro archivo places.ts se tendr铆a que ver de esta forma:

import type { NextApiRequest, NextApiResponse } from "next";

import messages from "@/utils/messages";

export default async function handler(req: NextApiRequest,res: NextApiResponse) {
  if (req.method !== "GET") {
    return res.status(404).json(messages.notFound);
  }
}
Enter fullscreen mode Exit fullscreen mode

Ahora crearemos en la carpeta utils un archivo usersCall.ts, que usaremos para traer con prisma todos los usuarios que tenemos agregados en nuestra base de datos de MongoDB Atlas.

Una vez creado agregaremos el siguiente c贸digo:

import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

const usersCall = async () => {
  const users = await prisma.user.findMany();
  const usersOrdered = users.sort((a, b) => b.total - a.total);
  return usersOrdered;
};

export default usersCall;
Enter fullscreen mode Exit fullscreen mode

En la constante users estoy guardando todos los usuarios que he mandado a llamar con prisma con la funci贸n findMany, y en la constante usersOrdered estoy guardando todos los usuarios ordenados por el total de mayor a menor con el m茅todo sort de JavaScript.

Ahora en nuestro archivo places.ts despu茅s del if agregaremos el siguiente c贸digo:

try {
    const users = await usersCall();

    if (users.length === 0) {
      return res.status(400).json(messages.error);
    }

    res.status(200).json(users);
} catch (error) {
    res.status(400).json(messages.error);
}
Enter fullscreen mode Exit fullscreen mode

En la constante users estoy guardando los usuarios ordenados de mayor a menor por el total desde la funci贸n usersCall, en el if estoy comprobando que si los usuarios son cero, me retorne un c贸digo de estado 400 y un mensaje { message: "There was an error, please try again later" } en formato JSON.

Y si no, me retorne un c贸digo de estado 200, y todos los usuarios ordenados de mayor a menor en formato JSON, pero si todo eso falla, ya sea porque la base de datos se encuentre ca铆da o alguna causa no provista, me retorne con un catch la respuesta de c贸digo de estado 400 y el mensaje { message: "There was an error, please try again later" } en formato JSON.

As铆 que tu archivo places.ts tendr铆a que verse de esta forma:

import type { NextApiRequest, NextApiResponse } from "next";

import messages from "@/utils/messages";
import usersCall from "@/utils/usersCall";

export default async function handler(req: NextApiRequest,res: NextApiResponse) {
  if (req.method !== "GET") {
    return res.status(404).json(messages.notFound);
  }

  try {
    const users = await usersCall();

    if (users.length === 0) {
      return res.status(400).json(messages.error);
    }

    res.status(200).json(users);
  } catch (error) {
    res.status(400).json(messages.error);
  }
}
Enter fullscreen mode Exit fullscreen mode

Eso es todo por este post, en el siguiente post crearemos una ruta m谩s para poder cambiar los lugares consultando el api p煤blica de GitHub.

馃挅 馃挭 馃檯 馃毄
erikgiovani
Erik Giovani

Posted on May 3, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Best GitHub parte 4
githubhack23 Best GitHub parte 4

May 15, 2023

Best GitHub parte 3
githubhack23 Best GitHub parte 3

May 3, 2023

Best GitHub parte 2
githubhack23 Best GitHub parte 2

April 30, 2023

Best GitHub
githubhack23 Best GitHub

April 27, 2023