Esta API está disponível remotamente em https://api-6hcvm.ondigitalocean.app/ ✨
Este projeto contém o código da API RESTful para comunicação da aplicação cliente do rolê com a base de dados SQL. Ele utiliza o framework Express para a criação do servidor em uma instância do Node.js que se comunica com o banco de dados através do mysql2.
Antes de clonar este repositório, é necessário ter instalado o Node.js e o npm em sua máquina. Explicando essencialmente, o node é uma plataforma que permite a execução de código JavaScript fora do navegador, e o npm é um gerenciador de pacotes para o node. Para instalar o node, basta baixar o instalador no site oficial e seguir as instruções. O npm já vem instalado junto com o node.
Após clonar, para instalar as dependências do projeto, basta executar o comando npm install
na pasta raiz do projeto.
Para executar o projeto, basta executar o comando npm start
na pasta raiz do projeto.
O mysql2 utiliza os dados já existentes das instâncias do MySQL locais em sua máquina para se conectar ao banco de dados. Para que a API funcione corretamente, é necessário que o MySQL esteja instalado e que as instâncias estejam rodando – além disso, certifique-se que o banco de dados esteja criado e configurado corretamente de acordo com o repositório sql.
Antes de executá-lo, crie um arquivo [.env] no diretório raíz do projeto com as seguintes informações, substituindo USUARIO, SENHA e PORTA com as suas credenciais e porta da instância do MySQL.
# A porta para a API
PORT= 3000
# O endereço da base de dados
DATABASE_URL= "mysql://USUARIO:SENHA@localhost:3306/role"
# A chave secreta para assinar o JWT – pode ser literalmente qualquer coisa
API_SECRET= "abcdef"
Para utilizar a API, basta enviar requisições HTTP para o endereço http://localhost:3000/
com os parâmetros necessários para cada rota.
Abaixo está uma lista das rotas implementadas:
Para informações sobre autenticação, veja Autenticação.
-
** GET
/user
** – Retorna os usuários cadastrados. Requer autenticação. Parâmetros:- q (string): Filtra os usuários por meio de uma string de busca
- eventId (int): Inclui um campo indicando se o usuário está associado ao evento do ID especificado
-
** GET
/user/{event_id}
** – Retorna os usuários associados ao evento de IDevent_id
. Requer autenticação. -
** PUT
/user
** – Atualiza os dados do usuário autenticado. Requer autenticação. Parâmetros de corpo:- nome (string): O novo nome do usuário
- email (string): O novo email do usuário
-
** DELETE
/user
** – Deleta o usuário autenticado. Requer autenticação. -
** POST
/user/image
** – Atualiza a imagem do usuário autenticado. Requer autenticação. Parâmetros de corpo:- image: A nova imagem do usuário, em formato multipart/form-data
-
** GET
/user/login
** – Retorna os dados do usuário autenticado. Requer autenticação. -
** POST
/user/signin
** – Cria uma nova conta do usuário ou tenta realizar um login. Quando executada, manda um código de verificação para o email do usuário. Parâmetros de corpo:- email (string): O email do usuário
-
** POST
/user/verify
** – Verifica o código de verificação enviado para o email do usuário. Parâmetros de corpo:- email (string): O email do usuário
- code (string): O código de verificação enviado para o email do usuário
- ** GET
/event/{event_id?}
** – Retorna os eventos cadastrados, ou o evento de IDevent_id
se especificado. Requer autenticação. - ** GET
/event/{event_id}/items
** – Retorna os insumos associados ao evento de IDevent_id
. Requer autenticação. - ** POST
/event
** – Cria um novo evento. Requer autenticação. Parâmetros de corpo:- name (string): O nome do evento
- emoji (string): O emoji do evento
- color1 (string): A cor primária do evento
- color2 (string): A cor secundária do evento
- ** PUT
/event
** – Atualiza os dados do evento especificado. Requer autenticação. Parâmetros de corpo:- eventId (int): o ID do evento a ser atualizado
- name (string): O novo nome do evento
- emoji (string): O novo emoji do evento
- color1 (string): A nova cor primária do evento
- color2 (string): A nova cor secundária do evento
- startDate (string): A nova data de início do evento
- endDate (string): A nova data de fim do evento
- ** DELETE
/event/{event_id}
** – Deleta o evento de IDevent_id
. Requer autenticação.
router.get('/:item_id', verifyToken, getItem); router.get('/:item_id/transactions', verifyToken, getTransactions); router.post('/', verifyToken, postItem); router.put('/', verifyToken, putItem); router.delete('/:item_id', verifyToken, deleteItem);
- ** GET
/item/{item_id}
** – Retorna os dados do insumo de IDitem_id
. Requer autenticação. - ** GET
/item/{item_id}/transactions
** – Retorna as transações associadas ao insumo de IDitem_id
. Requer autenticação. - ** POST
/item
** – Cria um novo insumo. Requer autenticação. Parâmetros de corpo:- category (int): A categoria do insumo
- name (string): O nome do insumo
- notes (string): As notas do insumo
- ** PUT
/item
** – Atualiza os dados do insumo especificado. Requer autenticação. Parâmetros de corpo:- itemId (int): o ID do insumo a ser atualizado
- category (int): A nova categoria do insumo
- name (string): O novo nome do insumo
- notes (string): As novas notas do insumo
- ** DELETE
/item/{item_id}
** – Deleta o insumo de IDitem_id
. Requer autenticação.
- ** GET
/transaction/{transaction_id}
** – Retorna os dados da transação de IDtransaction_id
. Requer autenticação. - ** POST
/transaction
** – Cria uma nova transação. Requer autenticação. Parâmetros de corpo:- amount (double): O valor da transação
- date (string): A data da transação
- itemId (int): O ID do insumo associado à transação
- newUserId (int): O ID do usuário associado à transação
- ** PUT
/transaction
** – Atualiza os dados da transação especificada. Requer autenticação. Parâmetros de corpo:- transactionId (int): o ID da transação a ser atualizada
- amount (double): O valor da transação
- date (string): A data da transação
- newUserId (int): O ID do usuário associado à transação
- ** DELETE
/transaction/{transaction_id}
** – Deleta a transação de IDtransaction_id
. Requer autenticação.
Para autenticar-se, é necessário enviar um token JWT no cabeçalho da requisição. Para obter um token, é necessário enviar uma requisição POST para a rota /user/signin
com o email do usuário. Isso enviará um código de verificação para o email do usuário. Para verificar o código, é necessário enviar uma requisição POST para a rota /user/verify
com o email e o código de verificação. Isso retornará um token JWT que pode ser utilizado para autenticar-se nas rotas que requerem autenticação.''
O cabeçalho deverá ter o seguinte formato:
Content-Type: application/json
Authorization: Bearer <token>