MartinpcDev /
ONE_Challenge_ConversorMonedas
Challenge de la ruta Backend ONE , un conversor de monedas hecho en java mediante el consumo de la API Exchange Rate
30/100 healthLoading repository data…
DessimA / repository
O Conversor de Moedas é uma aplicação Java console que permite converter valores entre 15 moedas diferentes e 10 criptomoedas, usando taxas de câmbio em tempo real., aplicação oferece histórico de conversões, logs detalhados e estatísticas de uso.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
O Conversor de Moedas é uma aplicação Java console que permite converter valores entre 15 moedas diferentes e diversas criptomoedas, usando taxas de câmbio em tempo real. A aplicação oferece histórico de conversões, logs detalhados e estatísticas de uso.
flowchart TD
A[Início da Aplicação] --> B[MenuPrincipal.main]
B --> C[Inicializa Dependências]
C --> C1[Historico, ApiConfig, ApiTaxaCambioService]
C1 --> C2[ConversorMoedas, InterfaceConversao, Estatisticas]
C2 --> D[Cria Instância de MenuPrincipal com DI]
D --> E[MenuPrincipal.executar]
E --> F{Loop Principal do Menu}
F --> G[ConsoleUtils.clearScreen]
G --> H[MenuPrincipal.exibirMenu]
H --> I[Usuário seleciona opção]
I --> J{Opção Selecionada}
J -->|1: Converter Moeda| K[InterfaceConversao.realizarConversao]
J -->|2: Ver Histórico| L[InterfaceConversao.exibirHistorico]
J -->|3: Limpar Histórico| M[InterfaceConversao.limparHistorico]
J -->|4: Ver Taxas| N[MenuPrincipal.verTaxasDisponiveis]
J -->|5: Ver Estatísticas| O[Estatisticas.exibirEstatisticas]
J -->|6: Selecionar API| P[MenuPrincipal.selecionarApi]
J -->|7: Cripto para Moeda| Q[InterfaceConversao.realizarConversaoCripto]
J -->|8: Cripto para Criptomoeda| R[InterfaceConversao.realizarConversaoCriptoParaCripto]
J -->|9: Sair| S[Salva estado e encerra]
K --> K1[InterfaceConversao.realizarConversaoGenerica]
K1 --> K2[Exibe menus de seleção de moeda/cripto]
K2 --> K3[InterfaceConversao.selecionarMoeda/Cripto]
K3 --> K4[InterfaceConversao.solicitarValor]
K4 --> K5[ConversorMoedas.converter]
K5 --> K6[ApiTaxaCambioService.obterTaxaCambio]
K6 --> K7{Tenta API Primária}
K7 -->|Sucesso| K8[Retorna Taxa]
K7 -->|Falha| K9{Tenta API Fallback}
K9 -->|Sucesso| K8
K9 -->|Falha| K10[Lança Exceção]
K8 --> K11[Calcula Resultado]
K11 --> K12[HistoricoConversao.adicionarConversao]
K12 --> K13[LoggerUtil.log]
K13 --> K14[Exibe Resultado]
K14 --> K15{Deseja continuar?}
K15 -->|Sim| K1
K15 -->|Não| F
L --> L1[HistoricoConversao.getConversoes]
L1 --> L2[Exibe histórico formatado]
L2 --> L3{Exportar para TXT?}
L3 -->|Sim| L4[Exporta arquivo]
L3 -->|Não| F
L4 --> F
M --> M1{Confirma limpeza?}
M1 -->|Sim| M2[HistoricoConversao.limparHistorico]
M1 -->|Não| F
M2 --> F
N --> N1[Exibe taxas disponíveis]
N1 --> F
O --> O1[Calcula e exibe estatísticas]
O1 --> F
P --> P1[Atualiza API preferencial]
P1 --> P2[MenuPrincipal.inicializarServicos]
P2 --> F
Q --> Q1[Fluxo similar a K]
Q1 --> F
R --> R1[Fluxo similar a K]
R1 --> F
S --> Z[Fim da Aplicação]
sequenceDiagram
participant U as Usuário
participant M as MenuPrincipal
participant IC as InterfaceConversao
participant CM as ConversorMoedas
participant ATS as ApiTaxaCambioService
participant API as API Externa
participant H as HistoricoConversao
participant L as Logger
U->>M: Iniciar Aplicação
M->>M: Inicializar Serviços
M->>U: Exibir Menu Principal
U->>M: Seleciona opção Converter (1)
M->>IC: realizarConversao(scanner, conversorMoedas)
IC->>IC: exibirMenuSelecaoMoeda()
IC->>U: Solicita moeda origem
U->>IC: Informa USD
IC->>IC: selecionarMoeda(scanner, "Selecione a moeda de origem: ")
IC->>IC: exibirMenuSelecaoMoeda()
IC->>U: Solicita moeda destino
U->>IC: Informa BRL
IC->>IC: selecionarMoeda(scanner, "Selecione a moeda de destino: ")
IC->>IC: solicitarValor(scanner)
IC->>U: Solicita valor
U->>IC: Informa 100.00
IC->>CM: converter(100, USD, BRL)
CM->>ATS: obterTaxaCambio(USD, BRL)
alt Taxa em Cache
ATS->>ATS: Buscar no cache
ATS->>CM: Retorna taxa cached
else Cache expirado/inexistente
ATS->>ATS: Tentar API Primária
ATS->>API: Requisição HTTP
API-->>ATS: Resposta JSON
ATS->>ATS: Parsear JSON
ATS->>ATS: Armazenar em cache
ATS->>CM: Retorna taxa
end
CM->>CM: Calcular conversão
CM->>H: adicionarConversao(resultado)
CM->>L: Registrar log
CM-->>IC: Retorna resultado
IC->>U: Exibe: 100 USD = 495 BRL
IC->>U: Deseja fazer outra conversão? (s/n)
U->>IC: Informa 'n'
IC-->>M: Retorna
M->>U: Exibir Menu Principal
classDiagram
class Main {
+main(String[] args)
}
class MenuPrincipal {
-Scanner scanner
-ConversorMoedas conversorMoedas
-HistoricoConversao historicoConversao
-InterfaceConversao interfaceConversao
-Estatisticas estatisticas
-ApiProvider preferredApi
+MenuPrincipal(ConversorMoedas, HistoricoConversao, InterfaceConversao, Estatisticas)
+exibirMenu()
+executar()
-inicializarServicos()
-selecionarApi()
-realizarConversao()
-verHistorico()
-limparHistorico()
-verTaxasDisponiveis()
-verEstatisticas()
-realizarConversaoCripto()
-realizarConversaoCriptoParaCripto()
}
class Moeda {
<<enumeration>>
+codigo: String
+nomeCompleto: String
+simbolo: String
+tipo: MoedaType
+isCrypto(): boolean
+isFiat(): boolean
+fromCodigo(String): Moeda
}
class MoedaType {
<<enumeration>>
FIAT
CRYPTO
}
class TaxaCambio {
+origem: Moeda
+destino: Moeda
+taxa: double
+timestamp: LocalDateTime
}
class ConversaoResultado {
+valorOriginal: double
+moedaOrigem: Moeda
+valorConvertido: double
+moedaDestino: Moeda
+taxaUtilizada: double
+dataHora: LocalDateTime
}
class ConversorMoedas {
-ApiTaxaCambio apiTaxaCambio
-HistoricoConversao historicoConversao
+converter(double, Moeda, Moeda): ConversaoResultado
}
class ApiTaxaCambio {
<<interface>>
+obterTaxaCambio(Moeda, Moeda) TaxaCambio
}
class ApiTaxaCambioService {
-ApiTaxaCambio primaryApi
-ApiTaxaCambio fallbackApi
-ApiTaxaCambio coinGeckoApi
-Map~String,TaxaCambio~ cacheTaxas
+ApiTaxaCambioService(ApiConfig, ApiProvider)
+obterTaxaCambio(Moeda, Moeda): TaxaCambio
-obterTaxaCambioCripto(Moeda, Moeda): TaxaCambio
-isCacheValid(TaxaCambio): boolean
+limparCacheExpirado()
}
class ApiProvider {
<<enumeration>>
EXCHANGERATE_API
OPENEXCHANGERATES
+getName(): String
+fromString(String): ApiProvider
}
class ApiTaxaCambioFactory {
+getApiImplementation(ApiProvider, ApiConfig): ApiTaxaCambio
}
class ExchangeRateApiImpl {
-HttpClient client
-ApiConfig apiConfig
-JsonParser jsonParser
+ExchangeRateApiImpl(ApiConfig)
+obterTaxaCambio(Moeda, Moeda): TaxaCambio
}
class OpenExchangeRatesApiImpl {
-HttpClient client
-Gson gson
-String appId
+OpenExchangeRatesApiImpl(String)
+obterTaxaCambio(Moeda, Moeda): TaxaCambio
-parseOpenExchangeRatesResponse(String, Moeda, Moeda): double
}
class CoinGeckoApiImpl {
-HttpClient client
-Gson gson
-String apiKey
+CoinGeckoApiImpl(String)
+obterTaxaCambio(Moeda, Moeda): TaxaCambio
-parseCoinGeckoResponse(String, Moeda, Moeda): double
}
class HistoricoConversao {
-Gson gson
-List~ConversaoResultado~ conversoes
+HistoricoConversao()
+adicionarConversao(ConversaoResultado)
+getUltimasConversoes(int): List~ConversaoResultado~
+limparHistorico()
+estaVazio(): boolean
+salvarEmArquivo()
-carregarDeArquivo()
}
class Estatisticas {
-HistoricoConversao historicoConversao
+Estatisticas(HistoricoConversao)
+exibirEstatisticas()
-getTotalConversoes(List~ConversaoResultado~): int
-getMoedaMaisConvertida(List~ConversaoResultado~): Moeda
-getValorTotalConvertidoPorMoeda(List~ConversaoResultado~): Map~Moeda,Double~
-getMediaValoresConvertidos(List~ConversaoResultado~): double
-gerarGraficoFrequenciaMoedas(List~ConversaoResultado~)
}
class InterfaceConversao {
-Logger logger
+exibirMenuSelecaoMoeda()
+exibirMenuSelecaoCripto()
-selecionarMoedaGenerica(Scanner, String, Predicate~Moeda~): Moeda
+selecionarCripto(Scanner, String): Moeda
+selecionarMoeda(Scanner, String): Moeda
+solicitarValor(Scanner): double
-perguntarContinuarConversao(Scanner): boolean
-realizarConversaoGenerica(Scanner, ConversorMoedas, Runnable, Function~Scanner,Moeda~, Runnable, Function~Scanner,Moeda~)
+realizarConversao(Scanner, ConversorMoedas)
+realizarConversaoCripto(Scanner, ConversorMoedas)
+realizarConversaoCriptoParaCripto(Scanner, ConversorMoedas)
+exibirHistorico(Scanner, HistoricoConversao)
+limparHistorico(Scanner, HistoricoConversao)
-exportarHistoricoParaTxt(List~ConversaoResultado~)
}
class ApiConfig {
-static ApiConfig instance
-apiKey: String
-openExchangeRatesAppId: String
-coinGeckoApiKey: String
-BASE_URL: String
-COINGECKO_BASE_URL: String
+getInstance(): ApiConfig
-loadApiKey()
+buildPairConversionUrl(String, String): String
+buildCoinGeckoSimplePriceUrl(String, String): String
}
class JsonParser {
-Gson gson
+JsonParser(Gs
Selected from shared topics, language and repository description—not editorial ratings.
MartinpcDev /
Challenge de la ruta Backend ONE , un conversor de monedas hecho en java mediante el consumo de la API Exchange Rate
30/100 healthamandaamanai /
Projeto conversor de moedas em java utilizando ExchangeRate-API e a biblioteca google Gson em representação JSON.
27/100 healthjvcbrandao /
Desenvolvido em Java, permite converter valores entre o Real, Dólar Americano, Peso Argentino e Dólar Australiano. Utilizando uma API de câmbio em tempo real, o programa realiza as conversões com taxas atualizadas automaticamente, oferecendo uma interface de console interativa e geração de logs para controle das operações realizadas.
alicessena /
Projeto em Java que converte moedas via console em tempo real usando a ExchangeRate API. Interface simples, múltiplas conversões e uso de HttpClient e Gson. Feito para o Oracle ONE.
38/100 healthAgustinRueda06 /
Conversor de monedas en Java que consume una API pública para obtener tasas de cambio en tiempo real, procesa JSON con Gson y permite convertir montos desde USD a varias monedas populares mediante una interfaz de consola simple e interactiva.
34/100 healthsamirasfonseca /
💱 Aplicativo de **Conversão de Moedas** desenvolvido em **Java**, que realiza conversões em tempo real entre diferentes moedas utilizando a **API ExchangeRate**. O projeto usa **HTTP Client** e **Gson** para tratar dados JSON, sendo uma ótima prática para quem deseja aprender integração com APIs e manipulação de dados externos.
34/100 health