有没有办法检查记录是否存在?

时间:2019-04-24 16:26:15

标签: vapor-fluent

我正在使用外部身份验证系统来验证用户。但是我想从该外部系统中捕获结果,并为成功进行身份验证并且尚未在本地数据库中的用户创建一条记录。

我已经为外部身份验证系统编写了自定义中间件,该中间件正在运行,但是我不知道如何检查用户是否已存在于当前数据库中。我目前正在使用FluentSQLite作为后台数据库。

let creds = returnFromExternalAuth()
// creds = ["id": "1", "emailAdress": "blah@blah.com", "firstName": "Test", "lastname": "User"]

let user = User.query(on: request).filter(\.ID == id).first()
// returns EventLoopFuture<User?>

我想做的是类似的事情

if let user = try User.query(on: request).filter(\.ID == id).first(){

// Return the found DB user
return User.query(on: request).filter(\.ID == id).first()

} else {

// create db entry for user
// Query and return the newly created DB object
return User.query(on: request).filter(\.ID == id).first() 

}

这不适用于.first(),因为它不会返回Optional。

在此先感谢您的帮助,想法或建议。

德里克

1 个答案:

答案 0 :(得分:0)

更新:

我想我在这里工作是有兴趣的人的解决方案。

return User.query(on: request).filter(\User.ID == id).first().flatMap { optional in
   if let _ = optional {
      return User.query(on: request).filter(\User.ID == id).first()
   } else {
      _ = User(ID: creds["id"], emailAddress: creds["emailAddress"], firstName: creds["firstName"], lastName: creds["lastName"]).save(on: request)
      return User.query(on: request).filter(\.ID == id).first()
   }
}