環境: 遊ぼう! 2.2.3、ReactiveMongo 0.10.0-SNAPSHOT
ドキュメントのリスト (「プロジェクト」としましょう) と、フィールドに入力するモーダル ダイアログをポップアップするボタンを含むページがあるとします。[OK] ボタンを押すと、ページは JSON 本文を含むリクエストをバックエンドに送信します。
{
name: "Awesome Project",
url: "https://github.com/ab/cd",
repository: "git@github.com/ab/cd.git",
script: "empty"
}
Action
バックエンドは、次のように定義された にリクエストをルーティングします。
def projectsCollection: JSONCollection = db.collection[JSONCollection]("projects")
def create = Action.async(parse.json) { request =>
projectsCollection.insert(request.body) map {
case LastError(true,_,_,_,Some(doc),_,_) => Created(JsObject(List(
"result" -> JsString("OK") ,
"doc" -> BSONFormats.toJSON(doc)
)))
case LastError(false, err, code, msg, _, _, _) => NotAcceptable(JsObject(List(
"result" -> JsString("ERROR"),
"error" -> JsString(err.getOrElse("unknown")),
"code" -> JsNumber(code.getOrElse[Int](0)),
"msg" -> JsString(msg.getOrElse("no messsage"))
)))
}
}
LastError
ケース クラスには、要求応答本文で返されるパラメーターがありますがoriginalDocument: Option[BSONDocument]
、期待したドキュメントではありません。塗りつぶされたドキュメント、BSONObjectID
または少なくとも_id
それ自体が必要です。
新しく作成されたドキュメントを取得しようとすると、すべてが にラップされているため、行き止まりになりましたFuture
。
タスクを実行するエレガントなコードを作成する方法は?