public HttpResponseMessage SearchLevelsPost([FromBody] SearchLevelsFormModel searchData) { try { return(GetSearchResults(searchData)); } catch (Exception ex) { return(HttpResponseFactory.Response500Plain(ex.Message)); } }
/// <summary> /// Performs search according to specified search query. /// </summary> /// <param name="searchData">Search query.</param> /// <returns>List of found maps.</returns> private HttpResponseMessage GetSearchResults(SearchLevelsFormModel searchData) { try { if (searchData == null) { return(HttpResponseFactory.Response200Json(new ErrorJson { Error = ErrorMessages.ERR_NO_FORM_DATA })); } if (String.IsNullOrEmpty(ConfigurationManager.Instance.SearchUrl)) { // External level search web API is not specified, handle the request internally. List <LevelRowDTO> levels = null; if (searchData.Mode == SearchMode.User) { Account acc = this.mainDAL.GetAccountByUsername(searchData.Search_Str); if (acc == null) { return(HttpResponseFactory.Response200Plain(StatusKeys.ERROR, ErrorMessages.ERR_NO_USER_WITH_SUCH_NAME)); } levels = this.levelsDAL.SearchLevelsByUserId(acc.Id, searchData.Order, searchData.Dir, searchData.Page); } else { levels = this.levelsDAL.SearchLevelsByTerm(searchData.Search_Str, searchData.Order, searchData.Dir, searchData.Page); } this.mainDAL.FillLevelListMetadata(levels); return(HttpResponseFactory.Response200Plain(levels.GetLevelListString())); } else { // Let the external API handle the level search. using (WebClient webClient = new WebClient()) { webClient.QueryString.Add("search_str", searchData.Search_Str); webClient.QueryString.Add("order", searchData.Order.ToString().ToLower()); webClient.QueryString.Add("mode", searchData.Mode.ToString().ToLower()); webClient.QueryString.Add("dir", searchData.Dir.ToString().ToLower()); webClient.QueryString.Add("page", (searchData.Page ?? 1).ToString()); webClient.QueryString.Add("rand", searchData.Rand); String result = webClient.DownloadString(ConfigurationManager.Instance.SearchUrl); return(HttpResponseFactory.Response200Plain(result)); } } } catch (PR2Exception ex) { return(HttpResponseFactory.Response200Plain(StatusKeys.ERROR, ex.Message)); } }