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_idse 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>