2017-11-13 1 views
0

Ich habe eine ApiCall-Tabelle. Ich versuche sicherzustellen, dass für jeden API-Aufruf das entsprechende Token verwendet wurde. In einfachem Englisch, was ich denke, ich tue hier ist Filtern auf ApiCall von apiCallId, dann unter headOption (es sollte nur eine b/c apiCallId ist einzigartig), dann Mapping darauf. Aus irgendeinem Grund, gibt diese Funktion eine leere List() ...Slick gibt leere Liste zurück, wenn es ein Objekt zurückgeben sollte

def apiCallMatchesToken(apiCallId: ApiCallId, token: String): Future[Boolean] = { 

val tableQuery = ApiCalls.filter(_.apiCallId === apiCallId).result.headOption 

database.tryRun(tableQuery).map({ 
    case (a: ApiCallRow) => if (a.token == token) { true } else { false } 
    case _ => false 
}) 

} 

Ich habe doppelt geprüft, dass die apiCallId in meiner Datenbank vorhanden ist. Was ist das Problem?

+0

Sind Sie sicher, dass 'database.tryRun (tableQuery)' eine 'Option' vom Typ' ApiCallRow' zurückgibt? Ich würde eher denken, dass es etwas wie "Zukunft [Option [ApiCallRow]]" sein sollte. Darin würde es immer 'false' zurückgeben – Dnomyar

Antwort

1

Die wahrscheinlichste Antwort ist, dass Ihre Option [ApiCallRow] in etwas von tryRun Funktion hinzugefügt gewickelt ist - es Try[Option[ApiCallRow]] oder Future[Option[ApiCallRow]]. Try using using a flatMap` sein kann anstelle einer Karte oder Matching auf eine Option hier:

database.tryRun(tableQuery).flatMap({ case Some(a: ApiCallRow) => return Future.successful(a.token == token) case _ => Future.successful(false) })

+0

Sehr nah. Ich brauchte schließlich die 'flatMap',' Some' und kehrte 'Future.successful' zurück. Ich akzeptiere deine Antwort, aber du solltest sie vielleicht ändern, um das zu berücksichtigen. Danke vielmals! – cph2117

+0

Ich war mir nicht sicher über die 'tryRun'-Signatur, musste also einige Vermutungen anstellen :(. Ich habe die Antwort aktualisiert, können Sie nachsehen, ob meine Antwort jetzt korrekt ist? – Niemand

+0

Ja, das ist richtig. Vielen Dank . Sehr hilfreich! – cph2117

Verwandte Themen