示例#1
0
        private static void CacheInventorySupportData()
        {
            using (var conn = AbtProdDbConn())
            {
                var recordsets = conn.QueryMultiple("CCWeb.GetInventorySupportCache");

                // Cache Options domain (1st recordset)
                var options = recordsets.Read <Feature>().ToList();
                _filterDomains.SetOptions(options);


                // Cache FuelTypes domain (2nd recordset)
                var fuelTypes = recordsets.Read <Feature>().ToList();
                _filterDomains.SetFuelTypes(fuelTypes);


                // Dealer's AutoCheckIds (3rd recordset)
                _autoChecks = recordsets.Read <Dto.AutoCheck>().ToList();


                // Cache Categories domain
                var categories =
                    UriTokenTranslators.GetAllCategoryTranslators()
                    /* we need to temporarily filter-out 'Alternative Fuel' until we can be properly map it during the inventory feed */
                    .Where(c => c.Id != 1)
                    .Select(c => new Feature
                {
                    MatchValue  = c.Id.ToString(CultureInfo.InvariantCulture),
                    Description = c.Name
                });
                _filterDomains.SetCategories(categories);
            }
        }
示例#2
0
        public static string MapMetadataTokensWithDisplayValues(string metadata, IEnumerable <KeyValuePair <string, string> > tokenMaps)
        {
            // Token Ex: {key: "makeSeoName", value: "aston-martin"}
            foreach (var map in tokenMaps)
            {
                var value = map.Value.ToString(CultureInfo.InvariantCulture);

                switch (map.Key)
                {
                case UriTokenNames.Make:
                    var makeTrans = UriTokenTranslators.GetMakeTranslatorBySeoName(value);
                    metadata = metadata.Replace("{make}s", makeTrans.PluralName);
                    metadata = metadata.Replace("{make}", makeTrans.Name);
                    break;

                case UriTokenNames.SuperModel:
                    var superModelTrans = UriTokenTranslators.GetSuperModelTranslatorBySeoName(value);
                    metadata = metadata.Replace("{super-model}s", superModelTrans.Name + "s");
                    metadata = metadata.Replace("{super-model}", superModelTrans.Name);
                    break;

                case UriTokenNames.Year:
                    metadata = metadata.Replace("{year}", value);
                    break;

                case UriTokenNames.Trim:
                    var trimTrans = UriTokenTranslators.GetTrimTranslatorBySeoName(value);
                    metadata = metadata.Replace("{trim}", trimTrans.Name);
                    break;

                case UriTokenNames.Category:
                    var categoryTrans = UriTokenTranslators.GetCategoryTranslatorBySeoName(value);
                    metadata = metadata.Replace("{category}", categoryTrans.PluralName);
                    metadata = metadata.Replace("{category-singular}", categoryTrans.Name);
                    break;

                case UriTokenNames.VehicleAttribute:
                    var vehicleAttributeTrans = UriTokenTranslators.GetVehicleAttributeTranslatorBySeoName(value);
                    metadata = metadata.Replace("{vehicle-attrib}", vehicleAttributeTrans.Name);
                    break;

                case UriTokenNames.ArticleTitle:
                    metadata = metadata.Replace("{articletitle}", value);
                    break;

                case UriTokenNames.ContentId:
                    metadata = metadata.Replace("{contentid}", value);
                    break;
                }
            }

            return(metadata);
        }
示例#3
0
        private static void CacheAllSiteMapData()
        {
            try
            {
                var pagesBySectionDict = new Dictionary <string, IEnumerable <Page> >();
                var lastModified       = DateTime.Now.ToString("yyyy-MM-dd");

                #region **! Here, we are caching all the sitemap sections for the sitemap-index page.

                _sections = SectionNames
                            .Select(sectionName => new Section
                {
                    DomainAndPath = String.Format("{0}/sitemap/{1}", Host, sectionName),
                    LastModified  = lastModified
                });

                #endregion


                #region **! Here, we are caching all the pages for each sitemap section.

                #region Cache all pages for the *general* sitemap section.
                const string generalSection = "general";

                pagesBySectionDict.Add(generalSection, new List <Page>
                {
                    new Page
                    {
                        DomainAndPath   = Host,
                        LastModified    = lastModified,
                        ChangeFrequency = ChangeFrequency.Weekly,
                        Priority        = Priority.Top
                    },
                    new Page
                    {
                        DomainAndPath   = String.Format("{0}/{1}", Host, "cars-for-sale"),
                        LastModified    = lastModified,
                        ChangeFrequency = ChangeFrequency.Weekly,
                        Priority        = Priority.Medium
                    }
                });

                #endregion


                #region Cache all pages for the *car-research* sitemap section.

                // NOTE: We are only going after all the *NEW* cars in this section.
                const string researchSection = "car-research";

                // landing page
                var researchPages = new List <Page>
                {
                    new Page
                    {
                        DomainAndPath   = String.Format("{0}/{1}", Host, researchSection),
                        LastModified    = lastModified,
                        ChangeFrequency = ChangeFrequency.Weekly,
                        Priority        = Priority.Top
                    }
                };

                // make pages
                var researchMakes = UriTokenTranslators.GetAllMakeTranslators()
                                    .Where(make => make.IsActive)
                                    .Select(make => new Dto.CarResearchUrl
                {
                    Make = make.SeoName
                }).ToList().OrderBy(s => s.Make);

                researchPages.AddRange(researchMakes
                                       .Select(carResearchUrl => new Page
                {
                    DomainAndPath   = String.Format("{0}/{1}", Host, carResearchUrl.Make),
                    LastModified    = lastModified,
                    ChangeFrequency = ChangeFrequency.Weekly,
                    Priority        = Priority.Medium
                }).ToList());


                // make/super-model pages
                var researchMakeSuperModels = VehicleSpecService.GetAllNewSuperModels()
                                              .Select(superModel => new Dto.CarResearchUrl
                {
                    Make       = UriTokenTranslators.GetMakeTranslatorByName(superModel.Make).SeoName,
                    SuperModel = superModel.SeoName
                }).ToList().OrderBy(s => s.Make).ThenBy(s => s.SuperModel);

                researchPages.AddRange(researchMakeSuperModels
                                       .Select(carResearchUrl => new Page
                {
                    DomainAndPath   = String.Format("{0}/{1}/{2}", Host, carResearchUrl.Make, carResearchUrl.SuperModel),
                    LastModified    = lastModified,
                    ChangeFrequency = ChangeFrequency.Weekly,
                    Priority        = Priority.Medium
                }).ToList());


                // make/super-model/year pages
                var makeSuperModelYears =
                    (from superModel in VehicleSpecService.GetAllNewSuperModels()
                     from year in superModel.Years
                     where year.IsNew
                     select new Dto.CarResearchUrl
                {
                    Make = UriTokenTranslators.GetMakeTranslatorByName(superModel.Make).SeoName,
                    SuperModel = superModel.SeoName,
                    Year = year.Number
                }).ToList().OrderBy(s => s.Make).ThenBy(s => s.SuperModel).ThenBy(s => s.Year);

                researchPages.AddRange(makeSuperModelYears
                                       .Select(carResearchUrl => new Page
                {
                    DomainAndPath =
                        String.Format("{0}/{1}/{2}/{3}",
                                      Host, carResearchUrl.Make, carResearchUrl.SuperModel, carResearchUrl.Year),
                    LastModified    = lastModified,
                    ChangeFrequency = ChangeFrequency.Weekly,
                    Priority        = Priority.Medium
                }).ToList());


                // make/super-model/year/trim pages
                var makeSuperModelYearTrims =
                    (from msmy in makeSuperModelYears
                     from trim in VehicleSpecService.GetTrimsByMakeBySuperModelByYear(msmy.Make, msmy.SuperModel, msmy.Year)
                     select new Dto.CarResearchUrl
                {
                    Make = msmy.Make,
                    SuperModel = msmy.SuperModel,
                    Year = msmy.Year,
                    Trim = trim.CanonicalSeoName
                }).ToList().OrderBy(s => s.Make).ThenBy(s => s.SuperModel).ThenBy(s => s.Trim).ThenBy(s => s.Year);

                var makeSuperModelYearTrimsDistinct = makeSuperModelYearTrims.GroupBy(x => x.Trim).Select(g => g.First());

                researchPages.AddRange(makeSuperModelYearTrimsDistinct
                                       .Select(carResearchUrl => new Page
                {
                    DomainAndPath =
                        String.Format("{0}/{1}/{2}/{3}/{4}",
                                      Host, carResearchUrl.Make, carResearchUrl.SuperModel, carResearchUrl.Year, carResearchUrl.Trim),
                    LastModified    = lastModified,
                    ChangeFrequency = ChangeFrequency.Weekly,
                    Priority        = Priority.Medium
                }).ToList());


                // make/super-model/year/trim/section pages
                var trimSectionNames = new List <string>
                {
                    "specifications",
                    "color",
                    "warranty",
                    "pictures-videos",
                    "incentives",
                    "safety"
                };

                var makeSuperModelYearTrimSections =
                    (from msmyt in makeSuperModelYearTrimsDistinct
                     from sectionName in trimSectionNames
                     select new Dto.CarResearchUrl
                {
                    Make = msmyt.Make,
                    SuperModel = msmyt.SuperModel,
                    Year = msmyt.Year,
                    Trim = msmyt.Trim,
                    Section = sectionName
                }).ToList().OrderBy(s => s.Make).ThenBy(s => s.SuperModel).ThenBy(s => s.Trim).ThenBy(s => s.Year).ThenBy(s => s.Section);

                researchPages.AddRange(makeSuperModelYearTrimSections
                                       .Select(carResearchUrl => new Page
                {
                    DomainAndPath =
                        String.Format("{0}/{1}/{2}/{3}/{4}/{5}",
                                      Host, carResearchUrl.Make, carResearchUrl.SuperModel, carResearchUrl.Year, carResearchUrl.Trim, carResearchUrl.Section),
                    LastModified    = lastModified,
                    ChangeFrequency = ChangeFrequency.Weekly,
                    Priority        = Priority.Low
                }).ToList());


                // Add them all here!
                pagesBySectionDict.Add(researchSection, researchPages);

                #endregion


                #region Cache all pages for the *buying-tools* sitemap section.
                const string toolsSection = "buying-tools";

                var toolNames = new List <string>
                {
                    "tools/car-comparison",
                    "tools/calculators",
                    "tools/calculators/payment-calculator",
                    "tools/calculators/affordability-calculator",
                    "tools/calculators/fuel-savings-calculator",
                    "tools/calculators/lease-vs-buy-calculator",
                    "tools/calculators/early-payoff-calculator",
                    "tools/calculators/rebate-vs-financing-calculator",
                    "tools/used-car-values"
                };

                var toolPages = new List <Page>
                {
                    new Page
                    {
                        DomainAndPath   = String.Format("{0}/{1}", Host, "tools"),
                        LastModified    = lastModified,
                        ChangeFrequency = ChangeFrequency.Monthly,
                        Priority        = Priority.Top
                    }
                };

                toolPages.AddRange(toolNames
                                   .Select(toolName => new Page
                {
                    DomainAndPath   = String.Format("{0}/{1}", Host, toolName),
                    LastModified    = lastModified,
                    ChangeFrequency = ChangeFrequency.Monthly,
                    Priority        = Priority.Medium
                }));


                // Add them all here!
                pagesBySectionDict.Add(toolsSection, toolPages);

                #endregion


                #region Cache all pages for the *content* sitemap section.

                const string contentSection = "content";

                var contentPages = new List <Page>
                {
                    new Page
                    {
                        DomainAndPath   = String.Format("{0}/{1}", Host, "buying-guides"),
                        LastModified    = lastModified,
                        ChangeFrequency = ChangeFrequency.Weekly,
                        Priority        = Priority.Top
                    },
                    new Page
                    {
                        DomainAndPath   = String.Format("{0}/{1}", Host, "finance"),
                        LastModified    = lastModified,
                        ChangeFrequency = ChangeFrequency.Weekly,
                        Priority        = Priority.Medium
                    }
                };

                // article urls
                var articleUrls = VehicleContentService.GetAllArticleUrlsForSitemap();

                contentPages.AddRange(articleUrls
                                      .Select(articleUrl => new Page
                {
                    DomainAndPath   = String.Format("{0}{1}", Host, articleUrl.TrimEnd(new [] { '/' })),
                    LastModified    = lastModified,
                    ChangeFrequency = ChangeFrequency.Weekly,
                    Priority        = Priority.Low
                }).ToList());

                pagesBySectionDict.Add(contentSection, contentPages);

                #endregion

                lock (Mutex)
                {
                    _pagesBySectionDict = pagesBySectionDict;
                }

                #endregion
            }
            catch (Exception ex)
            {
                Log.Fatal(String.Format(
                              "The SitemapService Failed during the caching process. It's likely an SeoName problem exists in the data./r/n{0}",
                              ex.Message));
            }
        }