Reactive Mongo&游戏模式:处理单位/无记录

时间:2016-06-07 15:42:24

标签: scala reactivemongo playframework-2.5 play-reactivemongo

我在PlayFramework中使用ReactiveMongo并在我的DAO中使用以下代码:

def find(authType: AuthType.Value, authAccountId: String) =
    collection.find(
      Json.obj(Fields.AuthType → authType,
        Fields.AuthAccountId → authAccountId)).one[Credentials].recover(wrapLastError)

其中Credentials定义为:

case class Credentials(
  authType: AuthType.Value,
  accountId: EntityId,
  authAccountId: String,
  passwordHash: Option[String],
  authToken: Option[String] = None,
  expirationTime: Option[DateTime] = None,
  id: EntityId = Entity.nextId)

在使用DAO find方法的服务类中,我有以下代码:

  def checkEmailPassword(email: String, password: String) =
    credentialsDAO.find(AuthType.EmailPassword, email).map {
      case Some(c: Credentials) if c.passwordHash.exists(ph ⇒ BCrypt.check(password, ph)) ⇒
        CheckResult(c.accountId)
      case None => Unit

    }

现在我的问题如下:处理DAO find方法没有返回结果的情况的最佳方法是什么?在上面的示例中,添加Case None会将方法的返回类型更改为Object。因此,如果我在控制器或任何其他类中使用它,会增加复杂性(例如映射/大小写/转换)。

提前致谢!

0 个答案:

没有答案