in media-api/app/lib/elasticsearch/ElasticSearchModel.scala [114:172]
def commasToList(s: String): List[String] = s.trim.split(',').toList
def listToCommas(list: List[String]): Option[String] = list.toNel.map(_.list.toList.mkString(",")).toOption
// TODO: return descriptive 400 error if invalid
def parseIntFromQuery(s: String): Option[Int] = Try(s.toInt).toOption
def parsePayTypeFromQuery(s: String): Option[PayType.Value] = PayType.create(s)
def parseBooleanFromQuery(s: String): Option[Boolean] = Try(s.toBoolean).toOption
def parseSyndicationStatus(s: String): Option[SyndicationStatus] = Some(SyndicationStatus(s))
def apply(request: Authentication.Request[Any]): SearchParams = {
def commaSep(key: String): List[String] = request.getQueryString(key).toList.flatMap(commasToList)
val query = request.getQueryString("q")
val structuredQuery = query.map(Parser.run) getOrElse List()
val printUsageFilters = request.getQueryString("printUsageIssueDate").flatMap(parseDateFromQuery).map { issueDate =>
PrintUsageFilters(
issueDate = issueDate,
sectionCode = request.getQueryString("printUsageSectionCode"),
pageNumber = request.getQueryString("printUsagePageNumber") flatMap parseIntFromQuery,
edition = request.getQueryString("printUsageEdition") flatMap parseIntFromQuery,
orderedBy = request.getQueryString("printUsageOrderedBy")
)
}
SearchParams(
query,
structuredQuery,
request.getQueryString("ids").map(_.split(",").toList),
request.getQueryString("offset") flatMap parseIntFromQuery getOrElse 0,
request.getQueryString("length") flatMap parseIntFromQuery getOrElse 10,
request.getQueryString("orderBy"),
request.getQueryString("since") flatMap parseDateFromQuery,
request.getQueryString("until") flatMap parseDateFromQuery,
request.getQueryString("modifiedSince") flatMap parseDateFromQuery,
request.getQueryString("modifiedUntil") flatMap parseDateFromQuery,
request.getQueryString("takenSince") flatMap parseDateFromQuery,
request.getQueryString("takenUntil") flatMap parseDateFromQuery,
request.getQueryString("archived") flatMap parseBooleanFromQuery,
request.getQueryString("hasExports") flatMap parseBooleanFromQuery,
request.getQueryString("hasIdentifier"),
request.getQueryString("missingIdentifier"),
request.getQueryString("valid") flatMap parseBooleanFromQuery,
request.getQueryString("free") flatMap parseBooleanFromQuery,
request.getQueryString("payType") flatMap parsePayTypeFromQuery,
request.getQueryString("hasRightsCategory") flatMap parseBooleanFromQuery,
request.getQueryString("uploadedBy"),
commaSep("labels"),
commaSep("hasMetadata"),
request.getQueryString("persisted") flatMap parseBooleanFromQuery,
commaSep("usageStatus").map(UsageStatus(_)),
commaSep("usagePlatform"),
request.user.accessor.tier,
request.getQueryString("syndicationStatus") flatMap parseSyndicationStatus,
request.getQueryString("countAll") flatMap parseBooleanFromQuery,
printUsageFilters,
)
}