This code check if User exists and accordingly either returns the User or throws an exception
def confirmSignupforUser(user:User):Future[User] = {
val newInternalProfile = user.profile.internalProfileDetails.get.copy(confirmed=true)
val newProfile = UserProfile(Some(newInternalProfile),user.profile.externalProfileDetails)
val confirmedUser = user.copy(profile=newProfile)
for(userOption <- userRepo.update(confirmedUser)) yield {
userOption match {
case Some(user) => user
case None => throw UserDoesNotExistException("userNotExist",new Throwable("userNotExist"))
}
}
}
If I call the code as follows, I get error non-variable type argument models.User in type pattern Option[models.User] is unchecked since it is eliminated by erasure
for line modifiedUser:Option[User] <- if (userOption.isDefined) {confirmSignupforUser(userOption.get)} else Future.successful(None) Why?
val result:Future[Result] = for{tokenOption:Option[UserToken] <- if(host != "" && redirectUrl != "" && successUrlParameter != "" && failUrlParameter != "") { userTokenRepo.findOne(UserTokenKey(UUID.fromString(token)))} else {Future.successful(None)}
userOption:Option[User] <- if (tokenOption.isDefined) {userRepo.findOne(tokenOption.get.userKeys)} else {Future.successful(None)}
modifiedUser:Option[User] <- if (userOption.isDefined) {confirmSignupforUser(userOption.get)} else Future.successful(None)
deletedToken:Option[UserTokenKey] <- if(modifiedUser.isDefined) {userTokenRepo.delete(UserTokenKey(UUID.fromString(token)))} else Future.successful(None)
}
yield {
...
}