Skip to content

viniciusnuunes/challenge-bravo

 
 

Repository files navigation

Hurb Bravo Challenge - Currency Converter API

Tecnologias utilizadas

  • NodeJS - 14.20.1
  • Express
  • Mongoose
  • Axios
  • Swagger
  • Jest
  • MongoDB - latest
  • Docker - 20.10.21
  • Docker Compose - 2.12.2
  • Redis

Não foi utilizado nenhum framework de boilerplate, a API foi escrita do 0 utilizando npm init

Como rodar o projeto

É necessário ter instalado as seguintes ferramentas

Tool Version
Docker 20.10.21
Docker Compose 2.12.2

Para instalar as dependências, subir o docker e iniciar o projeto, basta o único comando abaixo

docker compose up --build

O projeto estará rodando em:

localhost:3000

E a documentação da API está disponível em:

localhost:3000/api-docs

Utilizando a API

A API foi desenvolvida para realizar conversões entre as seguintes moedas

  • BRL
  • USD
  • EUR
  • BTC
  • ETH

E tendo como base o USD para realizar as conversões. Todas elas podem ser convertidas entre si.

Você também pode adicionar novas moedas para serem convertidas dentre as demais. Atente-se que ao cadastrar uma nova moeda, você deve informar o valor dela com base em USD

Nela você consegue

  • Fazer a Conversão
  • Cadastrar
  • Listar
  • Atualizar
  • Remover

Teste de Carga

Executando

Para os testes de carga da API, foi utilizada a ferramenta Artillery. Caso deseje realizar este teste na sua maquina, é necessário instalar a ferramenta de forma global

npm i -g artillery

Em seguida, execute o comando (na raiz do projeto)

artillery run convert-currency.yml

É necessário que a API esteja em execução

Você pode abrir o arquivo convert-currency.yml e alterar as propriedades do teste, que são:

  • duration - duração do teste em ms
  • arrivalRate - quantidade de requisições simuladas por segundo

Resultados

Foram realizados dois testes, numa máquina Linux com Ubuntu e um Windows 11

Abaixo é o resultado rodando no Ubuntu com as seguintes especificações

  • Ubuntu 20.04.5 LT
  • Intel Core i7 10610U 1.8Ghz 8x
  • 16GB RAM

Ubuntu

Abaixo é o resultado rodando no Windows 11 com as seguintes especificações

  • Windows 11
  • Intel Core i5-8250U CPU @ 1.60GHz - 1.80 GHz
  • 8GB RAM

Ubuntu

Conclusão dos testes

Conclui-se que a API estando deployada num bom servidor Linux (ElasticBeanstalk), suporta até mais que 1000 requisições por segundo.

Isso se da pela escolha de manter os dados das cotações em cache com o Redis

Testes unitários

Foi utilizado jest para fazer a cobertura de testes unitários. Para executar os testes, rode o comando baixo

npm run test

Considerações finais

Melhorias
  • Inserir api_key/autenticação nas requisições para que não sejam feitas por qualquer pessoa (falha de segurança atual)
  • Deployar a API num EBS com a utilização do CI/CD
  • Utilizar cloudwatch com Lambda para realizar as atualizações da cotação periodicamente

About

Backend code challenge

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 97.5%
  • Dockerfile 2.5%