Skip to content

thiagosena/sample-quarkus-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status

Quality Gate Status Code Smells Coverage Vulnerabilities

Currency Converter Latest release

É uma API que fornece a conversão entre as principais moedas do mercado mundial. As taxas de conversão são obtidas através da plataforma https://exchangeratesapi.io/, que conta com mais de 15 fontes de taxas de câmbio e está entregando dados para mais de 170 moedas mundiais.

Executando o projeto local

Pré Requisitos:

  • Git
  • JDK 11
  • Apache Maven
git clone git@github.com:thiagosena/currency-converter.git
cd currency-converter
mvn compile quarkus:dev

Após a compilação do projeto, basta acessar o endereço http://localhost:8080

Como utilizar a API

A API possui 4 endpoints:

Método Endpoint Descrição Exemplo
GET /api/v1/convert Faz a conversão de uma moeda pra outra
curl -X 'GET' \
  'https://currencyconverterapi.thiagosena.com/api/v1/convert?source=EUR&target=BRL&user_id=1&value=5' \
  -H 'accept: application/json'
Retorno:
{
  "conversionRate": 6.13362,
  "dateTime": "2021-06-14T17:53:54.449717",
  "id": 1,
  "sourceCurrency": "EUR",
  "sourceValue": 5,
  "targetCurrency": "BRL",
  "targetValue": 30.6681,
  "userId": 1
}
GET /api/v1/transactions Lista todas as transações efetuadas por um usuário
curl -X 'GET' \
  'https://currencyconverterapi.thiagosena.com/api/v1/transaction?user_id=1' \
  -H 'accept: application/json'
Retorno:
[
  {
    "conversionRate": 6.193318,
    "dateTime": "2021-06-14T04:09:22.657742",
    "id": 1,
    "sourceCurrency": "EUR",
    "sourceValue": 1,
    "targetCurrency": "BRL",
    "userId": 1
  }
]
POST /api/v1/user Efetua o cadastro de um usuário
curl -X 'POST' \
  'https://currencyconverterapi.thiagosena.com/api/v1/user' \
  -H 'accept: */*' \
  -H 'Content-Type: application/json' \
  -d '{
  "name": "Felipe"
}'
Retorno:
{
  "id": 3,
  "name": "Felipe"
}
GET /api/v1/users Lista todos os usuários
curl -X 'GET' \
  'https://currencyconverterapi.thiagosena.com/api/v1/users' \
  -H 'accept: application/json'
Retorno:
[
  {
    "id": 1,
    "name": "Joao"
  },
  {
    "id": 2,
    "name": "Acheropita Nagazaki"
  }
]

Para visualizar a documentação completa da API, basta acessar o endereço https://currencyconverterapi.thiagosena.com/swagger-ui/

Swagger
Figura 1: Documentação da API com Swagger-UI

Foi implementado também um protótipo de interface simples utilizando o framework Vue.js com algumas bibliotecas. Para visualizar o exemplo basta acessar o endereço https://currencyconverterapi.thiagosena.com.

Project UI
Figura 2: Protótipo de interface utilizando a API de conversão do projeto

Recursos utilizados no projeto

A API foi desenvolvida utilizando a linguagem JAVA 11 e o framework Quarkus

Developer Joy
Figura 3: Developer Joy

Porque usar o Quarkus?

O Quarkus é um framework java open source desenvolvido pela Red Hat e lançado no final de 2018. Foi desenvolvido sob medida para o GraalVM e OpenJDK HotSpot, com a promessa de ter um startup muito rápido e pouco gasto de memória de footprint, sendo assim um framework ótimo para cloud (ex: k8s), microservices e também serverless.

Benchmark Quarkus
Figura 4: Benchmark do framework Quarkus

Na Figura 4, extraída do site https://www.openshift.com/blog/quarkus-is-here-for-your-java, é possível ver dados de tempo de inicialização e consumo de memória com um executável nativo ou utilizando a JDK.

Bibliotecas utilizadas

Lint e Cobertura de Testes

Jacoco
Figura 5: Tela inicial do JaCoCo com 100% de cobertura de testes

  • SonarCloud: Melhorar a qualidade e segurança do código.

SonarCloud
Figura 6: Tela inicial do projeto no SonarCloud

CI/CD

O processo de execução dos testes estão sendo realizados no github action com o SonarCloud. O code deploy foi implementado utilizando a infraestrutura da AWS. Para isso, se a build, junto com os testes e o SonarCloud forem executados com sucesso, o github action envia um trigger para o AWS Pipeline fazer a execução do deploy.

AWS Infrastructure
Figura 7: Arquitetura da infraestrutura para AWS ECS com AWS CodePipeline e Github Actions