static async Task <int> Main(string[] args) { if (args.Length != 2 || args[0] != FormatNames.Humpries && args[0] != FormatNames.Megacorp) { Console.WriteLine("Usage: SPL <Format> <pathToFile>"); Console.WriteLine($" Formats: {FormatNames.Humpries}, {FormatNames.Megacorp}"); return(-1); } if (!File.Exists(args[1])) { Console.WriteLine($"Error, could not find file {Path.GetFullPath(args[1])}"); return(-1); } var serviceProvider = ServiceCollectionFactory.CreateServiceCollection().BuildServiceProvider(); ISupplyPriceItemProvider itemProvider = null; if (args[0] == FormatNames.Humpries) { itemProvider = serviceProvider.GetRequiredService <HumpriesSupplyPriceItemProvider>(); } else { itemProvider = serviceProvider.GetRequiredService <MegacorpSupplyPriceItemProvider>(); } var writer = serviceProvider.GetRequiredService <SuppliesPriceListWriter>(); using (var fileStream = File.OpenRead(args[1])) { await writer.WriteSuppliesList(itemProvider, Console.Out, fileStream); } return(0); }
public async Task WriteSuppliesList(ISupplyPriceItemProvider itemProvider, TextWriter streamToWriteTo, Stream streamToReadFrom) { var items = await itemProvider.GetItemsFromFile(streamToReadFrom); foreach (var item in items) { //example output 7f3c48c4-f8b6-453f-b2fa-83ec31dfa85c, Bobcat to Dig LM of Strip Footing, $800.00 //All prices must be shown to the nearest cent in AUD based on the exchange rate. var price = item.Price; if (itemProvider.Currency == Currency.USD) { price = _currencyConverter.UsdToAud(price); } //todo: check requirements for culture output on currency here. streamToWriteTo.WriteLine($"{item.Id}, {item.ItemName}, {price:C2}"); } }