Code Monkey home page Code Monkey logo

chapter1_challenge1_ignite's Introduction

Ignite

Desafio 1: Conceitos do Node.js

“Para quem fica melhor a cada dia, ficar pronto é utopia”!

Made by Rocketseat

Sobre o desafio   |    Rodar o projeto   |    Especificação dos testes   |    Rodar os testes   |    Entrega   |    Licença

🚀 Sobre o desafio

Nesse desafio, você deverá criar uma aplicação para treinar o que aprendeu até agora no Node.js!

Essa será uma aplicação para gerenciar tarefas (em inglês todos). Será permitida a criação de um usuário 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 usuário em específico (o username será passado pelo header). A seguir veremos com mais detalhes o que e como precisa ser feito 🚀

Rotas da aplicação

POST /users

A rota deve receber name, e username dentro do corpo da requisição. Ao cadastrar um novo usuário, 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.

POST /users

A rota deve receber name, e username dentro do corpo da requisição. Ao cadastrar um novo usuário, 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.

POST /todos

A rota deve receber title e deadline dentro do corpo da requisição e, uma propriedade username contendo o username do usuário dentro do header da requisição. Ao criar um novo todo, ele deve ser armazenada dentro da lista todos do usuário 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 usuário 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 usuário 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 usuário e excluir o todo que possuir um id igual ao id presente nos parâmetros da rota.

Rodar o Projeto

yarn install

yarn dev

Especificação dos testes

  • Should be able to create a new user

Para que esse teste passe, você deve permitir que um usuário seja criado e retorne um json com o usuário criado. Você pode ver o formato de um usuário 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 usuário você deve validar se outro usuário 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.

  • Should be able to list all user's todos

Para que esse teste passe, na rota GET /todos é necessário pegar o usuário que foi repassado para o request no middleware checkExistsUserAccount e então retornar a lista todos que está no objeto do usuário 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 usuário 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 usuário.

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'
}

Rodar os testes

yarn install

yarn test

📅 Entrega

Esse desafio deve ser entregue a partir da plataforma da Rocketseat. Envie o link do repositório que você fez suas alterações. Após concluir o desafio, além de ter mandado o código para o GitHub, fazer um post no Linkedin é uma boa forma de demonstrar seus conhecimentos e esforços para evoluir na sua carreira para oportunidades futuras.

chapter1_challenge1_ignite's People

Contributors

leonardosmendes avatar leoincode avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.