Skip to content

Rdemora2/api-gerenciamento-tarefas

Repository files navigation

Api de gerenciamento de tarefas(CRUD)

Sobre o projeto:

Projeto de uma API RESTful completa, pronta para integração com frontend. Sua estrutura foi organizada utilizando o padrão MSC (Model-Service-Controller) e, para maior segurança, foi utilizado token JWT para proteger as rotas de criação, atualização e exclusão de tarefas. Fora isso, também foi usada criptografia(bcrypt) para proteger a senha do usuário durante o fluxo de cadastro e login

Tecnologias utilizadas

Back end

  • Javascript
  • Node.js
  • Express
  • Express validator
  • Bcrypt
  • Jsonwebtoken
  • Sequelize

Banco de dados

  • postgreSQL

Container

  • Docker

Como executar o projeto

Pré-requisitos: Docker

# clonar repositório
git clone https://github.com/Rdemora2/api-gerenciamento-tarefas.git

# buildar os containers docker
docker compose build

# subir os containers
docker compose up -d

# abrir shell no container
docker exec -ti nodeApp-task-manager bash

# fazer migrações
npx sequelize-cli db:migrate

# acessar a url da api
backend: http://localhost:3000/

Portas utilizadas

  • Backend: 3000
  • PostgreSQL: 5432

Endpoints:

Registro de Usuário

Endpoint: http://localhost:3000/api/auth/register

Método: POST

Formato de Requisição:

{
  "name": "Nome do Usuário",
  "email": "[email protected]",
  "password": "senha_secreta"
}

Formato de Resposta:

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MiwiaWF0IjoxNjkzODY3ODQyLCJleHAiOjE2OTM5NTQyNDJ9.5oekHX_68fXeVdAGuB7EtOmHDdrJMzUkVdhe-OAL31s"
}
  • OBS: token JWT válido por 1 dia

Login de Usuário

Endpoint: http://localhost:3000/api/auth/login

Método: POST

Formato de Requisição:

{
  "email": "[email protected]",
  "password": "senha"
}

Formato de Resposta:

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MiwiaWF0IjoxNjkzODY3ODQyLCJleHAiOjE2OTM5NTQyNDJ9.5oekHX_68fXeVdAGuB7EtOmHDdrJMzUkVdhe-OAL31s"
}
  • OBS: token JWT válido por 1 dia

Validação de Token

Endpoint: http://localhost:3000/api/auth/validate-token

Método: GET

Header: Authorization: Bearer {token}

Formato de Requisição:

Formato de Resposta:

{
    "message": "Token válido"
}

Criação de Tarefa

Endpoint: http://localhost:3000/api/tasks

Método: POST

Header: Authorization: Bearer {token}

Formato de Requisição:

{
    "title": "Nome da Tarefa",
    "description": "Descrição da tarefa",
    "status": "Status da tarefa",
}
  • Campos de status Aceitos: 'pendente', 'em andamento', 'concluída'

Formato de Resposta:

{
  "id": 1,
    "title": "Nome da Tarefa",
    "description": "Descrição da tarefa",
    "status": "Status da tarefa",
    "createdAt": "Data de Criação",
    "updatedAt": "Data de Atualização"
}

Listagem geral de Tarefas

Endpoint: http://localhost:3000/api/tasks

Método: GET

Header: Authorization: Bearer {token}

Formato de Requisição:

  • Esse endpoint não necessita de nada na requisição, pois serve apenas para visualização das tarefas

Formato de Resposta:

[
  {
    "id": 1,
    "title": "Nome da Tarefa",
    "description": "Descrição da tarefa",
    "status": "Status da tarefa",
    "createdAt": "Data de Criação",
    "updatedAt": "Data de Atualização"
  },
  {
    "id": 2,
    "title": "Nome da Tarefa 2",
    "description": "Descrição da tarefa 2",
    "status": "Status da tarefa",
    "createdAt": "Data de Criação",
    "updatedAt": "Data de Atualização"
  }
]

Listagem Tarefa por ID

Endpoint: http://localhost:3000/api/tasks/{taskID_desejado}

Método: GET

Header: Authorization: Bearer {token}

Formato de Requisição:

  • Esse endpoint não necessita de nada na requisição, pois serve apenas para visualização da tarefa

Formato de Resposta:

{
  "id": "{taskID}",
  "title": "Minha Tarefa",
  "description": "Esta é uma descrição da minha tarefa",
  "status": "em andamento",
  "createdAt": "Data de Criação",
  "updatedAt": "Data de Atualização"
}

Listagem Tarefa por status

Endpoint: http://localhost:3000/api/tasks/status/{status_desejado}

Método: GET

Header: Authorization: Bearer {token}

Formato de Requisição:

  • Esse endpoint não necessita de nada na requisição, pois serve apenas para visualização das tarefas

Formato de Resposta:

[
  {
    "id": 1,
    "title": "Nome da Tarefa",
    "description": "Descrição da tarefa",
    "status": "Status da tarefa",
    "createdAt": "Data de Criação",
    "updatedAt": "Data de Atualização"
  },
  {
    "id": 2,
    "title": "Nome da Tarefa 2",
    "description": "Descrição da tarefa 2",
    "status": "Status da tarefa",
    "createdAt": "Data de Criação",
    "updatedAt": "Data de Atualização"
  }
]

Edição de Tarefa

Endpoint: http://localhost:3000/api/tasks/{taskID_desejado}

Método: PUT

Header: Authorization: Bearer {token}

Formato de Requisição:

{
    "title": "Nome da Tarefa",
    "description": "Descrição da tarefa",
    "status": "Status da tarefa",
}
  • Campos de status Aceitos: 'pendente', 'em andamento', 'concluída'

Formato de Resposta:

{
    "id": "{taskID}",
    "title": "Nome da Tarefa",
    "description": "Descrição da tarefa",
    "status": "Status da tarefa",
    "createdAt": "Data de Criação",
    "updatedAt": "Data de Atualização"
}

Exclusão de Tarefa

Endpoint: http://localhost:3000/api/tasks/{taskID_desejado}

Método: DELETE

Header: Authorization: Bearer {token}

Formato de Requisição:

Formato de Resposta:

  • Esse endpoint não retorna apenas um status 201 em caso de sucesso

About

Node / Express / postgreSQL / JWT token

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published