Skip to content

rmftelier/pretalab-api

 
 

Repository files navigation

📊 API de Gerenciamento Financeiro Pessoal

API para gerenciamento de finanças pessoais, desenvolvida com Node.js, Express e TypeScript, utilizando MongoDB como banco de dados, integração com a Gemini API para assitência financeira, e deploy realizado no Google Cloud.

Essa API pode ser integrada na aplicação Fin Shopping, permitindo consultas de transações, histórico financeiro, compras e chat para assistência financeira.


📦 Instalação e Execução

  1. Clone o repositório:

       git clone https://github.com/rmftelier/pretalab-api
  2. Acesse a pasta do projeto:

     cd pretalab-api
  3. Instale as dependências:

     npm install
  4. Crie um arquivo .env na raiz do projeto com as variáveis necessárias:

     MONGO_URL=mongodb+srv://<username>:<password>@<cluster-url>/<dbname>?retryWrites=true&w=majority&appName=<appname>
     GEMINI_API_KEY=sua_chave_gemini
  5. Execute em modo desenvolvimento:

     npm run dev
  6. Para testar as rotas utilize ferramentas como: ThunderClient ou Postman e faça as requisições que desejar para testar os endpoints da API.

  7. Para rodar os testes utilize o comando:

     npm run test

🛠 Documentação da API

A aplicação possui os seguintes endpoints:

1. Produtos

GET /products

Retorna todos os produtos disponíveis na loja.

  • Método: GET
  • Resposta de Sucesso (200 OK):
    [
      {
        "id": "1",
        "name": "Notebook Gamer Pro",
        "price": 7500
      },
      {
        "id": "2",
        "name": "Mouse Sem Fio Ultra-leve",
        "price": 350
      },
      {
        "id": "3",
        "name": "Teclado Mecânico RGB",
        "price": 550
      },
      {
        "id": "4",
        "name": "Monitor 4K 27\"",
        "price": 2500
      },
      {
         "id": "5",
        "name": "Headset 7.1 Surround",
         "price": 600
      },
      {
        "id": "6",
        "name": "Webcam Full HD",
        "price": 400
      },
      {
        "id": "7",
        "name": "SSD NVMe 1TB",
        "price": 800
      }
    ]

2. Transações Financeiras

GET /transactions

Retorna todas as transações financeiras cadastradas.

  • Método: GET
  • Resposta de Sucesso (200 OK):
    [
      {
          "id": "689a467bb11df5388c3d1e6a",
          "date": "2024-07-15T10:00:00.000Z",
          "description": "Salário de Julho",
          "amount": 5000,
          "type": "income",
          "category": "Salário"
      },
      {
          "id": "689a4687b11df5388c3d1e6c",
          "date": "2024-07-15T12:30:00.000Z",
          "description": "Aluguel",
          "amount": 1500,
          "type": "expense",
          "category": "Moradia"
      },
    ]

GET /transactions/:id

Retorna todas as transações financeiras cadastradas.

  • Método: GET
  • Parâmetros da Rota: id: string
  • Resposta de Sucesso (200 OK):
    {
      "transaction": {
         "id": "689a467bb11df5388c3d1e6a",
         "date": "2024-07-15T10:00:00.000Z",
         "description": "Salário de Julho",
         "amount": 5000,
         "type": "income",
         "category": "Salário"
     }
    }
  • **Resposta de Erro (404 NOT FOUND):
    {
      "message": "A transação financeira com o id informado não foi encontrada."
    }

POST /transactions

Cria uma nova transação financeira.

  • Método: POST
  • Corpo da Requisição:
    {
      "date": "2024-08-02T15:00:00Z",
      "description": "Ingressos para show do BTS",
      "amount": 2500,
      "type": "expense",
      "category": "Lazer"
    }
  • Resposta de Sucesso (201 Created):
    {
        "message": "A Transação Financeira foi criada",
        "transaction": {
            "id": "68b10de7ae64ae1064d9d256",
            "date": "2024-08-02T15:00:00.000Z",
            "description": "Ingressos para show do BTS",
            "amount": 2500,
            "type": "expense",
            "category": "Lazer"
        }
    }

3. Compras

POST /checkout

Cria uma nova compra.

  • Método: POST
  • Corpo da Requisição:
    {
      "cart": [
         { 
            "productId": "3", 
            "quantity": 2
         }, 
         {
            "productId": "4", 
            "quantity": 3
         }
     ]
    }
  • Resposta de Sucesso (200 OK):
    {
      "id": "68b10a64ae64ae1064d9d23c",
      "date": "2025-08-29T02:03:16.111Z",
      "total": 8600,
      "items": [
         {
           "productId": "3",
           "quantity": 2,
           "name": "Teclado Mecânico RGB",
           "price": 550
         },
         {
           "productId": "4",
           "quantity": 3,
           "name": "Monitor 4K 27\"",
           "price": 2500
         }
     ]
    }
  • Resposta de Erro (400 Bad Request):
    • Se o total exceder R$20.000:
       {
           "message": "O valor total da compra excede o limite de R$20.000."
       }

GET /purchases

Retorna todas as compras cadastradas.

  • Método: GET
  • Resposta de Sucesso (200 OK):
    [
      {
        "id": "68b10a64ae64ae1064d9d23c",
        "date": "2025-08-29T02:03:16.111Z",
        "total": 8600,
        "items": [
           {
             "productId": "3",
             "quantity": 2,
             "name": "Teclado Mecânico RGB",
             "price": 550
           },
           {
             "productId": "4",
             "quantity": 3,
             "name": "Monitor 4K 27\"",
             "price": 2500
           }
       ]
      }
    ]

GET /purchases/:id

Retorna uma compra específica pelo seu ID.

  • Método: GET

  • Parâmetros da Rota: id: string

  • Resposta de Sucesso (200 OK):

    {
      "purchase": {
         "id": "68b10a64ae64ae1064d9d23c",
         "date": "2025-08-29T02:03:16.111Z",
         "total": 8600,
         "items": [
            {
               "productId": "3",
               "quantity": 2,
               "name": "Teclado Mecânico RGB",
               "price": 550
            },
            {
               "productId": "4",
               "quantity": 3,
               "name": "Monitor 4K 27\"",
               "price": 2500
            }
        ]
      }
    }
  • Resposta de Erro (404 NOT FOUND):

    {
      "message": "Compra com o id informado não foi encontrada."
    }

💌 Desenvolvido por Roberta Meyrelles

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • TypeScript 96.0%
  • Dockerfile 2.7%
  • JavaScript 1.3%