aboutsummaryrefslogblamecommitdiff
path: root/src/main/scala/xyz/driver/pdsuicommon/http/Directives.scala
blob: bb6a9e3c9fa16bb1169c1cf707445d090f71b419 (plain) (tree)






























                                                                                                     
package xyz.driver.pdsuicommon.http

import akka.http.scaladsl.server.Directive1
import akka.http.scaladsl.server.Directives._
import xyz.driver.pdsuicommon.parsers._
import xyz.driver.pdsuicommon.db.{Pagination, Sorting, SearchFilterExpr}
import scala.util._

trait Directives {

  val paginated: Directive1[Pagination] = parameters(('pageSize.as[Int], 'pageNumber.as[Int])).tmap {
    case (size, number) => Pagination(size, number)
  }

  def sorted(validDimensions: Set[String]): Directive1[Sorting] = parameterSeq.flatMap{ params =>
    SortingParser.parse(validDimensions, params) match {
      case Success(sorting) => provide(sorting)
      case Failure(ex) => failWith(ex)
    }
  }

  val searchFiltered: Directive1[SearchFilterExpr] = parameterSeq.flatMap{ params =>
    SearchFilterParser.parse(params) match {
      case Success(sorting) => provide(sorting)
      case Failure(ex) => failWith(ex)
    }
  }

}

object Directives extends Directives