An open API service indexing awesome lists of open source software.

https://github.com/celiovjunior/teste-api

💲 Resolução do teste prático de uma API de cálculo de orçamento.
https://github.com/celiovjunior/teste-api

api axios express javascript jest nodejs rest-api typescript

Last synced: 4 months ago
JSON representation

💲 Resolução do teste prático de uma API de cálculo de orçamento.

Awesome Lists containing this project

README

        

(Resolução) Teste - API de Orçamento

> Status: finalizado ✔

## Descrição:
Utilizando os dados disponíveis em dois mockends (um com uma lista de usuários e outro com uma lista de produtos), foi desenvolvido uma API onde é possível:

- listar os dados dos usuários ("users");
- listar os dados dos produtos ("products");
- calcular o orçamento ("budget") que cada usuário irá pagar em cima do(s) preço(s) do(s) produtos(s) selecionado(s);

## Ferramentas Utilizadas:
- [Node](https://nodejs.org)
- [Express](https://expressjs.com)
- [Typescript](https://www.typescriptlang.org/)
- [Axios](https://axios-http.com/docs/intro)
- [Jest](https://jestjs.io/docs/getting-started)

## Como Baixar o Projeto:
Antes de baixar o projeto, certifique-se de que você tenha o Node, o npm (gerenciador de pacotes do Node) e o Git instalandos e devidamente configurados no seu computador.

Abaixo estão alguns links de apoio:

- [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)

- [GIT](https://git-scm.com/downloads)

É recomendado que os comandos abaixo sejam feitos em um terminal bash

```bash
# 1: clone o repositório
git clone [email protected]:celiovjunior/teste-api.git

# 2: acesse a pasta do projeto
cd teste-api

# 3: faça o download das bibliotecas/frameworks pendentes e aguarde
npm install

# 4: execute o projeto
npm run dev

# Uma mensagem dizendo 'Server is running' deverá aparecer
```

---

## Detalhes do Projeto

### Formato:

Os dados do projeto foram trabalhados no formato JSON
Segue os exemplos abaixo:

USER
```json
[
{
"id": 1,
"name": "cvRhuZicvV",
"tax": 79
},
{
"id": 2,
"name": "P5hBDBonm3",
"tax": 121
},
{
"id": 3,
"name": "buTTe8n3gT",
"tax": 82
},
{...}
]
```

PRODUCT
```json
[
{
"id": 1,
"name": "explicabo alias hic reprehenderit deleniti quos id reprehenderit consequuntur ipsam iure voluptatem ea culpa excepturi ducimus repudiandae ab",
"price": 6945
},
{
"id": 2,
"name": "nostrum veritatis reprehenderit repellendus vel numquam soluta ex inventore ex",
"price": 2435
},
{
"id": 3,
"name": "praesentium explicabo reprehenderit laudantium a pariatur ab sit pariatur quos",
"price": 4985
},
{...}
]
```

---

### Rotas

Para testar as requisições do projeto, é recomendável utilizar algum software de teste de API, como Postman ou Insomnia


Abaixo, alguns links de apoio:

- [Postman](https://www.postman.com/downloads/)
- [Insomnia](https://insomnia.rest/download)

Na tabela seguir, estão algumas orientações de quais rotas são possíveis testar, o tipo de requisição e qual a ação esperada:

A URL base padrão é: http://localhost:3333


Ação
Método HTTP
Rota


Listar todos os usuários
GET
"/users"


Listar todos os produtos
GET
"/products"


Fazer o calculo de orçamento
GET
"/budget/:userId/:productIds"

> OBS: Na rota de cálculo de orçamento, é possível passar mais de um id em :productIds, separando cada id por vírgula (,)

---

## Testes Unitários

Para a realização dos testes, foi utilizada framework Jest.
Você pode acessar mais detalhes sobre essa ferramenta através do link abaixo:

- [Jest](https://jestjs.io/pt-BR/docs/getting-started)

Neste projeto, o Jest foi utilizado para testar se os middlewares se comportam da forma esperada, tendo em vista o status da resposta da requisição (statusCode), o tamanho da lista retornada (length) e o calculo do orçamento (budget) de acordo com os parâmetros passados na rota .

O arquivo de teste se encontra dentro da pasta middleware:

Para rodar os testes, basta rodar o comando abaixo no terminal, dentro do da pasta raiz do projeto:

```node
npm run test
```
---

## Final

Em caso de dúvidas, erros ou mal funcionamento do código, você pode entrar em contato comigo através do e-mail:
📩 [email protected]