Я новичок в 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?