/// <inheritdoc />
        public async Task Invoke(PerformContext context)
        {
            context.WriteLine($"> Fetching page {SimpleRewardsTableUrl}");
            var document = await _fetcher.GetPage(SimpleRewardsTableUrl);

            context.WriteLine($"< Fetched page");

            context.WriteLine($"> Searching for table element and its rows");
            var table    = _finder.GetTableOfSimpleRewardsTable(document);
            var rows     = _finder.GetRowOfSimpleRewardsTable(table).ToArray();
            var rowCount = rows.Length;

            context.WriteLine($"< Found {rowCount} rows");

            context.WriteLine($"> Start parsing rows");
            var primeItems  = new Dictionary <int, PrimeItem>();
            var progressBar = context.WriteProgressBar();
            var count       = 0;

            foreach (var row in rows)
            {
                var rowData = _parser.ParseRowOfSimpleRewardsTable(row);
                if (rowData == null)
                {
                    continue;
                }
                var primeItem = await _persister.AddOrUpdateRowData(rowData);

                primeItems.TryAdd(primeItem.Id, primeItem);
                count++;
                progressBar.SetValue(100 * count / rowCount);
            }

            progressBar.SetValue(100);
            var primeItemsCount = primeItems.Count;

            context.WriteLine($"< Parsed all rows and found {primeItemsCount} prime items");

            context.WriteLine($"> Saving data");
            int rowsChanged = 0;
            int retriesLeft = 3;
            var errors      = new List <Exception>(retriesLeft);

            while (retriesLeft > 0)
            {
                try {
                    rowsChanged = await _context.SaveChangesAsync();
                }
                catch (Exception ex) {
                    retriesLeft--;
                    errors.Add(ex);
                    context.SetTextColor(ConsoleTextColor.Red);
                    context.WriteLine("An error occured while trying to save");
                    context.WriteLine(ex);
                    context.WriteLine("Retries left: " + retriesLeft);
                    context.ResetTextColor();
                    continue;
                }
                break;
            }
            if (retriesLeft == 0)
            {
                throw new AggregateException(errors);
            }
            context.WriteLine($"< Data saved: {rowsChanged} rows changed");
        }