Example #1
0
        public int ProductIdRequest(string cardName, string setName)
        {
            // Rate limit to be a good samaritan
            Thread.Sleep(200); // TODO: find a better way to do this without shutting down the thread

            setName = SanitizeSetName(setName);

            // when searching for products in the TCG Player API, it only accepts the name of the front face of double faced cards
            if (cardName.Contains("//"))
            {
                cardName = cardName.Split(new[] { "//" }, StringSplitOptions.RemoveEmptyEntries)[0].Trim();
            }

            var searchCriteria = new CategoryProductsSearchBody
            {
                Sort    = "name",
                Limit   = 5,
                Offset  = 0,
                Filters = new List <Filter>
                {
                    new Filter
                    {
                        Name   = Filter.FilterName.ProductName.ToString(),
                        Values = new List <string> {
                            cardName
                        }
                    },
                    new Filter
                    {
                        Name   = Filter.FilterName.SetName.ToString(),
                        Values = new List <string> {
                            setName
                        }
                    }
                }
            };

            var body       = JsonConvert.SerializeObject(searchCriteria);
            var jsonResult = Post(CategoryProductSearchUri, body, RequestBodyType.Json, ReadAccessToken());

            return(JsonConvert.DeserializeObject <CategoryProductsResult>(jsonResult).Results.OrderBy(i => i).FirstOrDefault());
        }
        public int ProductIdRequest(string cardName, string setName)
        {
            setName = SanitizeSetName(setName);

            using (var db = new FortyLifeDbContext())
            {
                if (db.CardProductIds.Any(i => i.CardName == cardName && i.SetName == setName))
                {
                    return(db.CardProductIds.First(i => i.CardName == cardName && i.SetName == setName).ProductId);
                }

                // Rate limit to be a good samaritan
                Thread.Sleep(200); // TODO: find a better way to do this without shutting down the thread

                // when searching for products in the TCG Player API, it only accepts the name of the front face of double faced cards
                if (cardName.Contains("//"))
                {
                    cardName = cardName.Split(new[] { "//" }, StringSplitOptions.RemoveEmptyEntries)[0].Trim();
                }

                var searchCriteria = new CategoryProductsSearchBody
                {
                    Sort    = "name",
                    Limit   = 5,
                    Offset  = 0,
                    Filters = new List <Filter>
                    {
                        new Filter
                        {
                            Name   = Filter.FilterName.ProductName.ToString(),
                            Values = new List <string> {
                                cardName
                            }
                        }
                    }
                };

                //if (!string.IsNullOrEmpty(setName))
                //{
                //    searchCriteria.Filters.Add(new Filter
                //    {
                //        Name = Filter.FilterName.SetName.ToString(),
                //        Values = new List<string> {setName}
                //    });
                //}

                var body       = JsonConvert.SerializeObject(searchCriteria);
                var jsonResult = Post(categoryProductSearchUri, body, RequestBodyType.Json, ReadAccessToken());

                if (!string.IsNullOrEmpty(jsonResult))
                {
                    var productIdResult = JsonConvert.DeserializeObject <CategoryProductsResult>(jsonResult).Results
                                          .OrderBy(i => i).FirstOrDefault();

                    if (productIdResult > 0)
                    {
                        var newProductId = new CardProductId
                        {
                            CardName  = cardName,
                            SetName   = setName,
                            ProductId = productIdResult
                        };

                        db.CardProductIds.AddOrUpdate(newProductId);
                        db.SaveChanges();

                        return(productIdResult);
                    }
                }

                return(0);
            }
        }