Select Query must return a flow
This commit is contained in:
+3
-1
@@ -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<Blog>
|
||||
fun findAll(): Flow<Result<List<Blog>>>
|
||||
suspend fun save(blog: Blog)
|
||||
}
|
||||
+7
-2
@@ -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<Blog> {
|
||||
return dao.findAll()
|
||||
override fun findAll(): Flow<Result<List<Blog>>> {
|
||||
return dao.findAll().map {
|
||||
Result.Success(it)
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun save(blog: Blog) {
|
||||
|
||||
+13
-3
@@ -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<Blog> {
|
||||
val data = httpClient.get<BlogApiResponse>(ApiUrl.Blog.latest)
|
||||
return data.blogBlogData.blogPage.blogs
|
||||
override fun findAll(): Flow<Result<List<Blog>>> {
|
||||
return flow {
|
||||
try {
|
||||
val data = httpClient.get<BlogApiResponse>(ApiUrl.Blog.latest)
|
||||
emit(Result.Success(data.blogBlogData.blogPage.blogs))
|
||||
} catch (e: Exception) {
|
||||
emit(Result.Error(e))
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override suspend fun save(blog: Blog) {
|
||||
|
||||
@@ -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<Blog>
|
||||
fun findAll(): Flow<List<Blog>>
|
||||
}
|
||||
Reference in New Issue
Block a user