Skip to content

Commit 4eebd94

Browse files
authored
Merge pull request #19 from Tgo1014/feature/flow-updates
Flow updates
2 parents bfa2379 + 867c9b0 commit 4eebd94

File tree

4 files changed

+21
-9
lines changed

4 files changed

+21
-9
lines changed

app/src/main/java/com/monstarlab/arch/extensions/UseCaseExtensions.kt

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,28 @@ package com.monstarlab.arch.extensions
33
import com.monstarlab.core.domain.error.ErrorModel
44
import com.monstarlab.core.domain.error.toError
55
import kotlinx.coroutines.flow.Flow
6+
import kotlinx.coroutines.flow.FlowCollector
7+
import kotlinx.coroutines.flow.catch
68
import kotlinx.coroutines.flow.flow
9+
import kotlinx.coroutines.flow.map
710
import kotlinx.coroutines.flow.transform
8-
11+
import timber.log.Timber
912

1013
sealed class UseCaseResult<out T> {
1114
data class Success<T>(val value: T) : UseCaseResult<T>()
1215
data class Error(val error: ErrorModel) : UseCaseResult<Nothing>()
1316
}
1417

1518
suspend inline fun <T> safeUseCase(
16-
crossinline block: suspend () -> T
19+
crossinline block: suspend () -> T,
1720
): UseCaseResult<T> = try {
1821
UseCaseResult.Success(block())
1922
} catch (e: ErrorModel) {
2023
UseCaseResult.Error(e.toError())
2124
}
2225

23-
inline fun <T> safeFlow(
24-
crossinline block: suspend () -> T
26+
inline fun <T> useCaseFlow(
27+
crossinline block: suspend () -> T,
2528
): Flow<UseCaseResult<T>> = flow {
2629
try {
2730
val repoResult = block()
@@ -33,6 +36,15 @@ inline fun <T> safeFlow(
3336
}
3437
}
3538

39+
fun <T> observableFlow(block: suspend FlowCollector<T>.() -> Unit): Flow<UseCaseResult<T>> = flow(block)
40+
.catch { exception ->
41+
Timber.e(exception)
42+
UseCaseResult.Error(exception.toError())
43+
}
44+
.map {
45+
UseCaseResult.Success(it)
46+
}
47+
3648
fun <T> Flow<UseCaseResult<T>>.onSuccess(action: suspend (T) -> Unit): Flow<UseCaseResult<T>> = transform { result ->
3749
if(result is UseCaseResult.Success<T>) {
3850
action(result.value)
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.monstarlab.core.usecases.blog
22

33
import com.monstarlab.arch.extensions.UseCaseResult
4-
import com.monstarlab.arch.extensions.safeFlow
4+
import com.monstarlab.arch.extensions.useCaseFlow
55
import com.monstarlab.core.data.repositories.PostRepository
66
import com.monstarlab.core.domain.model.Post
77
import kotlinx.coroutines.flow.Flow
@@ -10,7 +10,7 @@ import javax.inject.Inject
1010
class GetPostsUseCase @Inject constructor(
1111
private val postRepository: PostRepository
1212
){
13-
fun getPosts(): Flow<UseCaseResult<List<Post>>> = safeFlow {
13+
fun getPosts(): Flow<UseCaseResult<List<Post>>> = useCaseFlow {
1414
postRepository.getPosts()
1515
}
1616
}

app/src/main/java/com/monstarlab/core/usecases/resources/GetResourcesUseCase.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.monstarlab.core.usecases.resources
22

3-
import com.monstarlab.arch.extensions.safeFlow
3+
import com.monstarlab.arch.extensions.useCaseFlow
44
import com.monstarlab.core.data.repositories.ResourceRepository
55
import kotlinx.coroutines.delay
66
import javax.inject.Inject
@@ -9,7 +9,7 @@ class GetResourcesUseCase @Inject constructor(
99
private val resourceRepository: ResourceRepository
1010
) {
1111

12-
fun getResources() = safeFlow {
12+
fun getResources() = useCaseFlow {
1313
delay(2000)
1414
resourceRepository.getResources()
1515
}

app/src/main/java/com/monstarlab/core/usecases/user/LoginUseCase.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class LoginUseCase @Inject constructor(
1010
private val userRepository: UserRepository
1111
) {
1212

13-
fun login(email: String, password: String): Flow<UseCaseResult<User>> = safeFlow {
13+
fun login(email: String, password: String): Flow<UseCaseResult<User>> = useCaseFlow {
1414
userRepository.login(email, password)
1515
userRepository.getUser()
1616
}

0 commit comments

Comments
 (0)