2017-06-08 7 views
0

を持続していない...それは、データベース内のpersisをしません。この場合には手段を動作しない....Scalaの滑らかな、私は動作しません。次のコードを持っているデータ

DTO/DAO

def createChangelogEntry(changeLog: ChangelogModel): Future[ChangelogModel] = { 
    println("..........................................") 
    println(changeLog) 

    val entry = 
     (changelogs returning changelogs.map(_.id) 
     into ((log,id) => log.copy(id=Some(id))) 
     ) += ChangelogModel(None, changeLog.createdat, changeLog.text) 

    db.run(entry) 
    } 

この場合、何が問題になる可能性がありますか?モデルの試合が正常に動作します...

UUpdate:

SQL:

CREATE TABLE Changelog (
    id BIGINT(255) NOT NULL, 
    createdat DATETIME NOT NULL, 
    text text NOT NULL 
)ENGINE=InnoDB DEFAULT CHARSET=utf8; 

マイモデル:

package models 

import java.sql.Date 

import play.api.libs.json.{JsValue, Json, Writes} 

/** 
    * Created by Felix Hohlwegler on 08.06.2017. 
    */ 
case class ChangelogModel(
          id: Option[Int] = None, 
          createdat: String, 
          text: String 
         ) 

object ChangelogModel { 
    implicit val changelogFormat = Json.format[ChangelogModel] 
} 

コントローラ機能:

package controllers 

import javax.inject.{Inject, Singleton} 

import dto.changelogDTO 
import models.{ChangelogModel, ProcessTemplatesModel} 
import play.api.libs.json.{JsError, JsSuccess, Json} 
import play.api.mvc.{Action, AnyContent, Controller, Request} 

import scala.concurrent.Future 

/** 
    * Created by Felix Hohlwegler on 08.06.2017. 
    */ 
@Singleton 
class Changelogs @Inject()(changelogDTO: changelogDTO) extends Controller { 

    def createChangelogEntry = Action { implicit request => 
    request.body.asJson.map(_.validate[ChangelogModel] match { 
     case JsSuccess(process, _) => 
     changelogDTO.createChangelogEntry(process) 
     case [email protected](_) => BadRequest("TEST") 
     case _ => BadRequest("fail to create Counter") 
    }).getOrElse(BadRequest("Failure tu create Counter")) 
    Ok("s") 
    } 
} 
+1

と例外がスローされないされている。一方

def createChangelogEntry = Action.async(parse.json) { implicit request => request.body.validate[ChangelogModel].fold( errors => Future(BadRequest(JsError.toJson(errors))), changelogModel => changelogDTO.createChangelogEntry(changelogModel).map(model => Ok(Json.toJson(model)) ) } 

あなたはそれが簡単にちょうどこのようAwait.resultであなたの現在の挿入をラップすることにより、デバッグするかもしれませんか? –

+0

それは完全に動作するようには見えませんが、データベースは空です... – Felix

+0

設定を投稿できますか? – Tyler

答えて

1

一つの問題あなたがいないということですお使いのコントローラから完了するためにあなたの挿入を待っている:

// Problem 
case JsSuccess(process, _) => changelogDTO.createChangelogEntry(process) 

あなたは将来にマッピングする必要がありますし、非同期的に、このようにその結果を返す:

// Do this 
case JsSuccess(process, _) => changelogDTO.createChangelogEntry(process).map(model => Ok(Json.toJson(model)) 

はしかし、これはあなたがのすべてを必要とすることを意味します他の場合も先物を返すことになり、その結果のアクションをasyncによって変更する必要があります。これは私がそれを行うだろうかです:

import scala.concurrent.duration._ 

case JsSuccess(process, _) => 
    val model = Await.result(changelogDTO.createChangelogEntry(process), 5 seconds) 
    Ok("We inserted the thing") 
+0

Awaitは古くは使用することを推奨していません.... perfektを待たずに動作する他の多くのインサートがあります。 – Felix

+0

"その間に、現在のインサートをラッピングするだけで**デバッグ**が簡単になるかもしれませんAwaitで " – Tyler

+0

他に解決策はありませんか? – Felix

関連する問題