Recrutadora: Paloma Andrade
Cadidato: Iury Dias
Contato: iiurydias@hotmail.com
api: Responsável por receber requisições para adição, remoção e converção de moedas. Chamadas de adição e remoção são encaminhadas para o serviço atualizador de cotações através de serviços gRPC, além de realizar conversões através de valores resgatados em cache.
currency-rate-updater: Microsserviço responsável por servir funções de adicionar e remover moedas suportadas através de gRPC e guardar/atualizar cotações das moedas suportadas em cache.
redis: Serviço de cache responsável por manter valores de cotação das moedas suportadas.
Após clonar o projeto em sua máquina e com os requisitos já instalados, executar o seguinte comando:
docker-compose up
Isso subirá o serviço de API na porta 3500
.
Obs: Configurações de host, porta, acesso ao cache de cada serviço são configuráveis através dos arquivos config.json dentro dos respectivos repositórios dentro do projeto. Moedas iniciais suportadas da aplicação também são configuradas da mesma forma, as requisitadas pelo desafio já se encontram no arquivo.
GET /currency
Requisição
Parâmetros (Via Query)
-
From: Código da moeda inicial
-
To: Código da moeda a ser convertida
-
Amount: Quantidade a ser convertida
Exemplo:
curl -XGET 'localhost:3500/currency?from=USD&to=BRL&amount=1'
- Success 201
{
"status": "success",
"data": {
"from": "USD",
"to": "BRL",
"amount": 1,
"result": 5.22
}
}
- Fail 400
{
"status": "fail",
"data": {
"from": "from currency not found"
}
}
POST /currency
Requisição
Parâmetros (application/json)
- Code: Código da moeda
curl -XPOST -H "Content-type: application/json" -d '{"code":"CAD"}' 'localhost:3500/currency'
- Success 201
{
"status": "success",
"data": {
"code": "CAD"
}
}
- Fail 400
{
"status": "fail",
"data": {
"code": "code has a invalid type"
}
}
DELETE /currency/:code
Requisição
Parâmetros (Via URI)
- Code: Código da moeda
curl -XDELETE 'localhost:3500/currency/CAD'
-
Success 204
-
Fail 404
{
"status": "fail",
"data": {
"code": "code not found"
}
}
Obs¹: Códigos das moedas seguem o padrão da ISO4217.
Obs²: A nível de teste, está disponível um arquivo na raiz do projeto chamado make_test_requests.sh que realiza requisições para os três endpoints via terminal, é necessário o curl instalado na máquina.
Requisitos
- Golang 1.15
É necessário entrar no respositório de cada serviço e executar o comando:
make run-tests
api
ok github.com/iiurydias/challenge-bravo/api/application 1.613s coverage: 58.8% of statements
ok github.com/iiurydias/challenge-bravo/api/application/client 0.070s coverage: 92.9% of statements
? github.com/iiurydias/challenge-bravo/api/application/client/currency [no test files]
ok github.com/iiurydias/challenge-bravo/api/application/controller 0.039s coverage: 100.0% of statements
ok github.com/iiurydias/challenge-bravo/api/application/handlers 0.089s coverage: 94.4% of statements
currency-rate-updater
? github.com/iiurydias/challenge-bravo/currency-rate-updater [no test files]
ok github.com/iiurydias/challenge-bravo/currency-rate-updater/cache 0.049s coverage: 100.0% of statements
ok github.com/iiurydias/challenge-bravo/currency-rate-updater/service 3.395s coverage: 51.2% of statements
ok github.com/iiurydias/challenge-bravo/currency-rate-updater/service/controller 0.040s coverage: 100.0% of statements
ok github.com/iiurydias/challenge-bravo/currency-rate-updater/service/currency 0.072s coverage: 95.7% of statements
? github.com/iiurydias/challenge-bravo/currency-rate-updater/service/errors [no test files]
ok github.com/iiurydias/challenge-bravo/currency-rate-updater/service/server 0.047s coverage: 86.7% of statements
? github.com/iiurydias/challenge-bravo/currency-rate-updater/service/server/currency [no test files]
Testes de benchmark foram realizados com a ajuda do wrk, uma ferramenta para medição de performance de serviços web, onde foi obtido o seguinte resultado:
Resultando em 11.13k de requisições por segundo, parametrizado através de 400 conexões distribuídas em 12 threads durante 30 segundos.