Esempio n. 1
0
 public Dictionary <Guid, List <Visit> > GetVisitsInPeriodForEachSlide(VisitsFilterOptions options)
 {
     return(GetVisitsInPeriod(options)
            .AsEnumerable()
            .GroupBy(v => v.SlideId)
            .ToDictionary(g => g.Key, g => g.ToList()));
 }
Esempio n. 2
0
        public IQueryable <Visit> GetVisitsInPeriod(VisitsFilterOptions options)
        {
            var filteredVisits = db.Visits.Where(v => v.CourseId == options.CourseId);

            if (options.PeriodStart != DateTime.MinValue || options.PeriodFinish < DateTime.Now.AddSeconds(-10))
            {
                filteredVisits = filteredVisits.Where(v => options.PeriodStart <= v.Timestamp && v.Timestamp <= options.PeriodFinish);
            }
            if (options.SlidesIds != null)
            {
                filteredVisits = filteredVisits.Where(v => options.SlidesIds.Contains(v.SlideId));
            }
            if (options.UserIds != null)
            {
                if (options.IsUserIdsSupplement)
                {
                    filteredVisits = filteredVisits.Where(v => !options.UserIds.Contains(v.UserId));
                }
                else
                {
                    filteredVisits = filteredVisits.Where(v => options.UserIds.Contains(v.UserId));
                }
            }

            return(filteredVisits);
        }
Esempio n. 3
0
        public IEnumerable <string> GetUsersVisitedAllSlides(VisitsFilterOptions options)
        {
            if (options.SlidesIds == null)
            {
                throw new ArgumentNullException(nameof(options.SlidesIds));
            }

            var slidesCount = options.SlidesIds.Count();

            return(GetVisitsInPeriod(options)
                   .DistinctBy(v => Tuple.Create(v.UserId, v.SlideId))
                   .GroupBy(v => v.UserId)
                   .Where(g => g.Count() == slidesCount)
                   .Select(g => g.Key));
        }
Esempio n. 4
0
        public async Task <List <string> > GetUsersVisitedAllSlides(VisitsFilterOptions options)
        {
            if (options.SlidesIds == null)
            {
                throw new ArgumentNullException(nameof(options.SlidesIds));
            }
            var slidesCount = options.SlidesIds.Count;

            return(await GetVisitsInPeriod(options)
                   .Select(v => new { v.UserId, v.SlideId })
                   .Distinct()
                   .GroupBy(v => v.UserId)
                   .Where(g => g.Count() == slidesCount)
                   .Select(g => g.Key)
                   .ToListAsync());
        }
Esempio n. 5
0
        public IQueryable <Visit> GetVisitsInPeriod(VisitsFilterOptions options)
        {
            var filteredVisits = db.Visits.Where(v => options.PeriodStart <= v.Timestamp && v.Timestamp <= options.PeriodFinish);

            if (options.SlidesIds != null)
            {
                filteredVisits = filteredVisits.Where(v => options.SlidesIds.Contains(v.SlideId));
            }
            if (options.UserIds != null)
            {
                if (options.IsUserIdsSupplement)
                {
                    filteredVisits = filteredVisits.Where(v => !options.UserIds.Contains(v.UserId));
                }
                else
                {
                    filteredVisits = filteredVisits.Where(v => options.UserIds.Contains(v.UserId));
                }
            }
            return(filteredVisits);
        }
Esempio n. 6
0
 public async Task <Dictionary <Guid, List <Visit> > > GetVisitsInPeriodForEachSlide(VisitsFilterOptions options)
 {
     return((await GetVisitsInPeriod(options)
             .ToListAsync())
            .GroupBy(v => v.SlideId)
            .ToDictionary(g => g.Key, g => g.ToList()));
 }