예제 #1
0
 public JsonOrderProcessor(IOrderLoader orderLoader)
 {
     this.orderLoader = orderLoader;
 }
예제 #2
0
 public Shop()
 {
     _productLoader    = new ProductLoader(); //TODO replace with DI
     _orderLoader      = new OrderLoader();
     _receiptGenerator = new ReceiptGenerator();
 }
예제 #3
0
 public OrderProcessor(ILogger <OrderProcessor> logger, IOrderLoader orderLoader, IApiClient apiClient)
 {
     this.logger      = logger;
     this.orderLoader = orderLoader;
     this.apiClient   = apiClient;
 }
예제 #4
0
        static void Main(string[] args)
        {
            bool offline = false;

            for (int i = 0; i < args.Length; i++)
            {
                if (string.Compare(args[i], "-help", true) == 0)
                {
                    Console.WriteLine("Options:");
                    Console.WriteLine("\t-clean\tclear local cache");
                    Console.WriteLine("\t-help\tshow this message");
                    Console.WriteLine("\t-o\toffline mode (use cache only)");
                    return;
                }
                if (string.Compare(args[i], "-clean", true) == 0)
                {
                    new Cache().Clean();
                    return;
                }
                if (string.Compare(args[i], "-o", true) == 0)
                {
                    offline = true;
                }
            }

            Cache        cache  = new Cache();
            IOrderLoader loader = null;

            if (!offline)
            {
                string domain = Properties.Settings.Default.BaseDomain;

                Console.WriteLine("Searching cookies from Google Chrome...");
                System.Net.CookieContainer cookies = new Amz.Auth.CookiesChrome(domain);
                if (cookies.Count == 0)
                {
                    Console.WriteLine("Searching cookies from Mozilla Firefox...");
                    cookies = new Amz.Auth.CookiesFirefox(domain);
                }

                if (cookies.Count > 0)
                {
                    Console.WriteLine("Trying browser login credentials (" + cookies.Count + " cookies)...");
                    loader = new Scraper(cookies);
                }
                else
                {
                    Console.Error.WriteLine("Could not log in!");
                    Console.Error.WriteLine("Hint: use your browser to log in and choose \"remember me\" to get a re-useable auth cookie.");
                }
            }
            else
            {
                loader = cache;
            }

            if (loader != null)
            {
                try
                {
                    var    years = loader.LoadOverview(Properties.Settings.Default.StartUrl);
                    double total = 0.0;

                    foreach (var n in years)
                    {
                        Console.WriteLine("Loading " + n + "...");
                        var orders = loader.LoadYear(n, Properties.Settings.Default.HistoryUrlTemplate);
                        if (orders.Count != cache.Store(orders))
                        {
                            loader = cache;
                        }

                        double year_total = orders.Aggregate(0.0, (acc, o) => acc + o.Sum);
                        Console.WriteLine("\tTotal: " + year_total);
                        total += year_total;

                        #if DEBUG
                        if (n < DateTime.Now.Year)
                        {
                            break;
                        }
                        #endif
                    }

                    Console.WriteLine("Total: " + total);
                }
                catch (Exception exc)
                {
                    Console.Error.WriteLine(exc.Message);
                }
            }

            cache.Dispose();

#if DEBUG
            Console.WriteLine("Any key to exit.");
            Console.ReadKey();
#endif
        }