Giter Site home page Giter Site logo

desafio01-conceitos-do-node.js's Introduction

Desafio 1 do Ignite Trilha NodeJS

Ignite

Desafio 01: Conceitos do Node.js

GitHub top language Rocketseat Account License

Sobre o desafio   |    Instalação e Execução do Projeto   |    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 aprendi até agora no Node.js.

É uma aplicação para gerenciar tarefas (em inglês ToDos). 

Nela, será permitida a criação de um usuário com os atributos nameusername e as operações (CRUD: Create, Read, Update e Delete) envolvendo os ToDos

  • Criar um novo ToDo;
  • Listar os ToDos;
  • Alterar o title e deadline de um ToDo existente;
  • Marcar um ToDo como concluído;
  • Excluir um ToDo;

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

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

  • Clone este repositório
> git clone https://github.com/taohansens/Desafio01-Conceitos-do-Node.js.git
  • Navegue até o diretório raiz do projeto
> cd Desafio01-Conceitos-do-Node.js
  • Instale as dependências com o Yarn
yarn
  • Execute o projeto
yarn dev

Rotas da aplicação

GET /users

A rota deve receber password no body da requisição, com o valor "Ignite@", que irá retornar um array com todos os usuários cadastrados e seus respectivos ToDos.

{
    "password": "Ignite@"
}
POST /users

A rota deve receber name e username dentro do body da requisição (JSON). Ao cadastrar um novo usuário, ele deve ser armazenado dentro de um objeto no seguinte formato:

{ 
	"name": "Tao Hansen", 
	"username": "taohansens"
}

A resposta dessa requisição será um objeto do tipo User com resposta HTTP 201 (Created).

{
    "id": "7973135b-1c55-4aab-b540-0483fdbce093", //Gerado pela biblioteca uuid;
    "name": "Tao Hansen",
    "username": "taohansens",
    "todos": [] // Inicializa o vetor vazio dos ToDos.
}
GET /todos

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

A resposta será um vetor com os ToDos do usuário que contém o mesmo username do header.

POST /todos

A rota deve receber title e deadline dentro do body da requisição (JSON) e, uma propriedade username contendo o username do usuário dentro do header da requisição.

Ao criar um novo todo, ele será armazenada dentro da lista todos do usuário que está criando essa tarefa.

{
    "title": "Lavar o banheiro",
    "deadline": "2021-11-08" // A data deverá ser incluída nessa formato. (YYYY-MM-DD)
}

E a resposta do servidor ao enviar a requisição, se for um usuário válido será um objeto do tipo ToDo com resposta HTTP 201 (Created).

{
    "id": "3009c173-772f-41b1-bc58-7259c5ccc671", // Gerado pela biblioteca uuid;
    "title": "Lavar o banheiro",
    "done": false, // Done sempre iniciará como False.
    "deadline": "2021-11-08T00:00:00.000Z",
    "created_at": "2021-11-09T01:50:19.545Z" // Momento da criação do ToDo.
}

Ou, se o username não existir, estendendo também a todas as outras rotas, retornará um json com o código HTTP 404 (Not Found):

{
    "error": "User not found!"
}
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.

Como exemplo, o iddo ToDo acima será enviado na rota /todos/3009c173-772f-41b1-bc58-7259c5ccc671

O username no header, e o Body:

{
    "title": "Tarefa Alterada",
    "deadline": "2022-11-08"
}

Como retorno o objeto alterado com a resposta HTTP 200 (OK).

{
    "id": "3009c173-772f-41b1-bc58-7259c5ccc671",
    "title": "Tarefa Alterada",
    "done": false,
    "deadline": "2022-11-08",
    "created_at": "2021-11-09T01:50:19.545Z"
}

Em caso de não existir o ToDo, isso também para as demais rotas incluídas após essa, será a resposta HTTP 404, e o Json com a mensagem de erro:

{
    "error": "ToDo not found."
}
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.

O retorno será um objeto json com a resposta HTTP 200.

{
    "id": "3009c173-772f-41b1-bc58-7259c5ccc671",
    "title": "Tarefa Alterada",
    "done": true,
    "deadline": "2022-11-08",
    "created_at": "2021-11-09T01:50:19.545Z"
}
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. A resposta não terá conteúdo, será apenas o HTTP 204.

Na pasta "Postman" contém uma Collection exportada com todas as requisições salvas.

Especificação dos testes

Testes realizados utilizando o framework Jest · Delightful JavaScript Testing.

Para completar o desafio, a aplicação foi aprovada nos seguintes testes:

Tests

Testes de usuários

  • Should be able to create a new user

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

Testes de ToDos

  • Should be able to list all user's todos

  • Should be able to create a new todo

  • Should be able to update a todo.

  • Should not be able to update a non existing todo

  • Should be able to mark a todo as done

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

  • Should be able to delete a todo

  • Should not be able to delete a non existing todo

📝 Licença

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

desafio01-conceitos-do-node.js's People

Contributors

taohansens avatar

Stargazers

 avatar  avatar

Watchers

 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.