public IActionResult SearchRestaurants([FromQuery] SearchRestaurantModel ratingFilter) { if (!ratingFilter.IsNameExist && !ratingFilter.IsMenuItemExist && !ratingFilter.IsAddressExist && !ratingFilter.IsLocationExist && !ratingFilter.IsSortApplied) { return(BadRequest("Invalid search, please provide search criteria")); } List <Restaurant> result = null; var error = string.Empty; RestaurantRepository repository = new RestaurantRepository(); try { result = repository.SearchRestaurants(ratingFilter); } catch (System.Exception ex) { error = ex.Message; } if (result != null) { return(Ok(result)); } else { return(BadRequest(error)); } }
internal static List <Restaurant> SearchRestaurants(SearchRestaurantModel searchFilter) { IEnumerable <Restaurant> query = restaurantCollection.AsQueryable(); if (searchFilter.IsLocationExist) { query = GetAllRestaurantsNearMe(searchFilter.Lat, searchFilter.Long, searchFilter.SearchDistance); } if (searchFilter.IsNameExist) { query = query.Where(x => x.Name.Contains(searchFilter.Name)); } if (searchFilter.IsAddressExist) { query = query.Where(x => x.Address.Contains(searchFilter.Address)); } if (searchFilter.IsMenuItemExist) { query = query.Where(x => x.Menu.MenuItems.Any(y => y.FoodName.Contains(searchFilter.Food))); } if (searchFilter.IsSortApplied) { searchFilter.Sort.ForEach(filter => { switch (filter) { case Sort.MenuItemRating: query = query.OrderBy(x => x.Menu.MenuItems.Average(y => y.FoodRating)); break; case Sort.RestaurantRating: query = query.OrderByDescending(x => x.RestaurantRating); break; default: break; } }); } return(query.ToList()); }
internal List <Restaurant> SearchRestaurants(SearchRestaurantModel ratingFilter) { return(DBManager.SearchRestaurants(ratingFilter)); }