永続レイヤーに値を挿入して結果オブジェクトを返す場合、通常は、入力データを再度返すのではなく、新しく作成されたエンティティをフェッチすることをお勧めします。
Reactivemongo を使用して Scala でこれを実行しようとすると、自分の言語スキルにつまずきます。
def create(user: User): Future[User] = {
val newUser = user.createOID()
collection.insert(newUser).map {
case ok if ok.ok => {
for {
createdUser <- this.findOne(BSONDocument("_id" -> newUser._id))
} yield {
createdUser match {
case None => throw new RuntimeException("Could not find just created user")
case Some(x) => x
}
}
}
case error => throw new RuntimeException(error.message)
}
}
findOne の署名は次のとおりです。
def findOne(query: BSONDocument): Future[Option[User]]
次のエラーが表示されます。
[error] found : scala.concurrent.Future[models.User]
[error] required: models.User
[error] createdUser <- this.findOne(BSONDocument("_id" -> newUser._id))
[error] ^
newUser オブジェクトを返せば問題ありません。
ここで何が起こっているのかを一般的に誤解していると思います-作成されたオブジェクトを一度に取得するより良い方法があるかもしれません。