Middleware é um projeto criado para resolver o teste disponível nesta página do Notion, sendo um middleware que trabalha com dados mockados, processando estes.
- Linguagem: Typescript 4.9.5 / NodeJS 18.13.0
- Gerenciador de dependências: Npm 8.19.2
- Framework: Express 4.18.2
- Framework de testes: Jest 29.4.1
- Conteinerização: Docker 20.10.23
- GET
/user/list
- Lista todas as pessoas usuárias registradas no mock
Exemplo de resposta:
[
{
"id": 1,
"name": "cvRhuZicvV",
"tax": 79
},
{
"id": 2,
"name": "P5hBDBonm3",
"tax": 121
},
{
"id": 3,
"name": "buTTe8n3gT",
"tax": 82
}
]
- GET
/product/list
- Lista todos os produtos registrados no mock
Exemplo de resposta:
[
{
"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
}
]
- GET
/cart/tax
- Calcula a taxa dos produtos que será paga, baseada em uma pessoa usuária.
Corpo:
{
"userId": 1,
"productsIds": [1, 2]
}
Exemplo de resposta:
{
"products": [
{
"id": 1,
"name": "explicabo alias hic reprehenderit deleniti quos id reprehenderit consequuntur ipsam iure voluptatem ea culpa excepturi ducimus repudiandae ab",
"price": 6945,
"priceWithTax": 8403.45
},
{
"id": 2,
"name": "nostrum veritatis reprehenderit repellendus vel numquam soluta ex inventore ex",
"price": 2435,
"priceWithTax": 2946.35
}
],
"totalPrice": 11349.80,
"user": {
"id": 2,
"name": "P5hBDBonm3",
"tax": 121
}
}
Caso a pessoa usuária informada não exista, a resposta será um BadRequest
:
{"message": "Não existe uma pessoa usuária com ID 9999"}
Caso algum(s) dos produtos informados não exista, a resposta será um BadRequest
:
{"message": "Não existe um(s) produto(s) com ID 999 1000"}
Antes de tudo, o projeto possui duas variáveis de ambiente, a USERS_SERVER
, e a PRODUCTS_SERVER
, cada uma sendo referente a um recurso do mockend, e elas devem ser inseridas em um .env
ou arquivo similar na raiz, ou no comando que executa a API.
Exemplo de .env
:
USERS_SERVER=https://mockend.com/juunegreiros/BE-test-api/users
PRODUCTS_SERVER=https://mockend.com/juunegreiros/BE-test-api/products
O projeto pode ser iniciado usando o Npm, com o comando dev
npm run dev
ou yarn dev
> middleware@1.0.0 dev
> ts-node-dev --inspect --transpile-only --ignore-watch node_modules src/index.ts
[INFO] 20:27:04 ts-node-dev ver. 2.0.0 (using ts-node ver. 10.9.1, typescript ver. 4.9.5)
Debugger listening on ws://127.0.0.1:9229/2ce64113-8a3d-4254-b223-b9956bbd74b2
For help, see: https://nodejs.org/en/docs/inspector
Server on port 8000
http://localhost:8000
O projeto também pode ser iniciado usando Docker, com a imagem lissatransborda/middleware
docker run -i --env USERS_SERVER=https://mockend.com/juunegreiros/BE-test-api/users --env PRODUCTS_SERVER=https://mockend.com/juunegreiros/BE-test-api/products -p 8000:8000 lissatransborda/middleware
O projeto possui testes automatizados, com um coverage de 96.93%. Esses testes podem ser rodados usando o comando test
.
npm run test
ou yarn test
Para fazer a build do projeto usando o NPM, use o comando build
, que irá transpilar todo o Typescript em Javascript na pasta dist
.
npm run build
ou yarn build
> middleware@1.0.0 build
> tsc
A build também pode ser feita pelo Docker, usando o Dockerfile
do projeto.
docker build -t middleware .
Sending build context to Docker daemon 1.279MB
Step 1/8 : FROM node:latest
---> 3d8ab8fd7e2a
Step 2/8 : WORKDIR /app
---> Using cache
---> b8ddfdfba832
Step 3/8 : COPY package*.json ./
---> Using cache
---> eb3b6c2ecba7
Step 4/8 : RUN npm install
---> Using cache
---> 59a1ef1db111
Step 5/8 : COPY . .
---> c0e237f05603
Step 6/8 : RUN npm run build
---> Running in de1bc9c6d6d0
> middleware@1.0.0 build
> tsc
Removing intermediate container de1bc9c6d6d0
---> 6f6033ad79bd
Step 7/8 : EXPOSE 8000
---> Running in 665b46053292
Removing intermediate container 665b46053292
---> 178d3f972882
Step 8/8 : CMD ["node", "dist/index.js"]
---> Running in b021053cb154
Removing intermediate container b021053cb154
---> 85d99394e74b
Successfully built 85d99394e74b
Successfully tagged middleware:latest