我在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。因此,如果我在控制器或任何其他类中使用它,会增加复杂性(例如映射/大小写/转换)。
提前致谢!