Created
March 21, 2022 11:41
-
-
Save Ahmedgadein/941775d193c1b8bedcd3f89303d401ac to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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