I agree with @Pawel, and I think the following example is more detailed as you want:
object Paging { case class PageReq( page: Int = 1, size: Int = DefaultPageSize, sortFields: Option[List[String]] = None, sortDirections: Option[List[String]] = None) { def offset = (page - 1) * size } case class PageRes[T](items: Seq[T], total: Long) } UsersDao { val users: TableQuery[UsersTable] = UsersTable.query def findBySomeParam(params: A, pageReq: PageReq): Future[PageRes[User]] = { db.run(users.result) .filter(params) .map { r => PageRes(items = r.slice(pageReq.offset, pageReq.offset + pageReq.size), total = r.size) } } }
source share