Skip to content

Commit 94f3b5e

Browse files
committed
[ISSUE-25] - Listing movies by genre
1 parent ae99c21 commit 94f3b5e

File tree

8 files changed

+46
-23
lines changed

8 files changed

+46
-23
lines changed
Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,29 @@
11
package com.codandotv.streamplayerapp.feature_list_streams.data
22

3-
import com.codandotv.streamplayerapp.core_networking.handleError.toFlow
43
import com.codandotv.streamplayerapp.core_networking.handleError.toResult
54
import com.codandotv.streamplayerapp.feature_list_streams.domain.model.ListStream
65
import com.codandotv.streamplayerapp.feature_list_streams.domain.toListStream
76
import kotlinx.coroutines.flow.Flow
8-
import kotlinx.coroutines.flow.map
7+
import kotlinx.coroutines.flow.flow
98

109
interface ListStreamRepository {
11-
suspend fun getMovies(): Flow<ListStream>
10+
suspend fun getMovies(): Flow<List<ListStream>>
1211
}
1312

1413
class ListStreamRepositoryImpl(
1514
private val service: ListStreamService
1615
) : ListStreamRepository {
1716

18-
override suspend fun getMovies(): Flow<ListStream> =
19-
service.getMovies()
20-
.toFlow()
21-
.map {
22-
it.toListStream()
17+
override suspend fun getMovies(): Flow<List<ListStream>> {
18+
val genres = service.getGenres().toResult().getOrNull()
19+
return flow {
20+
val response = genres?.genres?.mapNotNull { genre ->
21+
service.getMovies(genre.id.toString())
22+
.toResult().getOrNull()?.toListStream(
23+
genre.name
24+
)
2325
}
26+
emit(response ?: emptyList())
27+
}
28+
}
2429
}
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package com.codandotv.streamplayerapp.feature_list_streams.data
22

33
import com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse
4+
import com.codandotv.streamplayerapp.feature_list_streams.data.model.GenresResponse
45
import com.codandotv.streamplayerapp.feature_list_streams.data.model.ListStreamResponse
56
import retrofit2.http.GET
7+
import retrofit2.http.Query
68

79
interface ListStreamService {
810
@GET("3/discover/movie")
9-
suspend fun getMovies() : NetworkResponse<ListStreamResponse>
11+
suspend fun getMovies(@Query("with_genres") genres: String) : NetworkResponse<ListStreamResponse>
12+
13+
@GET("3/genre/movie/list")
14+
suspend fun getGenres(): NetworkResponse<GenresResponse>
1015
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.codandotv.streamplayerapp.feature_list_streams.data.model
2+
3+
data class GenreResponse(
4+
val id: Long,
5+
val name: String
6+
)
7+
8+
data class GenresResponse(
9+
val genres: List<GenreResponse>
10+
)

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,13 @@ import com.codandotv.streamplayerapp.feature_list_streams.domain.model.ListStrea
55
import kotlinx.coroutines.flow.Flow
66

77
interface ListStreamUseCase {
8-
suspend fun getMovies() : Flow<ListStream>
8+
suspend fun getMovies() : Flow<List<ListStream>>
99
}
1010

1111
class ListStreamUseCaseImpl(
1212
private val repository: ListStreamRepository
1313
) : ListStreamUseCase {
14-
override suspend fun getMovies(): Flow<ListStream> {
15-
println(">>>>>>> Curta o video!!!")
14+
override suspend fun getMovies(): Flow<List<ListStream>> {
1615
return repository.getMovies()
1716
}
1817
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ import com.codandotv.streamplayerapp.feature_list_streams.data.model.ListStreamR
44
import com.codandotv.streamplayerapp.feature_list_streams.domain.model.ListStream
55
import com.codandotv.streamplayerapp.feature_list_streams.domain.model.Stream
66

7-
fun ListStreamResponse.toListStream(): ListStream =
7+
fun ListStreamResponse.toListStream(genre: String): ListStream =
88
ListStream(
9+
categoryName = genre,
910
streams = this.results.map {
1011
Stream(
1112
description = it.overview,

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ data class Stream(
66
val posterPathUrl: String,
77
)
88
data class ListStream(
9+
val categoryName: String,
910
val streams: List<Stream>
1011
)

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,25 @@ import com.codandotv.streamplayerapp.feature_list_streams.presentation.screens.L
77
import com.codandotv.streamplayerapp.feature_list_streams.presentation.widgets.StreamsCardContent
88

99
interface ListStreamUimodel {
10-
fun convertToCardContent(listStream: ListStream): ListStreamsUIState
10+
fun convertToCardContent(listStream: List<ListStream>): ListStreamsUIState
1111
}
1212

1313
class ListStreamUiModelImpl(
1414
private val resources: Resources
1515
) : ListStreamUimodel {
16-
override fun convertToCardContent(listStream: ListStream): ListStreamsUIState {
16+
override fun convertToCardContent(listStream: List<ListStream>): ListStreamsUIState {
1717
return ListStreamsUIState(
18-
carousels = listOf(
18+
carousels = listStream.map {
1919
CarouselData(
20-
categoryName = "",
21-
cards = listStream.streams.map {
20+
categoryName = it.categoryName,
21+
cards = it.streams.map { stream ->
2222
StreamsCardContent(
23-
contentDescription = it.name,
24-
url = it.posterPathUrl
23+
contentDescription = stream.name,
24+
url = stream.posterPathUrl
2525
)
2626
}
2727
)
28-
)
28+
}
2929
)
3030
}
3131
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package com.codandotv.streamplayerapp.feature_list_streams.presentation.screens
22

3+
import androidx.compose.foundation.ScrollState
34
import androidx.compose.foundation.background
45
import androidx.compose.foundation.layout.Column
56
import androidx.compose.foundation.layout.Spacer
67
import androidx.compose.foundation.layout.fillMaxSize
78
import androidx.compose.foundation.layout.height
8-
import androidx.compose.foundation.layout.padding
9+
import androidx.compose.foundation.verticalScroll
910
import androidx.compose.material3.MaterialTheme
1011
import androidx.compose.runtime.Composable
1112
import androidx.compose.runtime.remember
@@ -27,10 +28,11 @@ fun ListStreamsScreen(viewModel: ListStreamViewModel = koinViewModel()) {
2728
modifier = Modifier
2829
.background(MaterialTheme.colorScheme.background)
2930
.fillMaxSize()
31+
.verticalScroll(ScrollState(0))
3032
) {
3133
uiState.value.carousels.forEach {
3234
StreamsCarousel(
33-
title = "Category do Server",
35+
title = it.categoryName,
3436
contentList = it.cards
3537
)
3638
}

0 commit comments

Comments
 (0)