From a20756c0fff6429002660e94eda2e7ceb3ee991a Mon Sep 17 00:00:00 2001 From: Savely Krendelhoff Date: Sat, 6 Sep 2025 16:47:03 +0700 Subject: [PATCH] Add executable --- cmd/converter/main.go | 52 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 cmd/converter/main.go diff --git a/cmd/converter/main.go b/cmd/converter/main.go new file mode 100644 index 0000000..2ea627e --- /dev/null +++ b/cmd/converter/main.go @@ -0,0 +1,52 @@ +package main + +import ( + "converter/app" + "converter/domain" + "converter/infrastructure/coinmarketcap" + "fmt" + "os" +) + +const ( + expectedArgs = 4 // program name + 3 arguments + apiKeyEnvVar = "CMC_API_KEY" +) + +func main() { + // Check command line arguments + if len(os.Args) != expectedArgs { + fmt.Fprintf(os.Stderr, "Usage: %s \n", os.Args[0]) + fmt.Fprintf(os.Stderr, "Example: %s 100.50 USD BTC\n", os.Args[0]) + os.Exit(1) + } + + // Parse arguments + amount := os.Args[1] + fromCurrency := os.Args[2] + toCurrency := os.Args[3] + + // Get API key from environment + apiKey := os.Getenv(apiKeyEnvVar) + if apiKey == "" { + fmt.Fprintf(os.Stderr, "Error: %s environment variable is required\n", apiKeyEnvVar) + fmt.Fprintf(os.Stderr, "Please set your CoinMarketCap API key:\n") + fmt.Fprintf(os.Stderr, "export %s=your_api_key_here\n", apiKeyEnvVar) + os.Exit(1) + } + + // Initialize dependencies + client := coinmarketcap.NewClient(apiKey) + converter := domain.NewCurrencyConverter() + useCase := app.NewConvertCurrencyUseCase(client, converter) + + // Execute conversion + result, err := useCase.Execute(amount, fromCurrency, toCurrency) + if err != nil { + fmt.Fprintf(os.Stderr, "Error: %v\n", err) + os.Exit(1) + } + + // Output result + fmt.Printf("%s %s\n", result.Amount.StringFixed(8), result.Currency.Code) +} \ No newline at end of file