Uma API RESTful para guardar e organizar suas tarefas. Ainda é uma API segura porque conta com autenticação, não deixando outros usuários acessarem suas tarefas
- Node
- Express
- MongoDB
- Mongoose
- Nodemon
- Validator
- Bcrypt
- JSON Web Token
- SendGrid
- Jest
- SuperTest
- Multer
Observação: Essa applicação está disponível no Heroku. Se você quiser usar pelo Heroku, você pode pular e a configuração.
- Configuração (Opcional)
- Todos os Endpoints
- Como usar os Endpoints de Usuários
- Criar novo usuário
- Login de um usuário
- Atualizar informações do usuário
- Buscar perfil de um usuário logado
- Buscar perfil de usuário pelo ID
- Upload do avatar de usuário logado
- Buscar o avatar do usuário logado
- Buscar avatar de um usuário pelo ID
- Deslogar usuário
- Deslogar usuário de todos os aparelhos
- Deletar avatar do usuário logado
- Deletar usuário logado
- Como usar os Endpoints de Tarefas
- Autor
Node
Mongodb
Clone o projeto:
$ git clone https://github.com/Lukazovic/node-task-manager-api.git
Entre na pasta do projeto::
$ cd node-task-manager-api
Instalando as dependências do projeto:
$ npm install
Observação: Você precisará de algumas variáveis de ambiente para configurar o projeto, se quiser iniciar o servidor ou rodar os testes.
Primeiro crie uma pasta config na raiz do projeto:
$ mkdir config
To setup the server environment: You will have to create a file at ./config called dev.env and configure as the example bellow:
Para configurar as variáveis de ambiente: Você terá que criar um arquivo chamado dev.env na pasta ./config e configurar como no exemplo abaixo:
PORT=<Número-da-Porta>
SENDGRID_API_KEY=<Chave-da-API-do-Sendgrip>
MONGODB_URL=mongodb://127.0.0.1:27017/<Nome-do-banco-de-dados>
JWT_SECRET=<Palavra-chave-para-JWT>
- Número-da-Porta: Uma porta para acessar o servidor
(exemplo: PORT=3000); - Chave-da-API-do-Sendgrip: Uma chave provida pelo SendGrid assim podendo mandar emails diretamente pela aplicação.
- Nome-do-banco-de-dados: O nome para o Banco de Dados
(exemplo: node-task-manager-api); - Palavra-chave-para-JWT: Uma palavra secreta para gerar tokens JWT para a API
(exemplo: minhachavesecreta).
Para configurar o ambiente de testes: Você precisará criar um arquivo test.env na pasta ./config e configurar como no exemplo acima EXCETO o Nome-do-banco-de-dados que você deve trocar o nome (exemplo: node-task-manager-test-api);
$ npm run test
Para rodar a API (na pasta do projeto):
$ npm run start
Acesse em: localhost:Número-da-Porta
- POST:
/users- Criar novo usuário - POST:
/users/login- Login de um usuário - PATCH:
/users/me- Atualizar informações do usuário - GET :
/users/me- Buscar perfil de um usuário logado - GET:
/users/<id>- Buscar perfil de usuário pelo ID - POST:
/users/me/avatar- Upload do avatar de usuário logado - GET:
/users/me/avatar- Buscar o avatar do usuário logado - GET:
/users/<id>/avatar- Buscar avatar de um usuário pelo ID - POST:
/users/logout- Deslogar usuário - POST:
/users/logoutAll- Deslogar usuário de todos os aparelhos - DELETE:
/users/me/avatar- Deletar avatar do usuário logado - DELETE:
/users/me- Deletar usuário logado
- POST:
/tasks- Criar nova tarefa para um usuário logado - GET:
/users- Buscar todas as tarefas de um usuário logado - GET :
/tasks/<id>- Buscar tarefas por ID de um usuário logado - PATCH:
/tasks/<id>- Atualizar tarefas por ID de um usuário logado - DELETE:
/tasks/<id>- Deletar tarefas por ID de um usuário logado
- POST:
/users
| Parametro | Descrição | Tipo | Necessário |
|---|---|---|---|
| name | Nome do usuário | String | Sim |
| age | Idade do usuário | Integer | Não |
| Emial do usuário | String | Sim | |
| password | Senha do usuário | String | Sim |
A senha precisa ter mais do que 7 caracteres e não pode conter a palavra:
password
{
"name": "User Test",
"age": 18,
"email": "test@email.com",
"password": "idontknow"
}Como resposta, você receberá um token JWT para poder autenticar o usuário quando precisar Assim que um usuário for criado, a aplicação irá enviar um email para o email dele
{
"user": {
"age": 18,
"_id": "5e6e0117bb997d0017c94f0d",
"name": "User Test",
"email": "test@email.com",
"createdAt": "2020-03-15T10:19:03.027Z",
"updatedAt": "2020-03-15T10:19:03.076Z"
},
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ZTZlMDExN2JiOTk3ZDAwMTdjOTRmMGQiLCJpYXQiOjE1ODQyNjc1NDN9.aAvvkMcEaSeQxKyu6wDQXfQ1z4hM9zn1myJT8Iw689U"
}- POST:
/users/login
https://task-manager-node-rest-api.herokuapp.com/users/login
| Parametro | Descrição | Tipo | Necessário |
|---|---|---|---|
| Email do usuário | String | Sim | |
| password | Senha do usuário | String | Sim |
{
"email": "test@email.com",
"password": "idontknow"
}Como resposta, você receberá um token JWT para poder autenticar o usuário quando precisar
{
"user": {
"age": 18,
"_id": "5e6e0117bb997d0017c94f0d",
"name": "User Test",
"email": "test@email.com",
"createdAt": "2020-03-15T10:19:03.027Z",
"updatedAt": "2020-03-15T10:29:26.514Z"
},
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ZTZlMDExN2JiOTk3ZDAwMTdjOTRmMGQiLCJpYXQiOjE1ODQyNjgxNjZ9.MSTXSv6RHlZCSkc2HlMKHhr9vHS-4HV7NPHrG4JBkKs"
}- PATCH:
/users/me
| Parametro | Descrição | Tipo | Necessário |
|---|---|---|---|
| name | Nome do usuário | String | Não |
| age | Idade do usuário | Integer | Não |
| Email do usuário | String | Não | |
| password | Senha do usuário | String | Não |
| Authorization | Token do usuário | Bearer Token | Sim |
{
"name": "User Test",
"age": 18,
"email": "test@email.com",
"password": "idontknow"
}- GET:
/users/me
| Parametro | Descrição | Tipo | Necessário |
|---|---|---|---|
| Authorization | Token do usuário | Bearer Token | Sim |
- GET:
/users/<id><id> é a identificação do usuário
https://task-manager-node-rest-api.herokuapp.com/users/5e6e0117bb997d0017c94f0d
| Parametro | Descrição | Tipo |
|---|---|---|
| _id | ID do usuário | String |
- POST:
/users/me/avatar
https://task-manager-node-rest-api.herokuapp.com/users/me/avatar
| Parametro | Descrição | Tipo | Necessário |
|---|---|---|---|
| Authorization | Token do usuário | Bearer Token | Sim |
| avatar | Avatar do usuário | Form-Data | Sim |
- GET:
/users/me/avatar
https://task-manager-node-rest-api.herokuapp.com/users/me/avatar
| Parametro | Descrição | Tipo | Necessário |
|---|---|---|---|
| Authorization | Token do usuário | Bearer Token | Sim |
- GET:
/users/<id>/avatar<id> é a identificação do usuário
https://task-manager-node-rest-api.herokuapp.com/users/5e6e0117bb997d0017c94f0d/avatar
| Parametro | Descrição | Tipo |
|---|---|---|
| _id | ID do usuário | String |
- POST:
/users/logout
https://task-manager-node-rest-api.herokuapp.com/users/logout
| Parametro | Descrição | Tipo | Necessário |
|---|---|---|---|
| Authorization | Token do usuário | Bearer Token | Sim |
- POST:
/users/logoutAll
https://task-manager-node-rest-api.herokuapp.com/users/logoutAll
| Parametro | Descrição | Tipo | Necessário |
|---|---|---|---|
| Authorization | Token do usuário | Bearer Token | Sim |
- DELETE:
/users/me/avatar
https://task-manager-node-rest-api.herokuapp.com/users/me/avatar
| Parametro | Descrição | Tipo | Necessário |
|---|---|---|---|
| Authorization | Token do usuário | Bearer Token | Sim |
- DELETE:
/users/me
| Parametro | Descrição | Tipo | Necessário |
|---|---|---|---|
| Authorization | Token do usuário | Bearer Token | Sim |
- POST:
/tasks
| Parametro | Descrição | Tipo | Necessário |
|---|---|---|---|
| description | Descrição da Tarefa | String | Sim |
| completed | Situação da Tarefa | Boolean | Não |
{
"description": "Do a task",
"completed": false
}{
"completed": false,
"_id": "5e6e68914934ce0017892730",
"description": "Do a task",
"owner": "5e6e0117bb997d0017c94f0d",
"createdAt": "2020-03-15T17:40:33.445Z",
"updatedAt": "2020-03-15T17:40:33.445Z",
"__v": 0
}- GET:
/tasks
Você pode ordenar as tarefas adicionando ?sortBy=completed:desc à URL, para buscar todas as tarefas ordenando pelas não completadas primeiro.
Você pode buscar todas as tarefas ordenando para aparecerem primeiro as tarefas completadas adicionando ?sortBy=completed:asc à URL.
You can get a limit of tasks by adding ?limit=10 to the URL so you will get 10 tasks.
Você pode limitar o número de tarefas adicionando ?limit=10 a URL, assim você receberá 10 tarefas.
Você pode pular as primeiras tarefas adicionando ?skip=10 à URL. Assim você pode usar páginação, limitando as tarefas que você recebe em cada requisição, e pulando algumas tarefas, adicionando ?limit=10&skip=10
- Sorting tasks by completed:
- Ordenando tarefas por completadas:
https://task-manager-node-rest-api.herokuapp.com/tasks?sortBy=completed:asc
- Ordenando tarefas por não completadas
https://task-manager-node-rest-api.herokuapp.com/tasks?sortBy=completed:desc
- Buscar apenas as 10 primeiras tarefas:
https://task-manager-node-rest-api.herokuapp.com/tasks?limit=10
- Pular as 10 primeiras tarefas:
https://task-manager-node-rest-api.herokuapp.com/tasks?skip=10
- Paginação - Buscando tarefas com 10 tarefas por página.
Página 1: https://task-manager-node-rest-api.herokuapp.com/tasks?limit=10&skip=10
Página 2: https://task-manager-node-rest-api.herokuapp.com/tasks?limit=10&skip=20
Página 3: https://task-manager-node-rest-api.herokuapp.com/tasks?limit=10&skip=30
- Tudo junto - Buscando a segunda página com 10 tarefas por página, e ordenando as tarefas para mostrar as não completadas antes.
https://task-manager-node-rest-api.herokuapp.com/tasks?sortBy=completed:desc&limit=10&skip=10
GET : /tasks/<id>
- <id> é a identificação da tarefa que deseja buscar
https://task-manager-node-rest-api.herokuapp.com/tasks/5e6e0117bb997d0017c94f0d
- PATCH:
/tasks/<id><id> é a identificação da tarefa que deseja atualizar
https://task-manager-node-rest-api.herokuapp.com/tasks/5e6e0117bb997d0017c94f0d
| Parametro | Descrição | Tipo | Necessário |
|---|---|---|---|
| Descrição | Descrição da Tarefa | String | Não |
| completed | Situação da Tarefa | Boolean | Não |
{
"description": "Do a task",
"completed": true
}- PATCH:
/tasks/<id><id> é a identificação da tarefa que deseja deletar
https://task-manager-node-rest-api.herokuapp.com/tasks/5e6e0117bb997d0017c94f0d
Lucas Vieira 💻 |