Trata-se de uma ferramenta com uma API e um banco de dados para a gestão de tarefas em que será possível criar, visualizar, deletar e atualizar tarefas.
- Node.js : Você precisará do Node.js para executar a aplicação:
- MySQL : O MySQL é necessário para configurar o banco de dados:
-
Clonar o Repositório:
git clone git@github.com:rodrigo-csantos/TaskQuest-API.git
-
Entre na pasta do repositório que você acabou de clonar::
cd TaskQuest-API
-
Instalar Dependências:
npm install
-
Configurar o Banco de Dados:
-
Configurar Variáveis de Ambiente:
- Crie um arquivo
.env
na raiz do projeto. - Adicione as seguintes variáveis de ambiente com suas configurações de banco de dados:
HOST=localhost USER=seu_usuario PASSWORD=sua_senha DATABASE=taskquest_db PORT=porta para subir o server.js JWT_SECRET=senha para assinatura do token JWT para autenticação
- Crie um arquivo
-
Criar Banco de Dados no MySQL e Executar Migrações:
- Execute o seguinte comando no terminal para criar o banco e executar as migrações para criar as tabelas no banco de dados:
npm run build:database
- Execute o seguinte comando no terminal para criar o banco e executar as migrações para criar as tabelas no banco de dados:
-
1. Endpoint para Cadastro de Usuário
- Através deste endpoint será possível realizar o cadastro de novos usuários à aplicação, persistindo seus dados no banco.
Método: POST
URL: http://localhost:3030/users
Cabeçalhos (Headers):
Content-Type: application/json
Corpo da Requisição (JSON):
{
"userName": "Nome_do_usuário",
"email": "usuario@example.com",
"password": "Senha123@",
"idAvatar": 1
}
Validação dos dados:
- Os dados do corpo da requisição são validados usando o seguinte esquema:
userName
(string, obrigatório): Nome do usuário. Deve ter no mínimo 3 caracteres.
email
(string, obrigatório): Email do usuário. Deve ser um email válido.
password
(string, obrigatório): Senha do usuário. Deve ter entre 8 e 15 caracteres, incluindo pelo menos uma letra maiúscula, um número e um caractere especial.
idAvatar
(integer, obrigatório): ID do avatar do usuário.
Respostas:
201 Created:
Indica que o usuário foi registrado com sucesso:
{
"message": "user successfully registered"
}
400 Bad request:
Indica que houve um problema com os dados fornecidos na requisição:
{
"message": "Failed to register user"
}
400 Bad request:
Caso haja erros de validação:
{
"type": [
"any.required",
"any.required",
"any.required",
"any.required"
],
"message": [
"\"userName\" is required",
"\"email\" is required",
"\"password\" is required",
"\"idAvatar\" is required"
]
}
500 Internal Server Error:
Indica que ocorreu um erro no servidor durante o processamento da requisição:
{
"message": "Internal Server Error"
}
2. Endpoint para Login
- Através deste endpoint será possível efetuar login para autenticação de usuário, onde, quando efetuado login com sucesso a API retornará dois tokens, o token de acesso à rotas protegidas e o refresh token para reautenticação.
Método: POST
URL: http://localhost:3030/login
Cabeçalhos (Headers):
Content-Type: application/json
Corpo da Requisição (JSON):
{
"email": "usuario@example.com",
"password": "Senha123@"
}
Validação dos dados:
- Os dados do corpo da requisição são validados usando o seguinte esquema:
email
(string, obrigatório): Email do usuário. Deve ser um email válido.
password
(string, obrigatório): Senha do usuário. Deve ter entre 8 e 15 caracteres, incluindo pelo menos uma letra maiúscula, um número e um caractere especial.
Respostas:
200 OK:
Indica que o usuário foi autenticado com sucesso e recebeu os tokens de acesso e refresh:
{
"auth": true,
"accessToken": "seu_token_de_acesso",
"refreshToken": "seu_refresh_token",
"message": "user successfully logged in"
}
401 Unauthorized:
Indica que os dados fornecidos estão incorretos:
{
"message": "The email or password provided is incorrect"
}
3. Endpoint para Logout
- Através deste endpoint será possível efetuar logout da aplicação, invalidando os tokens que foram fornecidos ao client side. Deve-se atentar de aos headers 'authorization' (onde será fornecido o accessToken) e 'x-refresh-token' (onde será fornecido o refreshToken).
Método: POST
URL: http://localhost:3030/logout
Cabeçalhos (Headers):
Content-Type: application/json
authorization: Bearer <accessToken>
x-refresh-token: Bearer <refreshToken>
Validação dos tokens:
- O tokens são validados seguindo o seguinte esquema:
headers
o token de acesso deve ser passado através do header 'authorization' e o refresh token através do header 'x-refresh-token'
validações
os tokens serão verificados nos seguintes cenários: a presença do token no cabeçalho, se a conformação está correta com a presença do 'Bearer' (Bearer <token>
), se o token já foi invalidado e adicionado a blocklist e se está inválido ou expirado.
Respostas:
200 OK:
Indica que o usuário foi deslogado com sucesso e os tokens foram invalidados:
{
"message": "user successfully logged out"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido a ausência do token:
{
"message": "Token not provided"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido a forma não padrão que o token foi enviado:
{
"message": "Malformed token"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido token já invalidado na blocklist:
{
"message": "Unauthenticated user - Invalid token"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido token invalido ou expirado:
{
"message": "Token expired",
"message": "Invalid token"
}
500 Internal Server Error:
Indica que ocorreu um erro no servidor durante o processamento da requisição:
{
"message": "Internal Server Error"
}
4. Endpoint para Refresh Token
- Através deste endpoint será possível que o cliente obtenha novos tokens de acesso sem precisar solicitar que o usuário faça login novamente. Irá invalidar os tokens que foram fornecidos ao client side anteriomente e conceder novos tokens de acesso e de refresh. Deve-se atentar de aos headers 'authorization' (onde será fornecido o accessToken) e 'x-refresh-token' (onde será fornecido o refreshToken).
Método: POST
URL: http://localhost:3030/refresh-login
Cabeçalhos (Headers):
Content-Type: application/json
authorization: Bearer <accessToken>
x-refresh-token: Bearer <refreshToken>
Validação dos tokens:
- O tokens são validados seguindo o seguinte esquema:
headers
o token de acesso deve ser passado através do header 'authorization' e o refresh token através do header 'x-refresh-token'
validações
os tokens serão verificados nos seguintes cenários: a presença do token no cabeçalho, se a conformação está correta com a presença do 'Bearer' (Bearer <token>
), se o token já foi invalidado e adicionado a blocklist e se está inválido ou expirado.
Respostas:
200 OK:
Indica que o tokens foiram renovados com sucesso e os anteriores foram invalidados:
{
"auth": true,
"accessToken": "seu_token_de_acesso",
"refreshToken": "seu_refresh_token",
"message": "Tokens successfully refreshed",
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido a ausência do token:
{
"message": "Token not provided"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido a forma não padrão que o token foi enviado:
{
"message": "Malformed token"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido token já invalidado na blocklist:
{
"message": "Unauthenticated user - Invalid token"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido token invalido ou expirado:
{
"message": "Token expired",
"message": "Invalid token"
}
500 Internal Server Error:
Indica que ocorreu um erro no servidor durante o processamento da requisição:
{
"message": "Failed to refresh tokens",
"error": "Internal Server Error"
}
5. Endpoint para Listar Todas as Tarefas do Usuário
- Através deste endpoint será possível realizar a busca de todas as tarefas atribuídas ao usuário autenticado na aplicação.
Método: GET
URL: http://localhost:3030/tasks
Cabeçalhos (Headers):
Content-Type: application/json
authorization: Bearer <accessToken>
x-refresh-token: Bearer <refreshToken>
Validação dos tokens:
- O tokens são validados seguindo o seguinte esquema:
headers
o token de acesso deve ser passado através do header 'authorization' e o refresh token através do header 'x-refresh-token'
validações
os tokens serão verificados nos seguintes cenários: a presença do token no cabeçalho, se a conformação está correta com a presença do 'Bearer' (Bearer <token>
), se o token já foi invalidado e adicionado a blocklist e se está inválido ou expirado.
Respostas:
200 OK:
Indica que a busca das tarefas associadas ao usuário autenticado foi completa com sucesso, retornando um array de objetos:
[
{
"id": 1,
"taskName": "Nome_da_Tarefa",
"description": "Descrição_da_Tarefa",
"status": "done",
"owner": 1,
"createdAt": "2024-06-05T21:14:42.000Z",
"updatedAt": "2024-06-05T21:15:29.000Z"
},
{
"id": 2,
"taskName": "Nome_da_Tarefa",
"description": "Descrição_da_Tarefa",
"status": "todo",
"owner": 1,
"createdAt": "2024-06-05T21:14:49.000Z",
"updatedAt": "2024-06-05T21:14:49.000Z"
}
]
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido a ausência do token:
{
"message": "Token not provided"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido a forma não padrão que o token foi enviado:
{
"message": "Malformed token"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido token já invalidado na blocklist:
{
"message": "Unauthenticated user - Invalid token"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido token invalido ou expirado:
{
"message": "Token expired",
"message": "Invalid token"
}
404 Not Found:
Indica que durante a busca não foram encontradas tarefas associadas a este usuário:
{
"message": "No tasks available for this user"
}
500 Internal Server Error:
Indica que ocorreu um erro no servidor durante o processamento da requisição:
{
"message": "Internal Server Error"
}
6. Endpoint para Criar uma Tarefa
- Através deste endpoint será possível criar uma nova tarefa.
Método: POST
URL: http://localhost:3030/task
Cabeçalhos (Headers):
Content-Type: application/json
authorization: Bearer <accessToken>
x-refresh-token: Bearer <refreshToken>
Corpo da Requisição (JSON):
{
"taskName": "Título_da_tarefa",
"description": "Descrição_da_tarefa",
"status": "todo"
}
Validação dos tokens:
- O tokens são validados seguindo o seguinte esquema:
headers
o token de acesso deve ser passado através do header 'authorization' e o refresh token através do header 'x-refresh-token'
validações
os tokens serão verificados nos seguintes cenários: a presença do token no cabeçalho, se a conformação está correta com a presença do 'Bearer' (Bearer <token>
), se o token já foi invalidado e adicionado a blocklist e se está inválido ou expirado.
Validação dos dados:
- Os dados do corpo da requisição são validados usando o seguinte esquema:
taskName
(string, obrigatório): Título da tarefa, deve estar presente no corpo e ser uma string.
description
(string, obrigatório): Descrição da tarefa, deve estar presente no corpo e ser uma string.
status
(string, obrigatório): Status da tarefa, deve estar presente no corpo e ser uma string.
Respostas:
201 Created:
Indica que a tarefa foi criada com sucesso, retornando um objeto com a nova tarefa:
{
"createdAt": "2024-06-15T20:25:00.148Z",
"updatedAt": "2024-06-15T20:25:00.149Z",
"id": 3,
"taskName": "Título_da_tarefa",
"description": "Descrição_da_tarefa",
"status": "todo",
"owner": 1
}
400 Bad request:
Caso haja erros de validação:
{
"type": [
"any.required",
"any.required",
"any.required"
],
"message": [
"\"taskName\" is required",
"\"description\" is required",
"\"status\" is required"
]
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido a ausência do token:
{
"message": "Token not provided"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido a forma não padrão que o token foi enviado:
{
"message": "Malformed token"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido token já invalidado na blocklist:
{
"message": "Unauthenticated user - Invalid token"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido token invalido ou expirado:
{
"message": "Token expired",
"message": "Invalid token"
}
404 Not Found:
Indica que ocorreu um erro durante a criação e persistência dos dados da tarefa no banco:
{
"message": "Failed to create task"
}
500 Internal Server Error:
Indica que ocorreu um erro no servidor durante o processamento da requisição:
{
"message": "Internal Server Error"
}
7. Endpoint para Atualizar Status de uma Tarefa
- Através deste endpoint será possível atualizar o status de uma tarefa.
Método: PUT
URL: http://localhost:3030/task/:id
Cabeçalhos (Headers):
Content-Type: application/json
authorization: Bearer <accessToken>
x-refresh-token: Bearer <refreshToken>
Corpo da Requisição (JSON):
{
"status": "done"
}
Validação dos tokens:
- O tokens são validados seguindo o seguinte esquema:
headers
o token de acesso deve ser passado através do header 'authorization' e o refresh token através do header 'x-refresh-token'
validações
os tokens serão verificados nos seguintes cenários: a presença do token no cabeçalho, se a conformação está correta com a presença do 'Bearer' (Bearer <token>
), se o token já foi invalidado e adicionado a blocklist e se está inválido ou expirado.
Validação dos dados:
- Os dados do corpo da requisição são validados usando o seguinte esquema:
status
(string, obrigatório): Status da tarefa, deve estar presente no corpo e ser uma string.
Respostas:
200 OK:
Indica que a tarefa foi atualizada com sucesso:
{
"message": "task updated successfully"
}
400 Bad request:
Caso haja erros de validação:
{
"type": [
"any.required"
],
"message": [
"\"status\" is required"
]
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido a ausência do token:
{
"message": "Token not provided"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido a forma não padrão que o token foi enviado:
{
"message": "Malformed token"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido token já invalidado na blocklist:
{
"message": "Unauthenticated user - Invalid token"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido token invalido ou expirado:
{
"message": "Token expired",
"message": "Invalid token"
}
404 Not Found:
Indica que ocorreu um erro durante a atualização da tarefa, onde a tarefa passada path da url da requisição não foi encontrada:
{
"message": "task not found"
}
500 Internal Server Error:
Indica que ocorreu um erro no servidor durante o processamento da requisição:
{
"message": "Internal Server Error"
}
8. Endpoint para Deletar uma Tarefa
- Através deste endpoint será possível excluir uma tarefa.
Método: DELETE
URL: http://localhost:3030/task/:id
Cabeçalhos (Headers):
Content-Type: application/json
authorization: Bearer <accessToken>
x-refresh-token: Bearer <refreshToken>
Validação dos tokens:
- O tokens são validados seguindo o seguinte esquema:
headers
o token de acesso deve ser passado através do header 'authorization' e o refresh token através do header 'x-refresh-token'
validações
os tokens serão verificados nos seguintes cenários: a presença do token no cabeçalho, se a conformação está correta com a presença do 'Bearer' (Bearer <token>
), se o token já foi invalidado e adicionado a blocklist e se está inválido ou expirado.
Respostas:
200 OK:
Indica que a tarefa foi atualizada com sucesso:
{
"message": "task updated successfully"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido a ausência do token:
{
"message": "Token not provided"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido a forma não padrão que o token foi enviado:
{
"message": "Malformed token"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido token já invalidado na blocklist:
{
"message": "Unauthenticated user - Invalid token"
}
401 Unauthorized:
Indica que o usuário não está autenticado durante a validação devido token invalido ou expirado:
{
"message": "Token expired",
"message": "Invalid token"
}
404 Not Found:
Indica que ocorreu um erro durante a atualização da tarefa, onde a tarefa passada path da url da requisição não foi encontrada:
{
"message": "task not found"
}
500 Internal Server Error:
Indica que ocorreu um erro no servidor durante o processamento da requisição:
{
"message": "Internal Server Error"
}
npm start
: Inicia o servidor.npm run build:database
: Inicia as configurações do banco de dados.