static async Task Main(string[] args) { var updateCurencies = args.SingleOrDefault(a => a == "-u"); var context = new RatesContextFactory().CreateDbContext(args); var api = new FixerClient(new HttpClient()); if (updateCurencies is not null) { var symbolsResponse = await api.GetSymbols(); if (!symbolsResponse.Success) { Console.WriteLine(symbolsResponse.Error.Info); return; } await UpdateCurrencies(context, symbolsResponse.Content.Symbols); Console.WriteLine("Updated symbols"); } var response = await api.GetLatest(); if (!response.Success) { Console.WriteLine(response.Error.Info); return; } Console.WriteLine("Got latest rates"); var currencies = await context.Currencies.ToListAsync(); var rates = response.Content.Rates.Select(r => new Rate { Currency = currencies.SingleOrDefault(c => c.Symbol == r.Key) ?? new Currency { Symbol = r.Key }, Date = response.Content.Date, Timestamp = response.Content.Timestamp, Value = r.Value }); context.AddRange(rates); await context.SaveChangesAsync(); Console.WriteLine(rates.Count() + " rates saved"); }
static async Task Main(string[] args) { if (args.Length != 3) { Console.WriteLine("Argument(s) missing (currency from, currency to, amount)"); return; } var currencyFrom = args[0]?.ToUpper(); var currencyTo = args[1]?.ToUpper(); decimal amount; try { amount = Convert.ToDecimal(args[2]); } catch (Exception e) { Console.WriteLine("Could not parse amount: " + e.Message); return; } using var api = new FixerClient(new HttpClient()); var response = await api.GetLatest(currencyFrom, currencyTo); if (!response.Success) { Console.WriteLine(response.Error.Info); return; } var latest = response.Content; if (latest.Rates.Count != 2) { Console.WriteLine("One or more symbols not valid"); return; } Console.WriteLine("Got latest rates"); var converter = new CurrencyConverter(latest.Rates); var convertedAmount = converter.Convert(currencyFrom, currencyTo, amount); Console.WriteLine($"{amount:0.00} {currencyFrom} is {convertedAmount:0.00} {currencyTo}"); }
static async Task Main(string[] args) { Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; if (args.Length < 3) { Console.WriteLine("Argument(s) missing (currency from, currency to, amount)"); return; } var currencyFrom = args[0]?.ToUpper(); var currencyTo = args[1]?.ToUpper(); decimal amount; DateTime?date = null; try { amount = Convert.ToDecimal(args[2]); if (args.Length == 4) { date = Convert.ToDateTime(args[3]); } } catch (Exception e) { Console.WriteLine(e.Message); return; } using var api = new FixerClient(new HttpClient()); FixerResponse <RatesResponse> response; if (date is not null) { response = await api.GetHistorical((DateTime)date, currencyFrom, currencyTo); } else { response = await api.GetLatest(currencyFrom, currencyTo); } if (!response.Success) { Console.WriteLine(response.Error.Info); return; } if (response.Content.Rates.Count != 2) { Console.WriteLine("One or more currency symbols not valid"); return; } if (date is not null) { Console.WriteLine($"Got rates from {(DateTime)date:yyyy-MM-dd}"); } else { Console.WriteLine("Got latest rates"); } var converter = new CurrencyConverter(response.Content.Rates); var convertedAmount = converter.Convert(currencyFrom, currencyTo, amount); Console.WriteLine($"{amount:0.00} {currencyFrom} {(date.HasValue ? "was" : "is")} {convertedAmount:0.00} {currencyTo}"); }