public IHttpActionResult ExportSearchResultToExcel(string searchText) { ISearchResult searchResult; var search = JsonConvert.DeserializeObject <SearchParameters>(searchText); try { string language = WebHelper.GetClientLanguage(Request); var error = entityProvider.CheckSearchParameters(search, language); if (!string.IsNullOrEmpty(error)) { return(new BadRequestErrorMessageResult(error, this)); } var access = GetUserAccess(language); search.Paging.Skip = 0; search.Paging.Take = 10000; searchResult = entityProvider.Search <SearchRecord>(search, access); if (searchResult is SearchResult <SearchRecord> searchRecords) { return(ResponseMessage(veExportRecordHelper.CreateExcelFile( ConvertExportData(searchRecords.Entities.Items.Select(i => i.Data).ToList()), language, FrontendSettingsViaduc.Instance.GetTranslation(language, "veExportRecord.fileName") + $"-{DateTime.Now.ToString("yyyy-MM-dd-hh_mm_ss")}.xlsx", FrontendSettingsViaduc.Instance.GetTranslation("en", "veExportRecord.fileName") + $"-{DateTime.Now.ToString("yyyy-MM-dd-hh_mm_ss")}.xlsx"))); } } catch (Exception ex) { Log.Error(ex, "Search for {searchQuery} failed", JsonConvert.SerializeObject(search, Formatting.Indented)); return(InternalServerError(ex)); } return(StatusCode(HttpStatusCode.NoContent)); }
public IHttpActionResult Search([FromBody] SearchParameters search) { if (ControllerHelper.HasClaims()) { return(BadRequest("The request was authorized, but this API only accepts unauthorized requests")); } try { var clientLanguage = WebHelper.GetClientLanguage(Request); var error = entityProvider.CheckSearchParameters(search, clientLanguage); if (!string.IsNullOrEmpty(error)) { return(BadRequest(error)); } var access = GetUserAccess(clientLanguage); var res = entityProvider.Search <SearchRecord>(search, access); var errorResult = res as ErrorSearchResult; if (errorResult == null) { return(Ok(res as SearchResult <SearchRecord>)); } if (errorResult.Error.StatusCode == (int)HttpStatusCode.BadRequest) // Syntax Error { return(BadRequest("The search query had a syntax error or was invalid.")); } return(StatusCode(errorResult.Error?.StatusCode != 0 ? (HttpStatusCode)errorResult.Error.StatusCode : HttpStatusCode.InternalServerError)); } catch (BadRequestException ex) { return(BadRequest(ex.Message)); } catch (UnknownElasticSearchFieldException ex) { return(BadRequest(ex.Message)); } catch (Exception ex) { Log.Error(ex, "ExternalController: Exception on processing request Search"); return(InternalServerError()); } }
public ISearchResult Search([FromBody] SearchParameters search, string language = null) { ISearchResult result; try { language = language ?? WebHelper.GetClientLanguage(Request); var error = entityProvider.CheckSearchParameters(search, language); if (!string.IsNullOrEmpty(error)) { return(new ErrorSearchResult { Error = new ApiError { StatusCode = (int)HttpStatusCode.Forbidden, Message = error, Details = string.Empty } }); } var access = GetUserAccess(language); var userId = ControllerHelper.GetCurrentUserId(); if (usageAnalyzer.GetExceededThreshold(userId, Request) != null) { if (string.IsNullOrEmpty(search?.Captcha?.Token)) { return(GetCaptchaMissing(language)); } if (!SecurityHelper.IsValidCaptcha(search.Captcha, FrontendSettingsViaduc.Instance.GetServerSettings())) { return(GetCaptchaInvalid(language)); } usageAnalyzer.Reset(userId, Request); } result = entityProvider.Search <SearchRecord>(search, access); if (result is SearchResult <SearchRecord> searchResult) { usageAnalyzer.UpdateUsageStatistic(userId, Request, searchResult.Entities.Items.Count); if (usageAnalyzer.GetExceededThreshold(userId, Request) != null) { return(GetCaptchaMissing(language)); } } } catch (Exception ex) { Log.Error(ex, "Search for {searchQuery} failed", JsonConvert.SerializeObject(search, Formatting.Indented)); result = new ErrorSearchResult { Error = new ApiError { StatusCode = (int)HttpStatusCode.InternalServerError, Message = FrontendSettingsViaduc.Instance.GetTranslation(language, "search.unexpectedSystemError", "Es ist ein unerwarteter Fehler aufgetreten.") } }; } return(result); }