【发布时间】:2019-04-03 23:15:16
【问题描述】:
我是 Slick 的新手,遇到以下问题。
我正在尝试实现这里定义的方法createUser
def createUser(data: UserCreate): Future[User] = {
val userRow = User(userId = UUID.randomUUID(),
email = data.email, password = data.password,
firstName = data.firstName, lastName = data.lastName, balance = 0)
val userAction =
Users
.filter(_.email === data.email).result.headOption.flatMap {
case Some(res) =>
// mylog("product was there: " + product)
DBIO.successful(res)
case None =>
// mylog("inserting product")
(Users returning Users.map(_.id) into (
(user, newId) => user.copy(id = Some(newId)))
) += userRow
}
.transactionally
db.run(userAction)
}
问题是如果用户已经存在我想给出一个错误,所以方法的签名应该是
def createUser(data: UserCreate): Future[Either[RecordAlreadyExists, User]]
您知道我该怎么做吗?没有引发 Throwable?
【问题讨论】: