示例#1
0
        static async Task Main(string[] args)
        {
            var context = new RatesContextFactory().CreateDbContext(ConnectionString);

            var fromRates = await context.ActualRates
                            .Select(x => x.CurrencyFrom)
                            .Distinct()
                            .ToArrayAsync();

            var toRates = await context.ActualRates
                          .Select(x => x.CurrencyTo)
                          .Distinct()
                          .ToArrayAsync();

            var requestMaker = new RequestsMaker(fromRates, toRates);

            var generator = new PhantomAmmoGeneratorBuilder()
                            .AddSources(requestMaker.MakeGets())
                            .Build();

            using (var file = File.CreateText(GetFilePath()))
            {
                for (int i = 0; i < RequestsCount; i++)
                {
                    file.Write(generator.GetNext());
                }
            }

            Console.WriteLine($"Get:{requestMaker.GetCount}");
        }
        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");
        }