Select Query must return a flow

This commit is contained in:
2021-09-06 21:57:38 +02:00
parent f61c456caa
commit ad71866d2d
4 changed files with 25 additions and 7 deletions
@@ -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)
} }
@@ -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) {
@@ -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>>> {
return flow {
try {
val data = httpClient.get<BlogApiResponse>(ApiUrl.Blog.latest) val data = httpClient.get<BlogApiResponse>(ApiUrl.Blog.latest)
return data.blogBlogData.blogPage.blogs 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>>
} }