Skip to content

Instantly share code, notes, and snippets.

@NTCoding
Created December 12, 2015 11:01
Show Gist options
  • Select an option

  • Save NTCoding/45eabea24126435c4c96 to your computer and use it in GitHub Desktop.

Select an option

Save NTCoding/45eabea24126435c4c96 to your computer and use it in GitHub Desktop.
object RecommendAFriend {
type RecommendAFriendResult = Either[RecommendAFriendError, Seq[ReferralOutcome]]
type RecommendAFriend = (UserId, NewAccountDetails) => Future[Either[RecommendAFriendError, Seq[ReferralOutcome]]]
type ValidateNewAccount = NewAccountDetails => Option[RecommendAFriendError]
type FindUser = UserId => Future[Option[User]]
type CreateFriend = NewAccountDetails => Future[User]
def apply(v: ValidateNewAccount, f: FindUser, c: CreateFriend, p: ReferralPolicy)
(u: UserId, n: NewAccountDetails): Future[RecommendAFriendResult] =
v(n) map { err } getOrElse { f(u) flatMap {
case Some(us) => c(n) map { p(us, _) }
case None => fer
}}
private def err(e: RecommendAFriendError) = Future.successful(Left(e))
private val fer = Left(RecommendAFriendError("Error finding user"))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment