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"); }