Advertisement
Guest User

Untitled

a guest
Sep 27th, 2016
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.24 KB | None | 0 0
  1. package lesson1
  2.  
  3. import scala.util.{Failure, Try}
  4.  
  5. /**
  6. * Created by vmarg on 07-Aug-16.
  7. */
  8.  
  9. trait UserRepository {
  10. def getUser(id:Int):Try[User]
  11.  
  12. def findUser(userName:Option[String], email:Option[String]):Option[User]
  13. }
  14. trait EmailValidator {
  15. def isValidEmail(email:String):Boolean
  16. }
  17. trait PasswordValidator {
  18. def isValidPassword(password:String):Boolean
  19. }
  20. trait PasswordHasher {
  21. def hashPassword(password:String):String
  22. }
  23. trait UserIdPool {
  24. def reserveNewUserId:Int
  25. }
  26. class UserFactory(
  27. repo:UserRepository,
  28. emailValidator: EmailValidator,
  29. passwordValidator: PasswordValidator,
  30. passwordHasher: PasswordHasher,
  31. userIdPool: UserIdPool) {
  32.  
  33. def getNew(email:String, username:String, rawPassword:String):Try[User] = {
  34. val existingUser = repo.findUser(Option(username), Option(email))
  35. existingUser match {
  36. case Some(user) => Failure(IllegalArgumentException)
  37. case None =>
  38. if (passwordValidator.isValidPassword(rawPassword) && emailValidator.isValidEmail(email))
  39. Try(User(userIdPool.reserveNewUserId, email, username, passwordHasher.hashPassword(rawPassword)))
  40. else Failure(IllegalArgumentException)
  41. }
  42. }
  43. }
  44.  
  45. case class User(id:Int, email:String, username:String, password:String)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement