public async Task <ActionResult <IEnumerable <EventViewModel> > > GetEventsByFilters([FromQuery] EventViewModelFilter filters) { var events = await eventService.GetEventsByFilters(filters); return(Ok(events)); }
public async Task <IEnumerable <EventViewModel> > GetEventsByFilters(EventViewModelFilter filter) { var result = dbRepository.Events; if (!string.IsNullOrEmpty(filter.Name)) { result = result.Where(x => x.Name.Contains(filter.Name, System.StringComparison.InvariantCultureIgnoreCase)); } if (filter.MinDate != null) { result = result.Where(x => x.StartDate >= filter.MinDate); } if (filter.MaxDate != null) { result = result.Where(x => x.StartDate <= filter.MaxDate); } if (filter.MinPrice != null) { result = result.Where(x => x.Price >= filter.MinPrice); } if (filter.MaxPrice != null) { result = result.Where(x => x.Price <= filter.MaxPrice); } switch (filter.OrderBy) { case OrderParameter.Name: result = result.OrderBy(x => x.Name); break; case OrderParameter.NameDesc: result = result.OrderByDescending(x => x.Name); break; case OrderParameter.Date: result = result.OrderBy(x => x.StartDate); break; case OrderParameter.DateDesc: result = result.OrderByDescending(x => x.StartDate); break; case OrderParameter.Price: result = result.OrderBy(x => x.Price); break; case OrderParameter.PriceDesc: result = result.OrderByDescending(x => x.Price); break; default: result = result.OrderBy(x => x.StartDate); break; } return(await result .ProjectTo <EventViewModel>(mapper.ConfigurationProvider) .ToListAsync()); }