Advertisement
Guest User

Untitled

a guest
May 3rd, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.10 KB | None | 0 0
  1. case class UserDO(
  2.   id: Long,
  3.   email: String
  4. ) {
  5.  
  6.   private var raw: Document = new Document()
  7.   private def raw(d: Document): UserDO = {raw = d; this}
  8.  
  9.   def document: Document = {
  10.     val r = m"""{_id: $id, email: $email}"""
  11.     r.putAll(raw.asInstanceOf[util.Map[String, _]])
  12.     r
  13.   }
  14.  
  15.   def save(): Future[UpdateResult] = {
  16.     UserDO.coll.replaceOne(m"_id: $id", document, new UpdateOptions().upsert(true))
  17.   }
  18.  
  19.   def delete(): Future[DeleteResult] = UserDO.delete(id)
  20. }
  21.  
  22. object UserDO {
  23.   private[this] implicit def ec = inject[ExecutionContext]
  24.  
  25.   def parse(o: Document): UserDO = {
  26.     UserDO(
  27.       id = o.getLong("_id"),
  28.       email = Option(o.getString("email")) getOrElse "").raw(o)
  29.   }
  30.  
  31.   def get(id: Long): Future[Option[UserDO]] = {
  32.     coll.find(m"_id:$id").first.map(_.map(UserDO.parse))
  33.   }
  34.  
  35.   def getByEmail(email: String): Future[Option[UserDO]] = {
  36.     coll.find(m"email:$email").first.map(_.map(UserDO.parse))
  37.   }
  38.  
  39.   def delete(id: Long): Future[DeleteResult] = {
  40.     coll.deleteOne(m"_id:$id")
  41.   }
  42.  
  43.   def coll = inject[MongoDatabaseS].getCollection("userDO")
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement