Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

✅ My challenge resolution: nodejs concepts #69

Open
gabrieldejesus opened this issue Oct 30, 2020 · 0 comments
Open

✅ My challenge resolution: nodejs concepts #69

gabrieldejesus opened this issue Oct 30, 2020 · 0 comments

Comments

@gabrieldejesus
Copy link

Spoiler alert

const express = require("express");
const cors = require("cors");
const { v4: uuid, validate: isUuid } = require("uuid");

const app = express();

app.use(express.json());
app.use(cors());

const repositories = [];

function validateRepositorieId(request, response, next) {
  const { id } = request.params;

  if (!isUuid(id)) {
    return response.status(400).json({ error: "Invalid repositorie ID" });
  }

  return next();
}

function validateLikes(request, response, next) {
  const { id } = request.params;

  if (!isUuid(id)) {
    return response.status(400).json({ error: "Invalid repositorie ID" });
  }

  return next();
}

app.use("/repositories/:id", validateRepositorieId);
app.use("/repositories/:id/likes", validateLikes);

// GET: Fetch backend information
app.get("/repositories", (request, response) => {
  return response.json(repositories);
});

// POST: Create information on the backend
app.post("/repositories", (request, response) => {
  const { title, url, techs } = request.body;

  const repositorie = { id: uuid(), title, url, techs, likes: 0 };

  repositories.push(repositorie);

  return response.json(repositorie);
});

// PUT: Change information on the backend
app.put("/repositories/:id", (request, response) => {
  const { id } = request.params;
  const { title, url, techs } = request.body;

  const repositorieIndex = repositories.findIndex(
    (repositorie) => repositorie.id === id
  );

  if (repositorieIndex < 0) {
    return response.status(400).json({ error: "Repositorie not found" }); // setando o erro caso não encontre o repositorie
  }

  const repositorie = {
    id,
    title,
    url,
    techs,
    likes: repositories[repositorieIndex].likes,
  };

  repositories[repositorieIndex] = repositorie;

  return response.json(repositorie);
});

// DELETE: Delete information on the backend
app.delete("/repositories/:id", (request, response) => {
  const { id } = request.params;

  const repositorieIndex = repositories.findIndex(
    (repositorie) => repositorie.id === id
  );

  if (repositorieIndex < 0) {
    return response.status(400).json({ error: "Repositorie not found" });
  }

  repositories.splice(repositorieIndex, 1);

  return response.status(204).send();
});

app.post("/repositories/:id/like", (request, response) => {
  const { id } = request.params;

  const repositorie = repositories.find((repositorie) => repositorie.id === id);

  repositorie.likes += 1;
  return response.json(repositorie);
});

module.exports = app;
@gabrieldejesus gabrieldejesus changed the title My solution to challenge 2 ✅ My challenge resolution: nodejs concepts Oct 30, 2020
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant