Это действительно простой вариант использования, но я не нахожу никакого изящного способа справиться с этим.
Ниже того, что я пытаюсь сделать. Это довольно явно ...
Примечание: users.byEmail
возвращает Future[Option[User]]
.
override def invokeBlock[A](request: Request[A], block: UserRequest[A] => Future[Result]): Future[Result] = {
val useEmail: Option[String] = request.session.get("userEmail")
if (useEmail.isEmpty) {
return Future.successful(Results.Unauthorized(("No email")))
}
val user: Option[User] = Await.result(users.byEmail(useEmail.get), Duration(1, TimeUnit.MINUTES))
if (user.isEmpty) {
return Future.successful(Results.Unauthorized(("No user")))
}
block(UserRequest(user.get, request))
}
Каков «правильный» способ написать это?