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