示例#1
0
        public SkuView Get(Guid id, string lang = "en-US")
        {
            var list = GetList(showInactive: true, lang: lang);

            SkuView skuView = (from item in list
                               where item.Guid == id
                               select item).FirstOrDefault();

            if (skuView == null)
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest);
            }

            return(skuView);
        }
示例#2
0
        static IEnumerable <SkuView> GenerateAllSkuViews(string lang)
        {
            using (DatabaseContext context = Util.CreateContext())
            {
                var allAccounts          = context.Database.SqlQuery <Account>(@"SELECT * FROM Accounts").ToList();
                var allSkus              = context.Database.SqlQuery <Sku>(@"SELECT * FROM Skus").ToList();
                var allManufacturers     = context.Database.SqlQuery <Manufacturer>(@"SELECT * FROM Manufacturers").ToList();
                var allProducts          = context.Database.SqlQuery <Product>(@"SELECT * FROM Products").ToList();
                var allCategories        = context.Database.SqlQuery <Category>(@"SELECT * FROM Categories").ToList();
                var allProductCategories = context.Database.SqlQuery <ProductCategory>(@"SELECT * FROM ProductCategories").ToList();
                var allOrders            = context.Database.SqlQuery <Order>(@"SELECT * FROM Orders").ToList();
                var allTrades            = context.Database.SqlQuery <Trade>(@"SELECT * FROM Trades").ToList();
                var allViewCounts        = context.ViewCounts.AsNoTracking().ToList();

                var baseUrl = WebConfigurationManager.AppSettings["BaseUrl"];
                var webUrl  = WebConfigurationManager.AppSettings["WebUrl"];

                var skuViews = allSkus.ConvertAll(sku =>
                {
                    var product         = allProducts.Find(p => p.Guid == sku.ProductGuid);
                    var manufacturer    = allManufacturers.Find(m => m.Guid == product.ManufacturerGuid);
                    var productCategory = allProductCategories.Find(pc => pc.ProductGuid == sku.ProductGuid);
                    var category        = allCategories.Find(c => c.Guid == productCategory.CategoryGuid);
                    var viewCount       = allViewCounts.Find(c => c.Guid == sku.Guid);

                    var skuView = new SkuView
                    {
                        CategoryGuid       = category.Guid,
                        CategoryName       = TranslationInfo.ExtractTranslation(category.NameTranslations, lang),
                        ProductGuid        = product.Guid,
                        ProductName        = TranslationInfo.ExtractTranslation(product.NameTranslations, lang),
                        ProductDescription = TranslationInfo.ExtractTranslation(product.DescriptionTranslations, lang),
                        ManufacturerGuid   = manufacturer.Guid,
                        ManufacturerName   = TranslationInfo.ExtractTranslation(manufacturer.NameTranslations, lang),
                        Guid             = sku.Guid,
                        SkuName          = TranslationInfo.ExtractTranslation(sku.NameTranslations, lang),
                        ImageSrc         = String.Format("{0}/v1/productimages/{1}?lang={2}", baseUrl, product.Guid, lang),
                        Url              = String.Format("{0}/{1}/market/{2}", webUrl, lang, sku.Guid),
                        ManufacturerLink = product.ManufacturerLink,
                        ViewCount        = viewCount == null ? 0 : viewCount.Count
                    };

                    string[] fullNameParts = skuView.SkuName == "null" ? new string[] { skuView.ManufacturerName, skuView.ProductName } :
                    new string[] { skuView.ManufacturerName, skuView.ProductName, skuView.SkuName };
                    skuView.FullName = String.Join(" ", fullNameParts);

                    Func <string, string[]> getValues = (nameTranslations) =>
                    {
                        var translations = JsonConvert.DeserializeObject <TranslationInfo[]>(nameTranslations);
                        return((from t in translations select t.Text == "null" ? "" : t.Text).ToArray());
                    };

                    List <string> keywordParts = new List <string>();
                    keywordParts.AddRange(getValues(category.NameTranslations));
                    keywordParts.AddRange(getValues(manufacturer.NameTranslations));
                    keywordParts.AddRange(getValues(product.NameTranslations));
                    keywordParts.AddRange(getValues(sku.NameTranslations));
                    skuView.Keywords = String.Join(" ", keywordParts.Distinct());

                    ////build price low only for active orders
                    var results = (from o in allOrders
                                   where o.SkuGuid == sku.Guid &&
                                   !o.IsCancelled &&
                                   o.Quantity > 0 &&
                                   o.ValidFrom <DateTime.UtcNow &&
                                                o.ValidTo> DateTime.UtcNow
                                   select o).ToList();

                    skuView.OrdersCount = results.Count;

                    //only summarise sell order pricing
                    var sellOrders = results.Where(o => o.Type == "Sell").ToList();

                    if (sellOrders.Count > 0)
                    {
                        var cheapest        = sellOrders.OrderBy(o => o.Price).First();
                        skuView.PriceLow    = cheapest.Price;
                        skuView.IsExclusive = cheapest.IsExclusive;
                        skuView.Currency    = cheapest.Currency;

                        var latest = (from order in results
                                      orderby order.LastModified descending
                                      select order).First();
                        skuView.LastModified = latest.LastModified;
                    }

                    skuView.SoldCount = (from t in allTrades
                                         where t.SkuGuid == sku.Guid
                                         select t.Quantity).Sum();

                    return(skuView);
                });

                return(skuViews);
            }
        }