Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- case class UserDO(
- id: Long,
- email: String
- ) {
- private var raw: Document = new Document()
- private def raw(d: Document): UserDO = {raw = d; this}
- def document: Document = {
- val r = m"""{_id: $id, email: $email}"""
- r.putAll(raw.asInstanceOf[util.Map[String, _]])
- r
- }
- def save(): Future[UpdateResult] = {
- UserDO.coll.replaceOne(m"_id: $id", document, new UpdateOptions().upsert(true))
- }
- def delete(): Future[DeleteResult] = UserDO.delete(id)
- }
- object UserDO {
- private[this] implicit def ec = inject[ExecutionContext]
- def parse(o: Document): UserDO = {
- UserDO(
- id = o.getLong("_id"),
- email = Option(o.getString("email")) getOrElse "").raw(o)
- }
- def get(id: Long): Future[Option[UserDO]] = {
- coll.find(m"_id:$id").first.map(_.map(UserDO.parse))
- }
- def getByEmail(email: String): Future[Option[UserDO]] = {
- coll.find(m"email:$email").first.map(_.map(UserDO.parse))
- }
- def delete(id: Long): Future[DeleteResult] = {
- coll.deleteOne(m"_id:$id")
- }
- def coll = inject[MongoDatabaseS].getCollection("userDO")
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement