Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package lesson1
- import scala.util.{Failure, Try}
- /**
- * Created by vmarg on 07-Aug-16.
- */
- trait UserRepository {
- def getUser(id:Int):Try[User]
- def findUser(userName:Option[String], email:Option[String]):Option[User]
- }
- trait EmailValidator {
- def isValidEmail(email:String):Boolean
- }
- trait PasswordValidator {
- def isValidPassword(password:String):Boolean
- }
- trait PasswordHasher {
- def hashPassword(password:String):String
- }
- trait UserIdPool {
- def reserveNewUserId:Int
- }
- class UserFactory(
- repo:UserRepository,
- emailValidator: EmailValidator,
- passwordValidator: PasswordValidator,
- passwordHasher: PasswordHasher,
- userIdPool: UserIdPool) {
- def getNew(email:String, username:String, rawPassword:String):Try[User] = {
- val existingUser = repo.findUser(Option(username), Option(email))
- existingUser match {
- case Some(user) => Failure(IllegalArgumentException)
- case None =>
- if (passwordValidator.isValidPassword(rawPassword) && emailValidator.isValidEmail(email))
- Try(User(userIdPool.reserveNewUserId, email, username, passwordHasher.hashPassword(rawPassword)))
- else Failure(IllegalArgumentException)
- }
- }
- }
- case class User(id:Int, email:String, username:String, password:String)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement