我有以下目标:创建一个单子,添加一个具有以下计算流程的用户:
- 检查用户是否存在指定的电子邮件,如果不存在则:
- 检查给定的凭据是否正常(密码足够长等)。如果他们没问题,那么:
- 将用户保存到数据库
我的第一个“草稿”是这样的:
val work: DBIO[UserId] = for {
userO <- UserRepository.findByEmail(createdUser.email) //userO is Option[User]
//This won't work cause Action.withFilter doesnt exist
if userO.isEmpty
//as above, validate user actually returns an ValidateNel[String, User]
if User.validateUser(createdUser.email, createdUser.password).isValid
//Returns DBIO[UserId]
id <- UserRepository.save(createdUser)
} yield id
任何想法在我可以db.run(...)的一个单子计算中写下来的最佳方法是什么?我正在使用 Cats + Slick 3.0。如果有帮助,我还从https://groups.google.com/forum/?fromgroups#!topic/scalaquery/HrvrvyEIopw写了一个简单的隐式 dbioMonad。