Skip to content

Instantly share code, notes, and snippets.

View leandrob13's full-sized avatar

Leandro Bolivar leandrob13

View GitHub Profile
package user.persistence.tables
object UserTables {
val driver = slick.driver.MySQLDriver
import driver.api._
class Users(tag: Tag) extends Table[UserRegister](tag, "USERS") {
val username: Rep[ String ] = column[ String ]( "USERNAME", O.PrimaryKey )
@leandrob13
leandrob13 / SlickQueryOps.scala
Last active July 14, 2022 21:09
Trait that adds two functions to the slick Query type. I am using typelevel.cats as the functional library. Works for play-slick 3.1
trait SlickQueryOps {
databaseConfig: HasDatabaseConfig[ JdbcProfile ] =>
import cats.Apply
import cats.std.list._
import driver.api._
type BooleanOp = ( Rep[ Boolean ], Rep[ Boolean ] ) => Rep[ Boolean ]
implicit class OptionFilter[ X, Y ]( query: Query[ X, Y, Seq ] ) {
@leandrob13
leandrob13 / OptionFilter.scala
Created September 25, 2015 13:36
Based on MaybeFilter (https://gist.github.com/cvogt/9193220), it uses implicit class to add the methods to the Query objects. FilteredBy works for filtering lists and it returns the query if no filters were applied. FoundBy works for finding a single register, if no filter defined it returns None.
implicit class OptionFilter[ X, Y ]( query: Query[ X, Y, Seq ] ) {
def filteredBy[ T ]( op: Option[ T ] )( f: ( X, T ) => Column[ Option[ Boolean ] ] ): Query[ X, Y, Seq ] = {
op map { o => query.filter( f( _, o ) ) } getOrElse { query }
}
def foundBy[ T ]( op: Option[ T ] )( f: ( X, T ) => Column[ Option[ Boolean ] ] ): Query[ X, Y, Seq ] = {
op map { o => query.filter( f( _, o ) ) } getOrElse { query.take( 0 ) }
}
}