From ad71866d2d5a8c714e411acbb2b72463c0206ff0 Mon Sep 17 00:00:00 2001 From: Eric Ampire Date: Mon, 6 Sep 2021 21:57:38 +0200 Subject: [PATCH] Select Query must return a flow --- .../data/datasource/blog/BlogDataSource.kt | 4 +++- .../data/datasource/blog/LocalBlogDataSource.kt | 9 +++++++-- .../data/datasource/blog/RemoteBlogDataSource.kt | 16 +++++++++++++--- .../androidstudycase/data/room/BlogDao.kt | 3 ++- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/blog/BlogDataSource.kt b/data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/blog/BlogDataSource.kt index 40fd110..b1e5eb8 100644 --- a/data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/blog/BlogDataSource.kt +++ b/data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/blog/BlogDataSource.kt @@ -2,8 +2,10 @@ package com.ericampire.android.androidstudycase.data.datasource.blog import com.ericampire.android.androidstudycase.domain.entity.Blog +import com.ericampire.android.androidstudycase.util.Result +import kotlinx.coroutines.flow.Flow interface BlogDataSource { - suspend fun findAll(): List + fun findAll(): Flow>> suspend fun save(blog: Blog) } \ No newline at end of file diff --git a/data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/blog/LocalBlogDataSource.kt b/data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/blog/LocalBlogDataSource.kt index fced049..e23d50b 100644 --- a/data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/blog/LocalBlogDataSource.kt +++ b/data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/blog/LocalBlogDataSource.kt @@ -2,13 +2,18 @@ package com.ericampire.android.androidstudycase.data.datasource.blog import com.ericampire.android.androidstudycase.data.room.BlogDao import com.ericampire.android.androidstudycase.domain.entity.Blog +import com.ericampire.android.androidstudycase.util.Result +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map import javax.inject.Inject class LocalBlogDataSource @Inject constructor( private val dao: BlogDao ) : BlogDataSource { - override suspend fun findAll(): List { - return dao.findAll() + override fun findAll(): Flow>> { + return dao.findAll().map { + Result.Success(it) + } } override suspend fun save(blog: Blog) { diff --git a/data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/blog/RemoteBlogDataSource.kt b/data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/blog/RemoteBlogDataSource.kt index 71f209d..5a5557c 100644 --- a/data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/blog/RemoteBlogDataSource.kt +++ b/data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/blog/RemoteBlogDataSource.kt @@ -3,16 +3,26 @@ package com.ericampire.android.androidstudycase.data.datasource.blog import com.ericampire.android.androidstudycase.domain.entity.Blog import com.ericampire.android.androidstudycase.domain.entity.BlogApiResponse import com.ericampire.android.androidstudycase.util.ApiUrl +import com.ericampire.android.androidstudycase.util.Result import io.ktor.client.* import io.ktor.client.request.* +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flow import javax.inject.Inject class RemoteBlogDataSource @Inject constructor( private val httpClient: HttpClient ) : BlogDataSource { - override suspend fun findAll(): List { - val data = httpClient.get(ApiUrl.Blog.latest) - return data.blogBlogData.blogPage.blogs + override fun findAll(): Flow>> { + return flow { + try { + val data = httpClient.get(ApiUrl.Blog.latest) + emit(Result.Success(data.blogBlogData.blogPage.blogs)) + } catch (e: Exception) { + emit(Result.Error(e)) + } + } + } override suspend fun save(blog: Blog) { diff --git a/data/src/main/java/com/ericampire/android/androidstudycase/data/room/BlogDao.kt b/data/src/main/java/com/ericampire/android/androidstudycase/data/room/BlogDao.kt index 2099642..1cae642 100644 --- a/data/src/main/java/com/ericampire/android/androidstudycase/data/room/BlogDao.kt +++ b/data/src/main/java/com/ericampire/android/androidstudycase/data/room/BlogDao.kt @@ -5,6 +5,7 @@ import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import com.ericampire.android.androidstudycase.domain.entity.Blog +import kotlinx.coroutines.flow.Flow @Dao interface BlogDao { @@ -12,5 +13,5 @@ interface BlogDao { suspend fun save(blog: Blog) @Query("SELECT * FROM Blog") - suspend fun findAll(): List + fun findAll(): Flow> } \ No newline at end of file