Skip to content

Commit 3b4adb6

Browse files
committed
Cleanup
1 parent fee275a commit 3b4adb6

23 files changed

Lines changed: 65 additions & 53 deletions

File tree

common/src/main/java/com/sample/tmdb/common/base/BaseRepository.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ import kotlinx.coroutines.flow.Flow
88
import kotlinx.coroutines.flow.flow
99
import kotlinx.coroutines.flow.flowOn
1010

11-
abstract class BaseRepository<T>(private val context: Context, private val ioDispatcher: CoroutineDispatcher) {
12-
protected abstract suspend fun getSuccessResult(id: Any?): T
11+
abstract class BaseRepository<T, S>(private val context: Context, private val ioDispatcher: CoroutineDispatcher) {
12+
protected abstract suspend fun getSuccessResult(id: S?): T
1313

14-
fun getResult(isRefreshing: Boolean = false, id: Any?): Flow<Async<T>> = flow {
14+
fun getResult(isRefreshing: Boolean = false, id: S? = null): Flow<Async<T>> = flow {
1515
emit(Async.Loading(isRefreshing))
1616
try {
1717
emit(Async.Success(getSuccessResult(id)))

common/src/main/java/com/sample/tmdb/common/base/BaseViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import kotlinx.coroutines.flow.launchIn
1212
import kotlinx.coroutines.flow.onEach
1313
import kotlinx.coroutines.flow.update
1414

15-
open class BaseViewModel<T>(private val repository: BaseRepository<T>, private val id: Any? = null) : ViewModel() {
15+
open class BaseViewModel<T, S>(private val repository: BaseRepository<T, S>, private val id: S? = null) : ViewModel() {
1616

1717
private val _state = MutableStateFlow(ViewState<T>(isLoading = true))
1818
val state = _state.asStateFlow()

common/src/main/java/com/sample/tmdb/common/base/TMDbViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.sample.tmdb.common.base
22

3-
open class TMDbViewModel<T>(repository: BaseRepository<T>, id: Any? = null) : BaseViewModel<T>(repository, id) {
3+
open class TMDbViewModel<T, S>(repository: BaseRepository<T, S>, id: S? = null) : BaseViewModel<T, S>(repository, id) {
44
init {
55
refresh()
66
}

common/src/main/java/com/sample/tmdb/common/ui/Content.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ import com.sample.tmdb.common.ui.component.TMDbProgressBar
1212
import kotlinx.coroutines.flow.collectLatest
1313

1414
@Composable
15-
fun <T> Content(
16-
viewModel: BaseViewModel<T>,
15+
fun <T, S> Content(
16+
viewModel: BaseViewModel<T, S>,
1717
scaffoldState: ScaffoldState? = null,
1818
successScreen: @Composable (T) -> Unit,
1919
) {

core/data/src/main/java/com/sample/tmdb/data/di/RepositoryModule.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ import com.sample.tmdb.domain.repository.BaseDetailRepository
3535
import com.sample.tmdb.domain.repository.BaseFeedRepository
3636
import com.sample.tmdb.domain.repository.BasePagingRepository
3737
import com.sample.tmdb.domain.repository.BookmarkDetailsRepository
38+
import com.sample.tmdb.domain.utils.BookmarkMovie
39+
import com.sample.tmdb.domain.utils.BookmarkTVShow
3840
import com.sample.tmdb.domain.utils.Discover
3941
import com.sample.tmdb.domain.utils.Latest
4042
import com.sample.tmdb.domain.utils.NowPlaying
@@ -188,7 +190,7 @@ abstract class RepositoryModule {
188190

189191
@Singleton
190192
@Binds
191-
internal abstract fun bindPersonRepository(personRepository: PersonRepository): BaseRepository<Person>
193+
internal abstract fun bindPersonRepository(personRepository: PersonRepository): BaseRepository<Person, String>
192194

193195
@Singleton
194196
@Binds
@@ -204,15 +206,15 @@ abstract class RepositoryModule {
204206

205207
@Singleton
206208
@Binds
207-
@JvmSuppressWildcards
209+
@BookmarkMovie
208210
internal abstract fun bindBookmarkMovieRepository(
209211
bookmarkMovieRepository: BookmarkMovieRepository,
210-
): BaseRepository<List<Movie>>
212+
): BaseRepository<List<Movie>, Nothing>
211213

212214
@Singleton
213215
@Binds
214-
@JvmSuppressWildcards
216+
@BookmarkTVShow
215217
internal abstract fun bindBookmarkTVShowRepository(
216218
bookmarkTVShowRepository: BookmarkTVShowRepository,
217-
): BaseRepository<List<TVShow>>
219+
): BaseRepository<List<TVShow>, Nothing>
218220
}

core/data/src/main/java/com/sample/tmdb/data/repository/PersonRepository.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ class PersonRepository @Inject constructor(
1616
private val personApi: PersonService,
1717
@ApplicationContext context: Context,
1818
@IoDispatcher ioDispatcher: CoroutineDispatcher,
19-
) : BaseRepository<Person>(context, ioDispatcher) {
20-
override suspend fun getSuccessResult(id: Any?): Person = personApi.getPerson(id as String).asDomainModel()
19+
) : BaseRepository<Person, String>(context, ioDispatcher) {
20+
override suspend fun getSuccessResult(id: String?): Person = personApi.getPerson(id!!).asDomainModel()
2121
}

core/data/src/main/java/com/sample/tmdb/data/repository/movie/detail/BookmarkMovieRepository.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ class BookmarkMovieRepository @Inject constructor(
1616
private val movieDao: MovieDao,
1717
@ApplicationContext context: Context,
1818
@IoDispatcher ioDispatcher: CoroutineDispatcher,
19-
) : BaseRepository<List<@JvmSuppressWildcards Movie>>(context, ioDispatcher) {
20-
override suspend fun getSuccessResult(id: Any?): List<Movie> = movieDao.getBookmarks().asDomainModel()
19+
) : BaseRepository<List<Movie>, Nothing>(context, ioDispatcher) {
20+
override suspend fun getSuccessResult(id: Nothing?): List<Movie> = movieDao.getBookmarks().asDomainModel()
2121
}

core/data/src/main/java/com/sample/tmdb/data/repository/tvshow/detail/BookmarkTVShowRepository.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ class BookmarkTVShowRepository @Inject constructor(
1616
private val tvShowDao: TVShowDao,
1717
@ApplicationContext context: Context,
1818
@IoDispatcher ioDispatcher: CoroutineDispatcher,
19-
) : BaseRepository<List<@JvmSuppressWildcards TVShow>>(context, ioDispatcher) {
20-
override suspend fun getSuccessResult(id: Any?): List<TVShow> = tvShowDao.getBookmarks().asDomainModel()
19+
) : BaseRepository<List<TVShow>, Nothing>(context, ioDispatcher) {
20+
override suspend fun getSuccessResult(id: Nothing?): List<TVShow> = tvShowDao.getBookmarks().asDomainModel()
2121
}

core/data/src/test/java/com/sample/tmdb/data/repository/BaseBookmarkRepositoryTest.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ import org.mockito.ArgumentMatchers.anyInt
1515
import org.mockito.Mockito.`when`
1616

1717
abstract class BaseBookmarkRepositoryTest<T : TMDbItem> : BaseRepositoryTest() {
18-
protected lateinit var repository: BaseRepository<List<T>>
18+
protected lateinit var repository: BaseRepository<List<T>, Nothing>
1919

2020
@Test
2121
fun `load bookmark success`() {
2222
mockApiResponse()
2323
runTest {
24-
assertThat(repository.getResult(id = null).first(), `is`(Async.Loading()))
25-
val result = (repository.getResult(id = null).last() as Async.Success).data
24+
assertThat(repository.getResult().first(), `is`(Async.Loading()))
25+
val result = (repository.getResult().last() as Async.Success).data
2626
assertEquals(emptyList<T>(), result)
2727
}
2828
}
@@ -31,7 +31,7 @@ abstract class BaseBookmarkRepositoryTest<T : TMDbItem> : BaseRepositoryTest() {
3131
fun `load bookmark failed`() = runTest {
3232
val errorMsg = "error message"
3333
`when`(context.getString(anyInt())).thenReturn(errorMsg)
34-
repository.getResult(id = null).test {
34+
repository.getResult().test {
3535
assertEquals(Async.Loading(), awaitItem())
3636
assertEquals(Async.Error(errorMsg), awaitItem())
3737
awaitComplete()

core/data/src/test/java/com/sample/tmdb/data/repository/BaseFeedRepositoryTest.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ abstract class BaseFeedRepositoryTest<T : TMDbItem> : BaseRepositoryTest() {
2121
fun `load feeds success`() {
2222
mockApiResponse()
2323
runTest {
24-
assertThat(repository.getResult(id = null).first(), `is`(Async.Loading()))
25-
val result = (repository.getResult(id = null).last() as Async.Success).data
24+
assertThat(repository.getResult().first(), `is`(Async.Loading()))
25+
val result = (repository.getResult().last() as Async.Success).data
2626
assertThat(result[0].feeds, `is`(emptyList()))
2727
assertThat(result[1].feeds, `is`(emptyList()))
2828
assertThat(result[2].feeds, `is`(emptyList()))
@@ -37,7 +37,7 @@ abstract class BaseFeedRepositoryTest<T : TMDbItem> : BaseRepositoryTest() {
3737
val errorMsg = "error message"
3838
`when`(context.getString(anyInt())).thenReturn(errorMsg)
3939
runTest {
40-
repository.getResult(id = null).test {
40+
repository.getResult().test {
4141
assertEquals(Async.Loading(), awaitItem())
4242
assertEquals(Async.Error(errorMsg), awaitItem())
4343
awaitComplete()

0 commit comments

Comments
 (0)