Exemplo n.º 1
0
 public ExtendedPsaCard(PsaCard card)
 {
     CardNumber         = card.CardNumber;
     CurrentPop10       = card.CurrentPop10;
     CurrentTotalGraded = card.CurrentTotalGraded;
     Id            = card.Id;
     NamePrimary   = card.NamePrimary;
     NameSecondary = card.NameSecondary;
     SetId         = card.SetId;
 }
Exemplo n.º 2
0
        public async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            int setId = -1;

            try
            {
                var    queryString = req.GetQueryParameterDictionary();
                string setIdKey    = "setId";
                if (!queryString.ContainsKey(setIdKey) || !int.TryParse(queryString[setIdKey], out setId))
                {
                    return(new BadRequestResult());
                }

                log.LogInformation("PsaScan Started");

                var web    = new HtmlWeb();
                var psaSet = _context.PsaSet.FirstOrDefault(x => x.Id == setId);

                if (psaSet != null)
                {
                    var doc = web.Load($"https://www.psacard.com/Pop/GetItemTable?categoryID={psaSet.CategoryId}&headingID={psaSet.HeadingId}");

                    var ths = doc.DocumentNode.Descendants("TH").ToList();

                    var psaCards        = new List <PsaCard>();
                    var psaPopHistories = new List <PsaPopHistory>();

                    try
                    {
                        int cardNumber = FindColumnIndex(ths, "CARD NO.");
                        int name       = FindColumnIndex(ths, "NAME");
                        int auth       = FindColumnIndex(ths, "AUTH");
                        int pop01      = FindColumnIndex(ths, "1");
                        int pop02      = FindColumnIndex(ths, "2");
                        int pop03      = FindColumnIndex(ths, "3");
                        int pop04      = FindColumnIndex(ths, "4");
                        int pop05      = FindColumnIndex(ths, "5");
                        int pop06      = FindColumnIndex(ths, "6");
                        int pop07      = FindColumnIndex(ths, "7");
                        int pop08      = FindColumnIndex(ths, "8");
                        int pop085     = FindColumnIndex(ths, "8.5", false);
                        int pop09      = FindColumnIndex(ths, "9");
                        int pop095     = FindColumnIndex(ths, "9.5", false);
                        int pop10      = FindColumnIndex(ths, "10");

                        var trs = doc.DocumentNode.Descendants("TR").ToList();

                        foreach (var tr in trs)
                        {
                            var tds = tr.Descendants("TD").ToList();

                            if (!tds.Any() || string.IsNullOrWhiteSpace(tds[cardNumber].InnerText))
                            {
                                continue;
                            }

                            var names = tds[name]
                                        .Descendants()
                                        .Where(x =>
                                               x.Name.Equals("#text") &&
                                               !string.IsNullOrWhiteSpace(x.InnerText.Trim()) &&
                                               !x.InnerText.Trim().Equals(@"Shop", StringComparison.OrdinalIgnoreCase)
                                               ).Select(x => x.InnerText.Trim());

                            PsaCard card = new PsaCard
                            {
                                CardNumber    = tds[cardNumber].InnerText.Trim(),
                                NamePrimary   = names.ElementAtOrDefault(0),
                                NameSecondary = names.ElementAtOrDefault(1),
                                SetId         = psaSet.Id
                            };

                            var cardMatch = _context.PsaCard.FirstOrDefault(x =>
                                                                            x.CardNumber == card.CardNumber &&
                                                                            x.NamePrimary == card.NamePrimary &&
                                                                            x.NameSecondary == card.NameSecondary &&
                                                                            x.SetId == card.SetId);

                            if (cardMatch == null)
                            {
                                _context.PsaCard.Add(card);
                                _context.SaveChanges();
                                cardMatch = card;
                            }

                            var psaPopHistory = new PsaPopHistory
                            {
                                CardId  = cardMatch == null ? card.Id : cardMatch.Id,
                                PopAuth = FindPopulation(tds, auth),
                                Pop01   = FindPopulation(tds, pop01),
                                Pop02   = FindPopulation(tds, pop02),
                                Pop03   = FindPopulation(tds, pop03),
                                Pop04   = FindPopulation(tds, pop04),
                                Pop05   = FindPopulation(tds, pop05),
                                Pop06   = FindPopulation(tds, pop06),
                                Pop07   = FindPopulation(tds, pop07),
                                Pop08   = FindPopulation(tds, pop08),
                                Pop085  = FindPopulation(tds, pop085),
                                Pop09   = FindPopulation(tds, pop09),
                                Pop095  = FindPopulation(tds, pop095),
                                Pop10   = FindPopulation(tds, pop10)
                            };

                            psaPopHistories.Add(psaPopHistory);

                            cardMatch.CurrentPop10       = psaPopHistory.Pop10 ?? 0;
                            cardMatch.CurrentTotalGraded =
                                (psaPopHistory.PopAuth ?? 0) +
                                (psaPopHistory.Pop01 ?? 0) +
                                (psaPopHistory.Pop02 ?? 0) +
                                (psaPopHistory.Pop03 ?? 0) +
                                (psaPopHistory.Pop04 ?? 0) +
                                (psaPopHistory.Pop05 ?? 0) +
                                (psaPopHistory.Pop06 ?? 0) +
                                (psaPopHistory.Pop07 ?? 0) +
                                (psaPopHistory.Pop08 ?? 0) +
                                (psaPopHistory.Pop09 ?? 0) +
                                (psaPopHistory.Pop10 ?? 0);

                            psaCards.Add(cardMatch);
                        }
                    }
                    catch (Exception ex)
                    {
                        log.LogError($"[{psaSet.CategoryId}] [{psaSet.HeadingId}] " + ex.Message);
                        throw;
                    }

                    _context.PsaCard.UpdateRange(psaCards);
                    _context.PsaPopHistoryFunction.AddRange(psaPopHistories);
                    _context.SaveChanges();
                }

                log.LogInformation("PsaScan Ended");
                return(new OkObjectResult($"Ran with setId: {setId}"));
            }
            catch (Exception ex)
            {
                log.LogError(ex, $"PsaScan Caught Exception with setId: {setId}");
                return(new StatusCodeResult((int)HttpStatusCode.InternalServerError));
            }
        }