Esempio n. 1
0
 public HttpResponseMessage SearchLevelsPost([FromBody] SearchLevelsFormModel searchData)
 {
     try
     {
         return(GetSearchResults(searchData));
     }
     catch (Exception ex)
     {
         return(HttpResponseFactory.Response500Plain(ex.Message));
     }
 }
Esempio n. 2
0
        /// <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));
            }
        }