def browserSearch()

in app/controllers/SearchController.scala [148:184]


  def browserSearch(startAt:Int,pageSize:Int) = IsAuthenticatedAsync(circe.json(2048)) { _=> request=>
    request.body.as[SearchRequest].fold(
      error=>{
        Future(BadRequest(GenericErrorResponse("bad_request", error.toString).asJson))
      },
      request=> {
        esClient.execute {
          search(indexName) query {
            boolQuery().must(request.toSearchParams)
          } from startAt size pageSize sortBy fieldSort(request.toSortParam).order(request.toSortOrder)
        }.map(response=>{
          if(response.isError) {
            logger.error(s"Could not perform advanced search: ${response.status} ${response.error.reason}")
            InternalServerError(GenericErrorResponse("search_error", response.error.reason).asJson)
          } else {
            try {
              Ok(ObjectListResponse("ok", "entry", fixupUserAvatars(response.result.to[ArchiveEntry]), response.result.totalHits.toInt).asJson)
            } catch {
              case err:NullPointerException=>
                logger.error(s"Caught null pointer exception responding to search request: ", err)
                var i:Int=0
                response.result.hits.hits.foreach(h=>{
                  logger.error(s"$i / ${response.result.hits.hits.length}: $h")
                  logger.error(s"$i / ${response.result.hits.hits.length}: ${h.to[ArchiveEntry]}")
                  i+=1
                })
                InternalServerError(GenericErrorResponse("data_error", "An internal error occurred, please see the system logs").asJson)
            }
          }
        })
      }
    ).recover({
      case err:Throwable=>
        logger.error("Could not do browse search: ", err)
        InternalServerError(GenericErrorResponse("error", err.toString).asJson)
    })
  }