Skip to content

Commit ea31b52

Browse files
#22 - configurando tratamento de erro no API
1 parent 308d835 commit ea31b52

File tree

11 files changed

+59
-129
lines changed

11 files changed

+59
-129
lines changed

core-networking/src/main/java/com/codandotv/streamplayerapp/core_networking/handleError/Failure.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,26 @@ package com.codandotv.streamplayerapp.core_networking.handleError
66
sealed class Failure(val code: Int? = -1, val errorMessage: String) : java.lang.Exception() {
77
data class NoDataContent(val codeStatus: Int? = null) : Failure(codeStatus, "No data content")
88
data class ServerError(val codeStatus: Int? = null) : Failure(codeStatus, "Server error!")
9-
data class GenericError(val codeStatus: Int? = -1100,
9+
data class GenericError(val codeStatus: Int? = -12,
1010
private val msg: String? = null) : Failure(codeStatus, msg
1111
?: MSG_DEFAULT)
1212

13-
data class NetworkError(val codeStatus: Int? = -1200,
13+
data class NetworkError(val codeStatus: Int? = -13,
1414
private val throwable: Throwable) : Failure(codeStatus, "Sem conexão. Verifique o wifi ou dados móveis e tente novamente em alguns instantes.")
1515

1616
data class UnknownError(val codeStatus: Int? = null,
1717
private val throwable: Throwable? = Exception()) : Failure(codeStatus, throwable?.message
1818
?: MSG_DEFAULT)
1919

20-
data class UnexpectedApiException(val codeStatus: Int? = -1011,
20+
data class UnexpectedApiException(val codeStatus: Int? = -14,
2121
private val throwable: Throwable? = Exception()) : Failure(codeStatus, throwable?.message
2222
?: MSG_DEFAULT)
2323

24-
data class ClientException(val codeStatus: Int? = -1011,
24+
data class ClientException(val codeStatus: Int? = -15,
2525
private val throwable: Throwable? = Exception()) : Failure(codeStatus, throwable?.message
2626
?: MSG_DEFAULT)
2727

28-
data class UnparsableResponseException(val codeStatus: Int? = -1012,
28+
data class UnparsableResponseException(val codeStatus: Int? = -16,
2929
private val throwable: Throwable? = Exception()) : Failure(codeStatus, throwable?.message
3030
?: MSG_DEFAULT)
3131

core-networking/src/main/java/com/codandotv/streamplayerapp/core_networking/handleError/NetworkResponse.kt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.codandotv.streamplayerapp.core_networking.handleError
22

3+
import kotlinx.coroutines.flow.Flow
4+
import kotlinx.coroutines.flow.flow
5+
36
sealed class NetworkResponse<out T> {
47
data class Success<out T>(
58
val value: T
@@ -20,4 +23,18 @@ fun <T> NetworkResponse<T>.toResult(): Result<T> =
2023
is NetworkResponse.Error -> {
2124
Result.failure(this.exception ?: Failure.GenericError())
2225
}
23-
}
26+
}
27+
28+
fun <T> NetworkResponse<T>.toFlow(): Flow<T> {
29+
val networkResponse = this
30+
return flow {
31+
when (networkResponse) {
32+
is NetworkResponse.Success -> {
33+
emit(networkResponse.value)
34+
}
35+
is NetworkResponse.Error -> {
36+
throw networkResponse.exception ?: Failure.GenericError()
37+
}
38+
}
39+
}
40+
}
Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,21 @@
1-
21
package com.codandotv.streamplayerapp.core_networking.handleError
32

4-
inline fun <T> Result<T>.onError(action: (exception: Failure) -> Unit) {
5-
if (isFailure && exceptionOrNull() is Failure) {
3+
import kotlinx.coroutines.flow.Flow
4+
import kotlinx.coroutines.flow.catch
5+
6+
inline fun <T> Result<T>.onError(action: (exception: Failure) -> Unit): Result<T> {
7+
if(isFailure && exceptionOrNull() is Failure){
68
val error = exceptionOrNull() as Failure
79
action(error)
810
}
11+
return this
912
}
13+
14+
fun <T> Flow<T>.catchFailure(action: suspend kotlinx.coroutines.flow.FlowCollector<T>.(Failure) -> Unit): Flow<T> =
15+
catch {
16+
if(it is Failure){
17+
action(it)
18+
}else{
19+
action(Failure.GenericError())
20+
}
21+
}

core-networking/src/main/java/com/codandotv/streamplayerapp/core_networking/handleError/flow/FlowCallAdapter.kt

Lines changed: 0 additions & 70 deletions
This file was deleted.

core-networking/src/main/java/com/codandotv/streamplayerapp/core_networking/handleError/flow/FlowCallAdapterFactory.kt

Lines changed: 0 additions & 35 deletions
This file was deleted.
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
11
package com.codandotv.streamplayerapp.feature_list_streams.data
22

3+
import com.codandotv.streamplayerapp.core_networking.handleError.toFlow
34
import com.codandotv.streamplayerapp.core_networking.handleError.toResult
45
import com.codandotv.streamplayerapp.feature_list_streams.domain.model.ListStream
56
import com.codandotv.streamplayerapp.feature_list_streams.domain.toListStream
7+
import kotlinx.coroutines.flow.Flow
8+
import kotlinx.coroutines.flow.map
69

710
interface ListStreamRepository {
8-
suspend fun getMovies(): Result<ListStream>
11+
suspend fun getMovies(): Flow<ListStream>
912
}
1013

1114
class ListStreamRepositoryImpl(
1215
private val service: ListStreamService
1316
) : ListStreamRepository {
1417

15-
override suspend fun getMovies(): Result<ListStream> =
18+
override suspend fun getMovies(): Flow<ListStream> =
1619
service.getMovies()
17-
.toResult()
20+
.toFlow()
1821
.map {
1922
it.toListStream()
2023
}
21-
2224
}

feature-list-streams/src/main/java/com/codandotv/streamplayerapp/feature_list_streams/data/ListStreamService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ import retrofit2.http.GET
66

77
interface ListStreamService {
88
@GET("codandotv")
9-
suspend fun getMovies() : NetworkResponse<ListStreamResponse>
9+
suspend fun getMovies() : NetworkResponse<ListStreamResponse>
1010
}

feature-list-streams/src/main/java/com/codandotv/streamplayerapp/feature_list_streams/di/ListStreamModule.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import com.codandotv.streamplayerapp.feature_list_streams.domain.ListStreamAnaly
77
import com.codandotv.streamplayerapp.feature_list_streams.domain.ListStreamAnalyticsImpl
88
import com.codandotv.streamplayerapp.feature_list_streams.domain.ListStreamUseCase
99
import com.codandotv.streamplayerapp.feature_list_streams.domain.ListStreamUseCaseImpl
10-
import com.codandotv.streamplayerapp.feature_list_streams.presentation.ListMovieViewModel
10+
import com.codandotv.streamplayerapp.feature_list_streams.presentation.ListStreamViewModel
1111
import com.codandotv.streamplayerapp.feature_list_streams.presentation.ListStreamUiModelImpl
1212
import com.codandotv.streamplayerapp.feature_list_streams.presentation.ListStreamUimodel
1313
import org.koin.androidx.viewmodel.dsl.viewModel
@@ -17,7 +17,7 @@ import retrofit2.Retrofit
1717
object ListStreamModule {
1818
val module = module {
1919
viewModel {
20-
ListMovieViewModel(
20+
ListStreamViewModel(
2121
uiModel = get(),
2222
useCase = get(),
2323
analytics = get()

feature-list-streams/src/main/java/com/codandotv/streamplayerapp/feature_list_streams/domain/ListMovieUseCase.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@ package com.codandotv.streamplayerapp.feature_list_streams.domain
22

33
import com.codandotv.streamplayerapp.feature_list_streams.data.ListStreamRepository
44
import com.codandotv.streamplayerapp.feature_list_streams.domain.model.ListStream
5+
import kotlinx.coroutines.flow.Flow
56

67
interface ListStreamUseCase {
7-
suspend fun getMovies() : Result<ListStream>
8+
suspend fun getMovies() : Flow<ListStream>
89
}
910

1011
class ListStreamUseCaseImpl(
1112
private val repository: ListStreamRepository
1213
) : ListStreamUseCase {
13-
override suspend fun getMovies(): Result<ListStream> {
14+
override suspend fun getMovies(): Flow<ListStream> {
1415
println(">>>>>>> Curta o video!!!")
1516
return repository.getMovies()
1617
}

feature-list-streams/src/main/java/com/codandotv/streamplayerapp/feature_list_streams/presentation/ListStreamActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import org.koin.core.context.loadKoinModules
99
import org.koin.core.context.unloadKoinModules
1010

1111
class ListStreamActivity : AppCompatActivity() {
12-
private val viewModel : ListMovieViewModel by viewModel()
12+
private val viewModel : ListStreamViewModel by viewModel()
1313
override fun onCreate(savedInstanceState: Bundle?) {
1414
super.onCreate(savedInstanceState)
1515
setContentView(R.layout.activity_list_stream)

0 commit comments

Comments
 (0)