Skip to content

Instantly share code, notes, and snippets.

@iamthiago
Last active June 23, 2017 02:03
Show Gist options
  • Save iamthiago/68cf9a8b05ec8369d04931efb48a17b9 to your computer and use it in GitHub Desktop.
Save iamthiago/68cf9a8b05ec8369d04931efb48a17b9 to your computer and use it in GitHub Desktop.
object AddressRepository extends DBConnection {
val table = TableQuery[AddressModel]
def search(filter: Address): Future[Seq[Address]] = {
@tailrec
def recursive(queryMap: Map[String, String], queryAccum: Query[AddressModel, Address, Seq]): Query[AddressModel, Address, Seq] = {
if (queryMap.isEmpty) queryAccum else {
val key = queryMap.head._1
val value = queryMap.head._2
val resultQuery = key match {
case "state" => queryAccum.filter(_.state === value)
case "city" => queryAccum.filter(_.city === value)
case "neighborhood" => queryAccum.filter(_.neighborhood === value)
case "street" => queryAccum.filter(_.street === value)
case "streetNumber" => queryAccum.filter(_.streetNumber === value)
}
recursive(queryMap.tail, resultQuery)
}
}
val query = recursive(filter.toMap(), table)
db.run(query.result)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment