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.domain.entity.Blog
|
||||||
|
import com.ericampire.android.androidstudycase.util.Result
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
|
||||||
interface BlogDataSource {
|
interface BlogDataSource {
|
||||||
suspend fun findAll(): List<Blog>
|
fun findAll(): Flow<Result<List<Blog>>>
|
||||||
suspend fun save(blog: 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.data.room.BlogDao
|
||||||
import com.ericampire.android.androidstudycase.domain.entity.Blog
|
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
|
import javax.inject.Inject
|
||||||
|
|
||||||
class LocalBlogDataSource @Inject constructor(
|
class LocalBlogDataSource @Inject constructor(
|
||||||
private val dao: BlogDao
|
private val dao: BlogDao
|
||||||
) : BlogDataSource {
|
) : BlogDataSource {
|
||||||
override suspend fun findAll(): List<Blog> {
|
override fun findAll(): Flow<Result<List<Blog>>> {
|
||||||
return dao.findAll()
|
return dao.findAll().map {
|
||||||
|
Result.Success(it)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun save(blog: Blog) {
|
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.Blog
|
||||||
import com.ericampire.android.androidstudycase.domain.entity.BlogApiResponse
|
import com.ericampire.android.androidstudycase.domain.entity.BlogApiResponse
|
||||||
import com.ericampire.android.androidstudycase.util.ApiUrl
|
import com.ericampire.android.androidstudycase.util.ApiUrl
|
||||||
|
import com.ericampire.android.androidstudycase.util.Result
|
||||||
import io.ktor.client.*
|
import io.ktor.client.*
|
||||||
import io.ktor.client.request.*
|
import io.ktor.client.request.*
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import kotlinx.coroutines.flow.flow
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class RemoteBlogDataSource @Inject constructor(
|
class RemoteBlogDataSource @Inject constructor(
|
||||||
private val httpClient: HttpClient
|
private val httpClient: HttpClient
|
||||||
) : BlogDataSource {
|
) : BlogDataSource {
|
||||||
override suspend fun findAll(): List<Blog> {
|
override fun findAll(): Flow<Result<List<Blog>>> {
|
||||||
val data = httpClient.get<BlogApiResponse>(ApiUrl.Blog.latest)
|
return flow {
|
||||||
return data.blogBlogData.blogPage.blogs
|
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) {
|
override suspend fun save(blog: Blog) {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import androidx.room.Insert
|
|||||||
import androidx.room.OnConflictStrategy
|
import androidx.room.OnConflictStrategy
|
||||||
import androidx.room.Query
|
import androidx.room.Query
|
||||||
import com.ericampire.android.androidstudycase.domain.entity.Blog
|
import com.ericampire.android.androidstudycase.domain.entity.Blog
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
|
||||||
@Dao
|
@Dao
|
||||||
interface BlogDao {
|
interface BlogDao {
|
||||||
@@ -12,5 +13,5 @@ interface BlogDao {
|
|||||||
suspend fun save(blog: Blog)
|
suspend fun save(blog: Blog)
|
||||||
|
|
||||||
@Query("SELECT * FROM Blog")
|
@Query("SELECT * FROM Blog")
|
||||||
suspend fun findAll(): List<Blog>
|
fun findAll(): Flow<List<Blog>>
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user