def commasToList()

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,
    )
  }