Skip to content

Commit bdbfd35

Browse files
committed
update remote data source to return MovieData instead of MovieEntity
1 parent 613e12a commit bdbfd35

File tree

7 files changed

+41
-25
lines changed

7 files changed

+41
-25
lines changed

data/src/main/kotlin/com/aliasadi/data/entities/MovieData.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,13 @@ fun MovieData.toDomain() = MovieEntity(
2222
description = description,
2323
title = title,
2424
category = category
25+
)
26+
27+
fun MovieData.toDbData() = MovieDbData(
28+
id = id,
29+
image = image,
30+
description = description,
31+
title = title,
32+
category = category,
33+
backgroundUrl = backgroundUrl
2534
)

data/src/main/kotlin/com/aliasadi/data/repository/movie/MovieDataSource.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.aliasadi.data.repository.movie
22

33
import androidx.paging.PagingSource
4+
import com.aliasadi.data.entities.MovieData
45
import com.aliasadi.data.entities.MovieDbData
56
import com.aliasadi.data.entities.MovieRemoteKeyDbData
67
import com.aliasadi.domain.entities.MovieEntity
@@ -12,17 +13,17 @@ import com.aliasadi.domain.util.Result
1213
interface MovieDataSource {
1314

1415
interface Remote {
15-
suspend fun getMovies(page: Int, limit: Int): Result<List<MovieEntity>>
16-
suspend fun getMovies(movieIds: List<Int>): Result<List<MovieEntity>>
17-
suspend fun getMovie(movieId: Int): Result<MovieEntity>
18-
suspend fun search(query: String, page: Int, limit: Int): Result<List<MovieEntity>>
16+
suspend fun getMovies(page: Int, limit: Int): Result<List<MovieData>>
17+
suspend fun getMovies(movieIds: List<Int>): Result<List<MovieData>>
18+
suspend fun getMovie(movieId: Int): Result<MovieData>
19+
suspend fun search(query: String, page: Int, limit: Int): Result<List<MovieData>>
1920
}
2021

2122
interface Local {
2223
fun movies(): PagingSource<Int, MovieDbData>
2324
suspend fun getMovies(): Result<List<MovieEntity>>
2425
suspend fun getMovie(movieId: Int): Result<MovieEntity>
25-
suspend fun saveMovies(movieEntities: List<MovieEntity>)
26+
suspend fun saveMovies(movies: List<MovieData>)
2627
suspend fun getLastRemoteKey(): MovieRemoteKeyDbData?
2728
suspend fun saveRemoteKey(key: MovieRemoteKeyDbData)
2829
suspend fun clearMovies()

data/src/main/kotlin/com/aliasadi/data/repository/movie/MovieLocalDataSource.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ package com.aliasadi.data.repository.movie
33
import androidx.paging.PagingSource
44
import com.aliasadi.data.db.movies.MovieDao
55
import com.aliasadi.data.db.movies.MovieRemoteKeyDao
6+
import com.aliasadi.data.entities.MovieData
67
import com.aliasadi.data.entities.MovieDbData
78
import com.aliasadi.data.entities.MovieRemoteKeyDbData
9+
import com.aliasadi.data.entities.toDbData
810
import com.aliasadi.data.entities.toDomain
911
import com.aliasadi.data.exception.DataNotAvailableException
1012
import com.aliasadi.data.mapper.toDbData
@@ -36,8 +38,8 @@ class MovieLocalDataSource(
3638
} ?: Result.Error(DataNotAvailableException())
3739
}
3840

39-
override suspend fun saveMovies(movieEntities: List<MovieEntity>) {
40-
movieDao.saveMovies(movieEntities.map { it.toDbData() })
41+
override suspend fun saveMovies(movies: List<MovieData>) {
42+
movieDao.saveMovies(movies.map { it.toDbData() })
4143
}
4244

4345
override suspend fun getLastRemoteKey(): MovieRemoteKeyDbData? {

data/src/main/kotlin/com/aliasadi/data/repository/movie/MovieRepositoryImpl.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import com.aliasadi.domain.repository.MovieRepository
1212
import com.aliasadi.domain.util.Result
1313
import com.aliasadi.domain.util.Result.Error
1414
import com.aliasadi.domain.util.Result.Success
15+
import com.aliasadi.domain.util.map
1516
import com.aliasadi.domain.util.onError
1617
import com.aliasadi.domain.util.onSuccess
1718
import kotlinx.coroutines.flow.Flow
@@ -60,7 +61,7 @@ class MovieRepositoryImpl(
6061
override suspend fun getMovie(movieId: Int): Result<MovieEntity> {
6162
return when (val localResult = local.getMovie(movieId)) {
6263
is Success -> localResult
63-
is Error -> remote.getMovie(movieId)
64+
is Error -> remote.getMovie(movieId).map { it.toDomain() }
6465
}
6566
}
6667

data/src/main/kotlin/com/aliasadi/data/repository/movie/SearchMoviePagingSource.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.aliasadi.data.repository.movie
22

33
import androidx.paging.PagingSource
44
import androidx.paging.PagingState
5+
import com.aliasadi.data.entities.toDomain
56
import com.aliasadi.domain.entities.MovieEntity
67
import com.aliasadi.domain.util.Result.Error
78
import com.aliasadi.domain.util.Result.Success
@@ -21,7 +22,7 @@ class SearchMoviePagingSource(
2122

2223
return when (val result = remote.search(query, page, params.loadSize)) {
2324
is Success -> LoadResult.Page(
24-
data = result.data.distinctBy { movie -> movie.id },
25+
data = result.data.map { it.toDomain() }.distinctBy { movie -> movie.id },
2526
prevKey = if (page == STARTING_PAGE_INDEX) null else page - 1,
2627
nextKey = if (result.data.isEmpty()) null else page + 1
2728
)

data/src/mock/kotlin/com/aliasadi/data/repository/movie/MovieRemoteDataSource.kt

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.aliasadi.data.repository.movie
22

33
import com.aliasadi.data.api.MovieApi
4+
import com.aliasadi.data.entities.MovieData
45
import com.aliasadi.data.entities.toDomain
56
import com.aliasadi.data.exception.DataNotAvailableException
67
import com.aliasadi.data.util.JsonLoader
@@ -20,40 +21,40 @@ class MovieRemoteDataSource(
2021
const val DEFAULT_API_DELAY = 500L
2122
}
2223

23-
override suspend fun getMovies(page: Int, limit: Int): Result<List<MovieEntity>> {
24+
override suspend fun getMovies(page: Int, limit: Int): Result<List<MovieData>> {
2425
delay(DEFAULT_API_DELAY)
2526
return if (page == 2) {
2627
Result.Success(emptyList())
2728
} else {
28-
Result.Success(JsonLoader.loadMovies().map { it.toDomain() })
29+
Result.Success(JsonLoader.loadMovies())
2930
}
3031
}
3132

32-
override suspend fun getMovies(movieIds: List<Int>): Result<List<MovieEntity>> {
33+
override suspend fun getMovies(movieIds: List<Int>): Result<List<MovieData>> {
3334
delay(DEFAULT_API_DELAY)
3435
val movies = JsonLoader.loadMovies().filter { it.id in movieIds }
35-
return Result.Success(movies.map { it.toDomain() })
36+
return Result.Success(movies)
3637
}
3738

38-
override suspend fun getMovie(movieId: Int): Result<MovieEntity> {
39+
override suspend fun getMovie(movieId: Int): Result<MovieData> {
3940
delay(DEFAULT_API_DELAY)
4041
val movie = JsonLoader.loadMovies().find { it.id == movieId }
4142
return if (movie != null) {
42-
Result.Success(movie.toDomain())
43+
Result.Success(movie)
4344
} else {
4445
Result.Error(DataNotAvailableException())
4546
}
4647
}
4748

48-
override suspend fun search(query: String, page: Int, limit: Int): Result<List<MovieEntity>> {
49+
override suspend fun search(query: String, page: Int, limit: Int): Result<List<MovieData>> {
4950
delay(DEFAULT_API_DELAY)
5051
return if (page == 2) {
5152
Result.Success(emptyList())
5253
} else {
5354
val filteredMovies = JsonLoader.loadMovies().filter {
5455
it.title.contains(query, ignoreCase = true) || it.description.contains(query, ignoreCase = true)
5556
}
56-
Result.Success(filteredMovies.map { it.toDomain() })
57+
Result.Success(filteredMovies)
5758
}
5859
}
5960
}
Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.aliasadi.data.repository.movie
22

33
import com.aliasadi.data.api.MovieApi
4+
import com.aliasadi.data.entities.MovieData
45
import com.aliasadi.data.entities.toDomain
56
import com.aliasadi.data.util.safeApiCall
67
import com.aliasadi.domain.entities.MovieEntity
@@ -13,19 +14,19 @@ class MovieRemoteDataSource(
1314
private val movieApi: MovieApi
1415
) : MovieDataSource.Remote {
1516

16-
override suspend fun getMovies(page: Int, limit: Int): Result<List<MovieEntity>> = safeApiCall {
17-
movieApi.getMovies(page, limit).map { it.toDomain() }
17+
override suspend fun getMovies(page: Int, limit: Int): Result<List<MovieData>> = safeApiCall {
18+
movieApi.getMovies(page, limit)
1819
}
1920

20-
override suspend fun getMovies(movieIds: List<Int>): Result<List<MovieEntity>> = safeApiCall {
21-
movieApi.getMovies(movieIds).map { it.toDomain() }
21+
override suspend fun getMovies(movieIds: List<Int>): Result<List<MovieData>> = safeApiCall {
22+
movieApi.getMovies(movieIds)
2223
}
2324

24-
override suspend fun getMovie(movieId: Int): Result<MovieEntity> = safeApiCall {
25-
movieApi.getMovie(movieId).toDomain()
25+
override suspend fun getMovie(movieId: Int): Result<MovieData> = safeApiCall {
26+
movieApi.getMovie(movieId)
2627
}
2728

28-
override suspend fun search(query: String, page: Int, limit: Int): Result<List<MovieEntity>> = safeApiCall {
29-
movieApi.search(query, page, limit).map { it.toDomain() }
29+
override suspend fun search(query: String, page: Int, limit: Int): Result<List<MovieData>> = safeApiCall {
30+
movieApi.search(query, page, limit)
3031
}
3132
}

0 commit comments

Comments
 (0)