private List <EventEONET> FilterBy(string searchString, string filterBy, EventsListEONET eventsListEONET, List <EventEONET> eventsList) { if (filterBy.ToLower() == "description") { eventsList = eventsListEONET.Events.Where(e => e.Description.ToLower().Contains(searchString)).ToList(); } else if (filterBy.ToLower() == "title") { eventsList = eventsListEONET.Events.Where(e => e.Title.ToLower().Contains(searchString)).ToList(); } else if (filterBy.ToLower() == "link") { eventsList = eventsListEONET.Events.Where(e => e.Title.ToLower().Contains(searchString)).ToList(); } else if (filterBy.ToLower() == "category") { eventsList = eventsListEONET.Events.Where(e => e.Categories.Any(c => c.Title.ToLower().Contains(searchString))).ToList(); } else if (filterBy.ToLower() == "source") { eventsList = eventsListEONET.Events.Where(e => e.Sources.Any(c => c.Url.ToLower().Contains(searchString))).ToList(); } else if (filterBy.ToLower() == "id") { eventsList = eventsListEONET.Events.Where(e => e.Id.ToLower().Contains(searchString)).ToList(); } return(eventsList); }
public async Task <ActionResult> GetEventEONET([FromRoute] string id, [FromQuery] string sortBy, [FromQuery] string sortOrder, [FromQuery] string searchString, [FromQuery] string filterBy) { var urlsResolver = new UrlsResolver(); var requestUri = urlsResolver.FormatRequestEventUri(_sourceUrl, _eventsUrlKey); var httpResponse = await _httpClient.GetEventsAsync(requestUri, HttpCompletionOption.ResponseHeadersRead); try { httpResponse.EnsureSuccessStatusCode(); var eventsListEONET = new EventsListEONET(); if (httpResponse.Content is object && httpResponse.Content.Headers.ContentType.MediaType == "application/json") { try { var contentStream = await httpResponse.Content.ReadAsStreamAsync(); using var streamReader = new StreamReader(contentStream); using var jsonReader = new JsonTextReader(streamReader); JsonSerializer serializer = new JsonSerializer(); eventsListEONET = serializer.Deserialize <EventsListEONET>(jsonReader); } catch (JsonException) // Invalid JSON { return(NotFound("Invalid JSON.")); } catch (Exception) { return(NotFound()); } } if (eventsListEONET == null) { return(NotFound()); } var filterer = new EventsFilterer(); filterer.Filter(id, "id", eventsListEONET); if (eventsListEONET.Events == null || eventsListEONET.Events.Count == 0) { return(NotFound(id)); } if (searchString != null) { filterer.FilterEvent(searchString, filterBy, eventsListEONET.Events[0]); } if (sortBy != null && sortOrder != null) { var eventsSorter = new EventsSorter(); eventsSorter.SortEvent(eventsListEONET.Events[0], sortOrder, sortBy); } return(Ok(JsonConvert.SerializeObject(eventsListEONET.Events[0], Formatting.Indented))); } catch (HttpRequestException) { return(NotFound("Problems with the source endpoint response")); } }
public void Sort(EventsListEONET eventsListEONET, string sortOrder, string sortBy) { if (sortOrder.ToLower() == "asc") { SortAsc(eventsListEONET, sortBy); } else if (sortOrder.ToLower() == "desc") { SortDesc(eventsListEONET, sortBy); } }
private void SortAsc(EventsListEONET eventsListEONET, string sortBy) { if (sortBy.ToLower() == "title") { eventsListEONET.Events = eventsListEONET.Events.OrderBy(e => e.Title).ToList(); } else if (sortBy.ToLower() == "description") { eventsListEONET.Events = eventsListEONET.Events.OrderBy(e => e.Description).ToList(); } else if (sortBy.ToLower() == "id") { eventsListEONET.Events = eventsListEONET.Events.OrderBy(e => e.Id).ToList(); } else if (sortBy.ToLower() == "link") { eventsListEONET.Events = eventsListEONET.Events.OrderBy(e => e.Link).ToList(); } }
public void Filter(string searchString, string filterBy, EventsListEONET eventsListEONET) { var eventsList = new List <EventEONET>(); if (filterBy != null && filterBy != "") { var tmpEventsList = FilterBy(searchString.ToLower(), filterBy.ToLower(), eventsListEONET, eventsList); eventsList = tmpEventsList; } else { eventsList = eventsListEONET.Events.Where(e => e.Description.Contains(searchString) == true | e.Title.Contains(searchString) == true | e.Link.Contains(searchString) == true | e.Categories.Any(c => c.Title.Contains(searchString)) == true | e.Sources.Any(c => c.Url.Contains(searchString) == true)).ToList(); } if (eventsList != null || eventsList.Count > 0) { eventsListEONET.Events = eventsList; } }