pakoito
03/18/2020, 10:44 PMmyEither.fold({ IO.unit }, { IO.effect { susFun() } }).bind()
kartoffelsup
03/18/2020, 10:51 PMoverride suspend fun authenticate(request: Tuple2<Password, Email>): Either<String, AuthenticatedUser> {
val (providedPassword, email) = request
val findUser: Either<String, User> = userRepository.findUserByEmail(email)
return findUser.fold(
ifLeft = { it.left() },
ifRight = { dbUser ->
val hashedPw = hashPw(providedPassword, email)
if (dbUser.email.value == email.value && dbUser.password?.value?.contentEquals(hashedPw.payload) == true) {
val toUpdate = dbUser.copy(lastLogin = ZonedDateTime.now())
return userRepository.updateUser(toUpdate)
.map { AuthenticatedUser(it, null) }
} else {
Either.left("Invalid credentials.")
}
}
)
}
pakoito
03/19/2020, 2:12 AM== true
is unnecessary (pet peeve)pakoito
03/19/2020, 2:13 AMpakoito
03/19/2020, 2:13 AMpakoito
03/19/2020, 2:13 AMreturn
from return userRepository.updateUser
pakoito
03/19/2020, 2:13 AMpakoito
03/19/2020, 2:14 AMpakoito
03/19/2020, 2:15 AMkartoffelsup
03/19/2020, 7:33 PMkartoffelsup
03/19/2020, 7:47 PMkartoffelsup
03/19/2020, 7:48 PM== true
is necessary because it's a nullable boolean, or am I missing something?pakoito
03/19/2020, 7:56 PMkartoffelsup
03/19/2020, 8:18 PMpakoito
03/19/2020, 9:29 PMQueue
pakoito
03/19/2020, 9:29 PMkartoffelsup
03/19/2020, 9:54 PMkartoffelsup
03/19/2020, 9:56 PM