Skip to content
This repository has been archived by the owner on Aug 24, 2022. It is now read-only.

Desafio sobre os conceitos do Nodejs - Rockseat / Ignite / Nodejs

Notifications You must be signed in to change notification settings

I-will-miss-you/ignite-desafio-conceitos-do-nodejs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Desafio 01 - Conceitos do Node.js

Ignite

Este desafio faz parte da lista de desafios que compõem o curso de NodeJS.

Visite à Rockseat para saber mais sobre o curso.

GitHub top language Made by Eduardo Queirós License Stargazers

Sobre o desafio   |    Instalação e Execução do Projeto   |    Template da aplicação   |    Rotas da aplicação   |    Específicação dos testes   |    Licença

🚀 Sobre o desafio

Nesse desafio, foi criada uma aplicação backend para treinar o que foi visto até agora no Node.js!

É uma aplicação para gerenciar tarefas (em inglês todos).  Será permitida a criação de um user com name e username,bem como fazer o CRUD de todos:

  • Criar um novo todo;
  • Listar todos os todos;
  • Alterar o title e deadline de um todo existente;
  • Marcar um todo como feito;
  • Excluir um todo;

Tudo isso para cada user em específico (o username será passado pelo header).

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

  • Clone o repositório
https://github.com/code36u4r60/ignite-desafio-conceitos-do-nodejs.git

ou

git@github.com:code36u4r60/ignite-desafio-conceitos-do-nodejs.git
  • Entrar na pasta do projeto
cd ignite-desafio-conceitos-do-nodejs
  • Instale as dependências com o Yarn
yarn
  • Executar o projeto
yarn dev
  • Para correr os testes
yarn test

Deve aparecer uma mensagem parecida com esta:

$ jest
 PASS  src/__tests__/todos.spec.js
 PASS  src/__tests__/users.spec.js

Test Suites: 2 passed, 2 total
Tests:       10 passed, 10 total
Snapshots:   0 total
Time:        1.361 s
Ran all test suites.
Done in 2.47s.

Template da aplicação

Foi utilizado um modelo de template que possui o esqueleto do projeto.

O template pode ser encontrado na seguinte url: Acessar Template

Dica: Caso não saiba utilizar repositórios do Github como template, utilize o guia em nosso FAQ.

Agora navegue até a pasta criada e abra no Visual Studio Code, lembre-se de executar o comando yarn no seu terminal para instalar todas as dependências, e você terá algo parecido com isso:

Rotas da aplicação (Instruções)

Documentação no Notion sobre as rotas e testes: Documentação API e Testes

Com o template já clonado e o arquivo index.js aberto, você deve completar onde não possui código com o código para atingir os objetivos de cada teste.

POST /users

A rota deve receber name, e username dentro do corpo da requisição. Ao cadastrar um novo user, ele deve ser armazenado dentro de um objeto no seguinte formato:

{ 
	id: 'uuid', // precisa ser um uuid
	name: 'Danilo Vieira', 
	username: 'danilo', 
	todos: []
}

Certifique-se que o ID seja um UUID, e de sempre iniciar a lista todos como um array vazio.

GET /todos

A rota deve receber, pelo header da requisição, uma propriedade username contendo o username do user e retornar uma lista com todas as tarefas desse user.

POST /todos

A rota deve receber title e deadline dentro do corpo da requisição e, uma propriedade username contendo o username do user dentro do header da requisição. Ao criar um novo todo, ele deve ser armazenada dentro da lista todos do user que está criando essa tarefa. Cada tarefa deverá estar no seguinte formato: . Certifique-se que o ID seja um UUID.

{ 
	id: 'uuid', // precisa ser um uuid
	title: 'Nome da tarefa',
	done: false, 
	deadline: '2021-02-27T00:00:00.000Z', 
	created_at: '2021-02-22T00:00:00.000Z'
}

Observação: Lembre-se de iniciar a propriedade done sempre como false ao criar um todo.

Dica: Ao fazer a requisição com o Insomnia ou Postman, preencha a data de deadline com o formato ANO-MÊS-DIA e ao salvar a tarefa pela rota, faça da seguinte forma:

{ 
	id: 'uuid', // precisa ser um uuid
	title: 'Nome da tarefa',
	done: false, 
	deadline: new Date(deadline), 
	created_at: new Date()
}

Usar new Date(deadline) irá realizar a transformação da string "ANO-MÊS-DIA" (por exemplo "2021-02-25") para uma data válida do JavaScript.

PUT /todos/:id

A rota deve receber, pelo header da requisição, uma propriedade username contendo o username do user e receber as propriedades title e deadline dentro do corpo. É preciso alterar apenas o title e o deadline da tarefa que possua o id igual ao id presente nos parâmetros da rota.

PATCH /todos/:id/done

A rota deve receber, pelo header da requisição, uma propriedade username contendo o username do user e alterar a propriedade done para true no todo que possuir um id igual ao id presente nos parâmetros da rota.

DELETE /todos/:id

A rota deve receber, pelo header da requisição, uma propriedade username contendo o username do user e excluir o todo que possuir um id igual ao id presente nos parâmetros da rota.

Especificação dos testes (Instruções)

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

Caso você tenha dúvidas quanto ao que são os testes, e como interpretá-los, dê uma olhada em nosso FAQ

Para esse desafio, temos os seguintes testes:

Testes de users

  • Should be able to create a new user

Para que esse teste passe, você deve permitir que um user seja criado e retorne um json com o user criado. Você pode ver o formato de um user aqui.

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

  • Should not be able to create a new user when username already exists

Para que esse teste passe, antes de criar um user você deve validar se outro user com o mesmo username já existe. Caso exista, retorne uma resposta com status 400 e um json no seguinte formato:

{
	error: 'Mensagem do erro'
}

A mensagem pode ser de sua escolha, desde que a propriedade seja error.

Testes de todos

Middleware

Para completar todos os testes referentes à todos é necessário antes ter completado o código que falta no middleware checkExistsUserAccount. Para isso, você deve pegar o username do user no header da requisição, verificar se esse user existe e então colocar esse user dentro da request antes de chamar a função next. Caso o user não seja encontrado, você deve retornar uma resposta contendo status 404 e um json no seguinte formato:

{
	error: 'Mensagem do erro'
}

Observação: O username deve ser enviado pelo header em uma propriedade chamada username:

  • Should be able to list all user's todos

Para que esse teste passe, na rota GET /todos é necessário pegar o user que foi repassado para o request no middleware checkExistsUserAccount e então retornar a lista todos que está no objeto do user conforme foi criado para satisfazer o primeiro teste.

  • Should be able to create a new todo

Para que esse teste passe, na rota POST /todos é necessário pegar o user que foi repassado para o request no middleware checkExistsUserAccount, pegar também o title e o deadline do corpo da requisição e adicionar um novo todo na lista todos que está no objeto do user.

Lembre-se de seguir a estrutura padrão de um todo como mostrado aqui.

  • Should be able to update a todo

Para que esse teste passe, na rota PUT /todos/:id é necessário atualizar um todo existente, recebendo o title e o deadline pelo corpo da requisição e o id presente nos parâmetros da rota.

  • Should not be able to update a non existing todo

Para que esse teste passe, você não deve permitir a atualização de um todo que não existe e retornar uma resposta contendo um status 404 e um json no seguinte formato:

{
	error: 'Mensagem do erro'
}
  • Should be able to mark a todo as done

Para que esse teste passe, na rota PATCH /todos/:id/done você deve mudar a propriedade donede um todo de false para true, recebendo o id presente nos parâmetros da rota.

  • Should not be able to mark a non existing todo as done

Para que esse teste passe, você não deve permitir a mudança da propriedade done de um todo que não existe e retornar uma resposta contendo um status 404 e um json no seguinte formato:

{
	error: 'Mensagem do erro'
}
  • Should be able to delete a todo

Para que esse teste passe, DELETE /todos/:id você deve permitir que um todo seja excluído usando o id passado na rota. O retorno deve ser apenas um status 204 que representa uma resposta sem conteúdo.

  • Should not be able to delete a non existing todo

Para que esse teste passe, você não deve permitir excluir um todo que não exista e retornar uma resposta contendo um status 404 e um json no seguinte formato:

{
	error: 'Mensagem do erro'
}

📝 Licença

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


Created with 💜 by Eduardo Queirós 👋

About

Desafio sobre os conceitos do Nodejs - Rockseat / Ignite / Nodejs

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published