Skip to content

Instantly share code, notes, and snippets.

@Ahmedgadein
Created March 21, 2022 11:41
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save Ahmedgadein/941775d193c1b8bedcd3f89303d401ac to your computer and use it in GitHub Desktop.
Save Ahmedgadein/941775d193c1b8bedcd3f89303d401ac to your computer and use it in GitHub Desktop.
interface AuthRepository{
fun isSignedIn(): Flow<Result<Boolean>>
fun isRegistered(token: String): Flow<Result<Boolean>>
fun signIn(user: User): Flow<Result<Boolean>>
fun register(user: User): Flow<Result<Boolean>>
}
class AuthRepoImpl(val remoteService: MyService){
override fun isSignedIn(): Flow<Result<Boolean>> =
callbackFlow {
trySend(Result.Loading)
val listener = remoteService.isSignedIn()
.onComplete{ result: Boolean ->
trySend(Result.Success(result))}
.onFailure{ result: Boolean ->
trySend(Result.Error("checking auth state failed"))}
awaitClose{
listener.close()
}
}
override fun isRegistered(token: String): Flow<Result<Boolean>> =
callbackFlow {
trySend(Result.Loading)
val listener = remoteService.findUserWithToken(token)
.onComplete { response : MyServiceResponse ->
trySend(Result.Success(!response.isNullOrEmpty())) }
.onFailure { result: Boolean ->
trySend(Result.Error("checking auth registration failed")) }
awaitClose {
listener.close()
}
}
override fun signIn(user: User): Flow<Result<Boolean>> =
callbackFlow {
trySend(Result.Loading)
val listener = remoteService.signIn(user.token, user.toJson())
.onComplete { result: MyServiceResponse ->
trySend(Result.Success(result.isSuccess)) }
.onFailure { result: Boolean ->
trySend(Result.Error("Signin failed")) }
awaitClose {
listener.close()
}
}
override fun register(user: User): Flow<Result<Boolean>> =
callbackFlow {
trySend(Result.Loading)
val listener = remoteService.signIn(user.toJson())
.onComplete { result: MyServiceResponse ->
trySend(Result.Success(result.isSuccess)) }
.onFailure { result: Boolean ->
trySend(Result.Error("Registration failed")) }
awaitClose {
listener.close()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment