aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/core/rest
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/xyz/driver/core/rest')
-rw-r--r--src/main/scala/xyz/driver/core/rest/errors/serviceException.scala24
-rw-r--r--src/main/scala/xyz/driver/core/rest/package.scala10
2 files changed, 21 insertions, 13 deletions
diff --git a/src/main/scala/xyz/driver/core/rest/errors/serviceException.scala b/src/main/scala/xyz/driver/core/rest/errors/serviceException.scala
index d842c94..095936e 100644
--- a/src/main/scala/xyz/driver/core/rest/errors/serviceException.scala
+++ b/src/main/scala/xyz/driver/core/rest/errors/serviceException.scala
@@ -1,22 +1,20 @@
package xyz.driver.core.rest.errors
-sealed abstract class ServiceException extends Exception {
- def message: String
-}
+sealed abstract class ServiceException(val message: String) extends Exception(message)
-final case class InvalidInputException(override val message: String = "Invalid input") extends ServiceException
+final case class InvalidInputException(override val message: String = "Invalid input") extends ServiceException(message)
final case class InvalidActionException(override val message: String = "This action is not allowed")
- extends ServiceException
+ extends ServiceException(message)
-final case class ResourceNotFoundException(override val message: String = "Resource not found") extends ServiceException
+final case class ResourceNotFoundException(override val message: String = "Resource not found")
+ extends ServiceException(message)
-final case class ExternalServiceException(serviceName: String, serviceMessage: String) extends ServiceException {
- override def message = s"Error while calling '$serviceName': $serviceMessage"
-}
+final case class ExternalServiceException(serviceName: String, serviceMessage: String)
+ extends ServiceException(s"Error while calling '$serviceName': $serviceMessage")
-final case class ExternalServiceTimeoutException(serviceName: String) extends ServiceException {
- override def message = s"$serviceName took too long to respond"
-}
+final case class ExternalServiceTimeoutException(serviceName: String)
+ extends ServiceException(s"$serviceName took too long to respond")
-final case class DatabaseException(override val message: String = "Database access error") extends ServiceException
+final case class DatabaseException(override val message: String = "Database access error")
+ extends ServiceException(message)
diff --git a/src/main/scala/xyz/driver/core/rest/package.scala b/src/main/scala/xyz/driver/core/rest/package.scala
index 3b17167..07eb92e 100644
--- a/src/main/scala/xyz/driver/core/rest/package.scala
+++ b/src/main/scala/xyz/driver/core/rest/package.scala
@@ -227,6 +227,16 @@ object `package` {
val paginated: Directive1[Pagination] =
parameters(("pageSize".as[Int] ? 100, "pageNumber".as[Int] ? 1)).as(Pagination)
+ private def extractPagination(pageSizeOpt: Option[Int], pageNumberOpt: Option[Int]): Option[Pagination] =
+ (pageSizeOpt, pageNumberOpt) match {
+ case (Some(size), Some(number)) => Option(Pagination(size, number))
+ case (None, None) => Option.empty[Pagination]
+ case (_, _) => throw new IllegalArgumentException("Pagination's parameters are incorrect")
+ }
+
+ val optionalPagination: Directive1[Option[Pagination]] =
+ parameters(("pageSize".as[Int].?, "pageNumber".as[Int].?)).as(extractPagination)
+
def paginationQuery(pagination: Pagination) =
Seq("pageNumber" -> pagination.pageNumber.toString, "pageSize" -> pagination.pageSize.toString)
}