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
- Javascript
- Node.js
- Express
- Express validator
- Bcrypt
- Jsonwebtoken
- Sequelize
- postgreSQL
- Docker
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/
- Backend: 3000
- PostgreSQL: 5432
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
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
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"
}
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"
}
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"
}
]
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"
}
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"
}
]
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"
}
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