Skip to content

volneineves/ignite-node-desafio-03

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ignite Nodejs: Chapter I

Logo do Markdown

Desafio 03: Corrigindo o código

💻 Sobre o desafio

Nesse desafio, temos uma aplicação Node.js que está em processo de desenvolvimento mas que já possui os testes necessários para fazer toda a validação dos requisitos.

Essa aplicação realiza o CRUD (Create, Read, Update, Delete) de repositórios de projetos. Além disso, é possível dar likes em repositórios cadastrados, aumentando a quantidade de likes em 1 a cada vez que a rota é chamada.

A estrutura de um repositório ao ser criado é a seguinte:

{
  id: uuid(),
  title,
  url,
  techs,
  likes: 0
}

Descrição de cada propriedade:

  • id deve ser um uuid válido;
  • title é o título do repositório (por exemplo "unform");
  • url é a URL que aponta para o repositório (por exemplo "https://github.com/unform/unform");
  • techs é um array onde cada elemento deve ser uma string com o nome de uma tecnologia relacionada ao repositório (por exemplo: ["react", "react-native", "form"]);
  • likes é a quantidade de likes que o repositório recebeu (e que vai ser incrementada de 1 em 1 a cada chamada na rota de likes).

Note que a quantidade de likes deve sempre ser zero no momento de criação.

⌨️ Instalação e Execução do Projeto

  • Respositório do projeto
> git clone https://github.com/volneineves/ignite-node-desafio-03
  • Navegue até o diretório principal do projeto
> cd ignite-node-desafio-03
  • Instale as dependências com o Yarn
yarn install
  • Execute os testes
yarn test
  • Execute o projeto
yarn dev

Template da aplicação

  • Template fornecido pela RocketSeat
> git clone https://github.com/rocketseat-education/ignite-template-corrigindo-o-codigo

Rotas da aplicação

GET /repositories

A rota deve retornar uma lista contendo todos os repositórios cadastrados.

POST /repositories

A rota deve receber title, url e techs pelo corpo da requisição e retornar um objeto com as informações do repositório criado e um status 201.

PUT /repositories/:id

A rota deve receber title, url e techs pelo corpo da requisição e o id do repositório que deve ser atualizado pelo parâmetro da rota. Deve alterar apenas as informações recebidas pelo corpo da requisição e retornar esse repositório atualizado.

DELETE /repositories/:id

A rota deve receber, pelo parâmetro da rota, o id do repositório que deve ser excluído e retornar um status 204 após a exclusão.

POST /repositories/:id/like

A rota deve receber, pelo parâmetro da rota, o id do repositório que deve receber o like e retornar o repositório com a quantidade de likes atualizada.

Especificação dos testes

Em cada teste, tem uma breve descrição no que sua aplicação deve cumprir para que o teste passe.

Para esse desafio, temos os seguintes testes:

Testes de repositórios

  • Should be able to create a new repository

Para que esse teste passe, você deve permitir que um novo repositório seja cadastrado pela rota POST /repositories. Caso precise confirmar o formato do objeto, você pode olhar aqui.

Também é necessário que você retorne a resposta com o código 201.

  • Should be able to list the projects

Para que esse teste passe, é necessário que você conclua o teste anterior. Se tudo ocorreu bem, os repositórios cadastrados deverão aparecerem na listagem da rota GET /repositories e esse teste irá passar.

  • Should be able to update repository

Para que esse teste passe, você deve permitir que um repositório seja atualizado a partir de seu id pela rota PUT /repositories/:id usando as informações recebidas pelo corpo da requisição. Lembre-se de manter as informações que não foram passadas pelo corpo, por exemplo: Se o usuário quiser trocar apenas o title, mantenha url e techs que já estavam no repositório.

  • Should not be able to update a non existing repository

Para que esse teste passe, você deve verificar se o repositório existe antes de atualizar as informações na rota PUT /repositories/:id. Caso não exista, retorne um status 404 (que é o status para Not Found) com uma mensagem de erro no formato { error: "Mensagem do erro" }.

  • Should not be able to update repository likes manually

Para que esse teste passe, você deve impedir que a quantidade de likes de um repositório seja alterada manualmente através da rota PUT /repositories/:id. Por exemplo:

Errado:

// Repositório recém criado:
{
	id: "c160a99b-9d3b-4669-8a35-8dce1e8196ec",
	title: "Umbriel",
	techs: ["React", "ReactNative", "TypeScript", "ContextApi"],
	url: "https://github.com/Rocketseat/umbriel",
	likes: 0
}

// Requisição para alterar informações:
// Rota: "/repositories/c160a99b-9d3b-4669-8a35-8dce1e8196ec"
// Método: PUT
// Corpo: { title: "Novo título", likes: 10 }

// Retorno:

{
	id: "c160a99b-9d3b-4669-8a35-8dce1e8196ec",
	title: "Novo título",
	techs: ["React", "ReactNative", "TypeScript", "ContextApi"],
	url: "https://github.com/Rocketseat/umbriel",
	likes: 10
}

Certo:

// Repositório recém criado:
{
	id: "c160a99b-9d3b-4669-8a35-8dce1e8196ec",
	title: "Umbriel",
	techs: ["React", "ReactNative", "TypeScript", "ContextApi"],
	url: "https://github.com/Rocketseat/umbriel",
	likes: 0
}

// Requisição para alterar informações:
// Rota: "/repositories/c160a99b-9d3b-4669-8a35-8dce1e8196ec"
// Método: PUT
// Corpo: { title: "Novo título", likes: 10 }

// Retorno:

{
	id: "c160a99b-9d3b-4669-8a35-8dce1e8196ec",
	title: "Novo título",
	techs: ["React", "ReactNative", "TypeScript", "ContextApi"],
	url: "https://github.com/Rocketseat/umbriel",
	likes: 0 // A quantidade de likes não mudou
}
  • Should be able to delete the repository

Para que esse teste passe, você deve permitir que um repositório seja excluído através do id passado pela rota DELETE /repositories/:id.

  • Should not be able to delete a non existing repository

Para que esse teste passe, você deve validar se o repositório existe antes de excluí-lo. Caso o repositório não exista, retorne um status 404 com uma mensagem de erro no formato { error: "Mensagem do erro" }.

Testes de likes

  • Should be able to give a like to the repository

Para que esse teste passe, deve ser possível incrementar a quantidade de likes em 1 a cada chamada na rota POST /repositories/:id/like. Use o id passado por parâmetro na rota para realizar essa ação.

  • Should not be able to give a like to a non existing repository

Para que esse teste passe, você deve validar que um repositório existe antes de incrementar a quantidade de likes. Caso não exista, retorne um status 404 com uma mensagem de erro no formato { error: "Mensagem do erro" }.

📝 Licença

Esse projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.


Feito por Volnei Neves 👋

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages