Beispiel #1
0
        public SearchResult GetAllForCrag(string cragSlug, string country, ZlaggableCategoryEnum category, string sectorSlug = "", int pageIndex = 0, int pageSize = 50, string sortField = "", int?minGrade = null, int?maxGrade = null)
        {
            return(_elasticService.GetZlaggablesWithStatisticsForCrag(cragSlug, country, category, sectorSlug,
                                                                      pageIndex, pageSize, sortField, minGrade, maxGrade));

            /*
             * var crags = _statisticsService.GetCragStatistics();
             * List<ZlaggableWithStatistics> zlaggables = null;
             *
             * var query = crags.Single(c =>
             *      c.Category.Equals(category) &&
             *      c.Slug.Equals(cragSlug) &&
             *      c.CountrySlug.Equals(country))
             *  .Sectors as IEnumerable<WithStatisticsBase>;
             *
             * if (!string.IsNullOrWhiteSpace(sectorSlug))
             * {
             *  query = query.Where(s => s.Slug.Equals(sectorSlug));
             * }
             *
             * zlaggables = query
             *  .SelectMany(s => s.Children)
             *  .OrderByDescending(c => c.TotalAscents)
             *  .Skip(pageIndex * pageSize)
             *  .Take(pageSize)
             *  .ToList().ConvertAll(x => (ZlaggableWithStatistics)x);
             *
             * return zlaggables;
             */
        }
Beispiel #2
0
        public static void AddGrade(int zlaggableId, GradingSystem gradingSystem, ZlaggableCategoryEnum category)
        {
            HashSet <int> grades;

            if (category == ZlaggableCategoryEnum.Sportclimbing)
            {
                if (routeGrades.ContainsKey(zlaggableId))
                {
                    grades = routeGrades[zlaggableId];
                }
                else
                {
                    grades = new HashSet <int>();
                    routeGrades.Add(zlaggableId, grades);
                }
            }
            else
            {
                if (boulderGrades.ContainsKey(zlaggableId))
                {
                    grades = boulderGrades[zlaggableId];
                }
                else
                {
                    grades = new HashSet <int>();
                    boulderGrades.Add(zlaggableId, grades);
                }
            }

            grades.Add(gradingSystem.VLGradeIndex);
        }
 public List <CragWithStatistics> GetAll(ZlaggableCategoryEnum category, string country = "", int pageIndex = 0, string sortField = "totalascents_desc")
 {
     if (string.IsNullOrEmpty(sortField))
     {
         sortField = "totalascents_desc";
     }
     return(_cragsManager.GetCragsWithStatisticsByCategory(category, country, pageIndex, sortField));
 }
 public List <Ascent> GetAllForRoute(string zlaggableSlug, string sectorSlug, ZlaggableCategoryEnum category, int pageIndex = 0, string sortField = "date_desc")
 {
     if (string.IsNullOrEmpty(sortField))
     {
         sortField = "date_desc";
     }
     return(_ascentsManager.GetAllForZlaggable(zlaggableSlug, category, sectorSlug, pageIndex, sortField));
 }
        public List <CragWithStatistics> GetCragsWithStatisticsByCategory(ZlaggableCategoryEnum category,
                                                                          string countrySlug = "", int pageIndex = 0, int pageSize = 50, string sortField = "")
        {
            var client = GetElasticClient();

            var descriptor = new SearchDescriptor <CragWithStatistics>();

            descriptor.Query(q => q
                             .Term(c => c.Category, category) && q
                             .Term(z => z.CountrySlug, countrySlug)

                             )
            .Size(pageSize)
            .Skip(pageIndex * pageSize);

            sortField = sortField.Trim().ToLower();

            if (string.IsNullOrWhiteSpace(sortField))
            {
                sortField = "totalascents_desc";
            }

            var sortOrder = sortField.EndsWith("_desc") ? SortOrder.Descending : SortOrder.Ascending;

            if (sortOrder == SortOrder.Descending)
            {
                sortField = sortField.Replace("_desc", "");
            }


            switch (sortField)
            {
            case "name":
                descriptor.Sort(ss => ss.Field(f => f.Field(c => c.Name.Suffix("keyword")).Order(sortOrder)));
                break;

            case "country":
                descriptor.Sort(ss => ss.Field(f => f.Field(c => c.CountryName.Suffix("keyword")).Order(sortOrder)));
                break;

            case "totalascents":
                descriptor.Sort(ss => ss.Field(f => f.Field(c => c.TotalAscents).Order(sortOrder)));
                break;

            case "averagerating":
                descriptor.Sort(ss => ss.Field(f => f.Field(c => c.AverageRating).Order(sortOrder)));
                break;

            default:
                descriptor.Sort(ss => ss.Field(f => f.Field(c => c.TotalAscents).Order(sortOrder)));
                break;
            }

            var response = client.Search <CragWithStatistics>(descriptor);

            return(response.Documents.ToList());
        }
        public List <Ascent> GetAllForZlaggable(int routeId, ZlaggableCategoryEnum category, int pageIndex = 0, int pageSize = 50, string sortField = "")
        {
            var zlaggableType = category.Equals(ZlaggableCategoryEnum.Sportclimbing) ? "Route" : "Boulder";

            IQueryable <Ascent> ascents = Context.Set <Ascent>()
                                          .Where(a => a.ZlaggableType.Equals(zlaggableType) && a.ZlaggableId.Equals(routeId))
                                          .Include(a => a.User);

            sortField = sortField.Trim().ToLower();

            if (string.IsNullOrWhiteSpace(sortField))
            {
                sortField = "date_desc";
            }

            var sortOrderDescending = sortField.EndsWith("_desc");

            if (sortOrderDescending)
            {
                sortField = sortField.Replace("_desc", "");
            }

            switch (sortField)
            {
            case "username":
                ascents = sortOrderDescending ? ascents.OrderByDescending(a => a.User.FirstName) : ascents.OrderBy(a => a.User.FirstName);
                break;

            case "date":
                ascents = sortOrderDescending ? ascents.OrderByDescending(a => a.Date) : ascents.OrderBy(a => a.Date);
                break;

            case "style":
                ascents = sortOrderDescending ? ascents.OrderByDescending(a => a.Style) : ascents.OrderBy(a => a.Style);
                break;

            case "notes":
                ascents = sortOrderDescending ? ascents.OrderByDescending(a => a.Note) : ascents.OrderBy(a => a.Note);
                break;

            case "rating":
                ascents = sortOrderDescending ? ascents.OrderByDescending(a => a.Rating) : ascents.OrderBy(a => a.Rating);
                break;

            default:
                ascents = sortOrderDescending ? ascents.OrderByDescending(a => a.Date) : ascents.OrderBy(a => a.Date);
                break;
            }

            return(ascents.Skip(pageIndex * pageSize).Take(pageSize).ToList());
        }
Beispiel #7
0
        public List <Ascent> GetAllForZlaggable(string zlaggableSlug, ZlaggableCategoryEnum category, string sectorSlug, int pageIndex = 0, string sortField = "", int pageSize = 50)
        {
            // get zlaggable from elasticsearch
            var zlaggable = _elasticService.GetZlaggableWithStatistics(zlaggableSlug, category, sectorSlug);

            if (zlaggable == null)
            {
                return(null);
            }

            /*
             * _elasticService.GetAscentsForZlaggable(zlaggable.DatabaseId, zlaggable.Category, pageIndex, pageSize,
             *  sortField);
             */

            return(_ascentsRepository.GetAllForZlaggable(zlaggable.DatabaseId, zlaggable.Category, pageIndex, pageSize, sortField));
        }
Beispiel #8
0
        public SearchResult GetAllForCrag(string cragSlug, string cragCountry, ZlaggableCategoryEnum category, string sectorSlug = "", int pageIndex = 0, int pageSize = 50, string sortField = "totalascents_desc", string grade = "")
        {
            if (string.IsNullOrEmpty(sortField))
            {
                sortField = "totalascents_desc";
            }

            int?minGrade = null;
            int?maxGrade = null;

            if (!string.IsNullOrEmpty(grade))
            {
                var arr = grade.Split(',');
                minGrade = Convert.ToInt32(arr[0]);
                maxGrade = arr.Length > 1 ? Convert.ToInt32(arr[1]) : minGrade;
            }

            return(_routesManager.GetAllForCrag(cragSlug, cragCountry, category, sectorSlug, pageIndex, pageSize, sortField, minGrade, maxGrade));
        }
        public List <CragWithStatistics> GetCragsWithStatisticsByCategory(ZlaggableCategoryEnum category, string countrySlug = "", int pageIndex = 0, string sortField = "", int pageSize = 50)
        {
            return(_elasticService.GetCragsWithStatisticsByCategory(category, countrySlug, pageIndex, pageSize, sortField));

            /*
             * var allCrags = _statisticsService.GetCragStatistics();
             * List<CragWithStatistics> crags = null;
             *
             * var query = allCrags.Where(c => c.Category.Equals(category));
             *
             * if (!string.IsNullOrWhiteSpace(countrySlug))
             * {
             *  query = query.Where(c => c.CountrySlug.Equals(countrySlug));
             * }
             *
             * crags = query.OrderByDescending(c => c.TotalAscents)
             *  .Skip(pageIndex * pageSize)
             *  .Take(pageSize)
             *  .ToList();
             *
             * return crags;
             */
        }
Beispiel #10
0
 public ZlaggableWithStatistics Get(string zlaggableSlug, ZlaggableCategoryEnum category, string sectorSlug)
 {
     return(_routesManager.GetZlaggableWithStatistics(zlaggableSlug, category, sectorSlug));
 }
Beispiel #11
0
 public List <SectorWithStatistics> GetAllForCragWithPaging(string cragSlug, string cragCountry, ZlaggableCategoryEnum category, int pageIndex = 0,
                                                            int pageSize = 50)
 {
     return(_elasticService.GetSectorsWithStatisticsForCragWithPaging(cragSlug, cragCountry, category, pageIndex,
                                                                      pageSize));
     // return _sectorsRepository.GetAllForCragWithPaging(cragSlug, cragCountry, cragCategory, pageIndex, pageSize);
 }
Beispiel #12
0
 public List <SectorWithStatistics> GetSectorsWithStatisticsForCrag(string cragSlug, string cragCountry, ZlaggableCategoryEnum category)
 {
     return(_elasticService.GetSectorsWithStatisticsForCrag(cragSlug, cragCountry, category));
     // return _sectorsRepository.GetSectorsWithStatisticsForCrag(cragSlug, cragCountry, cragCategory);
 }
        public List <SectorWithStatistics> GetSectorsWithStatisticsForCragWithPaging(string cragSlug, string cragCountry, ZlaggableCategoryEnum category,
                                                                                     int pageIndex = 0, int pageSize = 50)
        {
            var client   = GetElasticClient();
            var response = client.Search <SectorWithStatistics>(s => s
                                                                .Sort(ss => ss
                                                                      .Field(f => f
                                                                             .Field(c => c.Name)
                                                                             .Order(SortOrder.Ascending)
                                                                             )
                                                                      )
                                                                .Query(q => q
                                                                       .Term(o => o.CragSlug, cragSlug) && q
                                                                       .Term(o => o.CountrySlug, cragCountry) && q
                                                                       .Term(o => o.Category, category)

                                                                       )
                                                                .Size(pageSize)
                                                                .Skip(pageIndex * pageSize)
                                                                );

            return(response.Documents.ToList());
        }
        public List <SectorWithStatistics> GetSectorsWithStatisticsForCrag(string cragSlug, string countrySlug, ZlaggableCategoryEnum category)
        {
            var client   = GetElasticClient();
            var response = client.Search <SectorWithStatistics>(s => s
                                                                .Sort(ss => ss
                                                                      .Field(f => f
                                                                             .Field(c => c.Name.Suffix("keyword"))
                                                                             .Order(SortOrder.Ascending)
                                                                             )
                                                                      )
                                                                .Query(q => q
                                                                       .Term(o => o.CragSlug, cragSlug) && q
                                                                       .Term(o => o.CountrySlug, countrySlug) && q
                                                                       .Term(o => o.Category, category)

                                                                       )
                                                                .Size(10000)
                                                                );

            return(response.Documents.ToList());
        }
 public CragWithStatistics Get(string slug, string country, ZlaggableCategoryEnum category = ZlaggableCategoryEnum.Sportclimbing)
 {
     return(_cragsManager.GetCragWithStatistics(slug, country, category));
 }
 public List <SectorWithStatistics> GetAllForCragWithPaging(string cragSlug, string countrySlug, ZlaggableCategoryEnum category, int pageIndex = 0, int pageSize = 50)
 {
     return(_sectorsManager.GetAllForCragWithPaging(cragSlug, countrySlug, category, pageIndex, pageSize));
 }
        public CragWithStatistics GetCragWithStatistics(string cragSlug, string countrySlug, ZlaggableCategoryEnum category)
        {
            var client   = GetElasticClient();
            var response = client.Search <CragWithStatistics>(s => s
                                                              .Query(q => q
                                                                     .Term(o => o.Slug, cragSlug) && q
                                                                     .Term(o => o.CountrySlug, countrySlug) && q
                                                                     .Term(o => o.Category, category)
                                                                     ));

            return(response.Documents.SingleOrDefault());
        }
        public CragWithStatistics GetCragWithStatistics(string cragSlug, string countrySlug, ZlaggableCategoryEnum category)
        {
            return(_elasticService.GetCragWithStatistics(cragSlug, countrySlug, category));
            //_elasticService.GetCragsWithStatisticsByCategory()

            /*
             * Console.WriteLine($"get crag: '{cragSlug}', category: '{category}', countrySlug: '{countrySlug}'");
             * var allCrags = _statisticsService.GetCragStatistics();
             * var crag = allCrags.SingleOrDefault(c => c.Category.Equals(category) && c.Slug.Equals(cragSlug) && c.CountrySlug.Equals(countrySlug));
             * return crag;
             */
        }
 public List <SectorWithStatistics> GetAllForCrag(string cragSlug, string countrySlug, ZlaggableCategoryEnum category)
 {
     return(_sectorsManager.GetSectorsWithStatisticsForCrag(cragSlug, countrySlug, category));
 }
        public ZlaggableWithStatistics GetZlaggableWithStatistics(string zlaggableSlug, ZlaggableCategoryEnum category, string sectorSlug)
        {
            var client   = GetElasticClient();
            var response = client.Search <ZlaggableWithStatistics>(s => s
                                                                   .Query(q => q
                                                                          .Term(z => z.Slug, zlaggableSlug) && q
                                                                          .Term(z => z.SectorSlug, sectorSlug) && q
                                                                          .Term(z => z.Category, category)
                                                                          ));

            return(response.Documents.SingleOrDefault());
        }
        public SearchResult GetZlaggablesWithStatisticsForCrag(string cragSlug, string countrySlug, ZlaggableCategoryEnum category,
                                                               string sectorSlug = "", int pageIndex = 0, int pageSize = 50, string sortField = "", int?minGrade = null, int?maxGrade = null)
        {
            var client = GetElasticClient();


            var descriptor = new SearchDescriptor <ZlaggableWithStatistics>();

            descriptor
            .Size(pageSize)
            .Skip(pageIndex * pageSize);

            if (minGrade.HasValue && maxGrade.HasValue)
            {
                descriptor.Query(q => q
                                 .Term(o => o.CragSlug, cragSlug) && q
                                 .Term(o => o.SectorSlug, sectorSlug) && q
                                 .Term(o => o.CountrySlug, countrySlug) && q
                                 .Term(o => o.Category, category) && q
                                 .Range(c => c
                                        .Field(z => z.GradeIndex)
                                        .GreaterThanOrEquals(minGrade.Value)
                                        .LessThanOrEquals(maxGrade.Value)));
            }
            else
            {
                descriptor.Query(q => q
                                 .Term(o => o.CragSlug, cragSlug) && q
                                 .Term(o => o.SectorSlug, sectorSlug) && q
                                 .Term(o => o.CountrySlug, countrySlug) && q
                                 .Term(o => o.Category, category)
                                 );
            }

            sortField = sortField.Trim().ToLower();

            if (string.IsNullOrWhiteSpace(sortField))
            {
                sortField = "totalascents_desc";
            }

            var sortOrder = sortField.EndsWith("_desc") ? SortOrder.Descending : SortOrder.Ascending;

            if (sortOrder == SortOrder.Descending)
            {
                sortField = sortField.Replace("_desc", "");
            }


            switch (sortField)
            {
            case "grade":
                descriptor.Sort(ss => ss.Field(f => f.Field(c => c.GradeIndex).Order(sortOrder)));
                break;

            case "name":
                descriptor.Sort(ss => ss.Field(f => f.Field(c => c.Name.Suffix("keyword")).Order(sortOrder)));
                break;

            case "totalascents":
                descriptor.Sort(ss => ss.Field(f => f.Field(c => c.TotalAscents).Order(sortOrder)));
                break;

            case "ratio":
                descriptor.Sort(ss => ss.Field(f => f.Field(c => c.FlashOnsightRate).Order(sortOrder)));
                break;

            case "recommended":
                descriptor.Sort(ss => ss.Field(f => f.Field(c => c.TotalRecommendedRate).Order(sortOrder)));
                break;

            case "stars":
                descriptor.Sort(ss => ss.Field(f => f.Field(c => c.AverageRating).Order(sortOrder)));
                break;

            default:
                descriptor.Sort(ss => ss.Field(f => f.Field(c => c.TotalAscents).Order(sortOrder)));
                break;
            }

            var response = client.Search <ZlaggableWithStatistics>(descriptor);

            var result = new SearchResult()
            {
                Count = (int)response.Total,
                Items = response.Documents.ToList <object>()
            };

            return(result);
        }
Beispiel #22
0
        public ZlaggableWithStatistics GetZlaggableWithStatistics(string zlaggableSlug, ZlaggableCategoryEnum category, string sectorSlug)
        {
            Console.WriteLine($"get zlaggable: '{zlaggableSlug}', category: '{category}'");

            return(_elasticService.GetZlaggableWithStatistics(zlaggableSlug, category, sectorSlug));

            /*
             * var crags = _statisticsService.GetCragStatistics();
             * ZlaggableWithStatistics zlaggable = null;
             * zlaggable = crags
             *  .Where(c => c.Category.Equals(category))
             *  .SelectMany(c => c.Sectors)
             *  .SelectMany(s => s.Children)
             *  .SingleOrDefault(z => z.Slug.Equals(zlaggableSlug)) as ZlaggableWithStatistics;
             * return zlaggable;
             */
        }