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");
        }
Example #2
0
        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}");
        }
Example #3
0
        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}");
        }