Ejemplo n.º 1
0
        //TODO: sort by
        //TODO: pagination
        public async Task <IActionResult> Featured(
            SchoolingEventFilterViewModel filter,
            [FromQuery(Name = "TagValues[]")] IEnumerable <string> tagValues,
            SchoolingEventSortType sort,
            int page     = 0,
            int pageSize = 10)
        {
            filter.TagValues = tagValues;

            var entities = await _schoolingEventService.GetFeaturedEvents(filter, sort, page, pageSize);

            return(Response(entities));
        }
Ejemplo n.º 2
0
        public async Task <IEnumerable <FeaturedSchoolingEventViewModel> > GetFeaturedEvents(SchoolingEventFilterViewModel filter, SchoolingEventSortType sort, int page, int pageSize)
        {
            var featuredEventsQuery = _schoolingEventRepository
                                      .GetAll()
                                      .Where(e => e.IsPublic);

            if (filter != null)
            {
                featuredEventsQuery = ApplyFilters(featuredEventsQuery, filter);
            }

            if (sort != SchoolingEventSortType.None)
            {
                featuredEventsQuery = ApplySort(featuredEventsQuery, sort);
            }

            featuredEventsQuery = featuredEventsQuery
                                  .Skip(page * pageSize)
                                  .Take(pageSize);

            var vm = await featuredEventsQuery.ProjectTo <FeaturedSchoolingEventViewModel>().ToListAsync();

            if (_user.IsAuthenticated())
            {
                var currentUserId = _user.Id;
                foreach (var eventViewModel in vm)
                {
                    eventViewModel.IsFollowing = await _schoolingEventRepository.IsUserFollowingEvent(currentUserId, eventViewModel.Id);

                    eventViewModel.HasCreated = eventViewModel.CreatedByUserId == _user.Id;
                }
            }

            return(vm);
        }
Ejemplo n.º 3
0
        private IQueryable <SchoolingEvent> ApplySort(IQueryable <SchoolingEvent> query, SchoolingEventSortType sort)
        {
            Expression <Func <SchoolingEvent, decimal> > minTicketPricePredicate = e => e.AvailableTickets.Any() ? e.AvailableTickets.Min(t => t.Price) : decimal.MaxValue;

            switch (sort)
            {
            case SchoolingEventSortType.TicketPriceAscending:
                query = query.OrderBy(minTicketPricePredicate);
                break;

            case SchoolingEventSortType.TicketPriceDescending:
                query = query.OrderByDescending(minTicketPricePredicate);
                break;
            }

            return(query);
        }