Updating Data Source signature

This commit is contained in:
2021-09-06 21:52:00 +02:00
parent 6486a4acb4
commit 64fbf09026
3 changed files with 35 additions and 16 deletions
@@ -2,21 +2,30 @@ package com.ericampire.android.androidstudycase.data.datasource.lottiefiles
import com.ericampire.android.androidstudycase.data.room.LottieFilesDao import com.ericampire.android.androidstudycase.data.room.LottieFilesDao
import com.ericampire.android.androidstudycase.domain.entity.Lottiefile import com.ericampire.android.androidstudycase.domain.entity.Lottiefile
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 LocalLottieFileDataSource @Inject constructor( class LocalLottieFileDataSource @Inject constructor(
private val lottieFileDao: LottieFilesDao private val lottieFileDao: LottieFilesDao
) : LottieFileDataSource { ) : LottieFileDataSource {
override suspend fun findRecent(): List<Lottiefile> { override suspend fun findRecent(): Flow<Result<List<Lottiefile>>> {
return lottieFileDao.findRecent() return lottieFileDao.findRecent().map {
Result.Success(it)
}
} }
override suspend fun findPopular(): List<Lottiefile> { override suspend fun findPopular(): Flow<Result<List<Lottiefile>>> {
return lottieFileDao.findPopular() return lottieFileDao.findPopular().map {
Result.Success(it)
}
} }
override suspend fun findFeatured(): List<Lottiefile> { override suspend fun findFeatured(): Flow<Result<List<Lottiefile>>> {
return lottieFileDao.findFeatured() return lottieFileDao.findFeatured().map {
Result.Success(it)
}
} }
override suspend fun save(lottiefile: Lottiefile) { override suspend fun save(lottiefile: Lottiefile) {
@@ -1,11 +1,12 @@
package com.ericampire.android.androidstudycase.data.datasource.lottiefiles package com.ericampire.android.androidstudycase.data.datasource.lottiefiles
import com.ericampire.android.androidstudycase.domain.entity.Blog
import com.ericampire.android.androidstudycase.domain.entity.Lottiefile import com.ericampire.android.androidstudycase.domain.entity.Lottiefile
import com.ericampire.android.androidstudycase.util.Result
import kotlinx.coroutines.flow.Flow
interface LottieFileDataSource { interface LottieFileDataSource {
suspend fun findRecent(): List<Lottiefile> suspend fun findRecent(): Flow<Result<List<Lottiefile>>>
suspend fun findPopular(): List<Lottiefile> suspend fun findPopular(): Flow<Result<List<Lottiefile>>>
suspend fun findFeatured(): List<Lottiefile> suspend fun findFeatured(): Flow<Result<List<Lottiefile>>>
suspend fun save(lottiefile: Lottiefile) suspend fun save(lottiefile: Lottiefile)
} }
@@ -3,28 +3,37 @@ package com.ericampire.android.androidstudycase.data.datasource.lottiefiles
import com.ericampire.android.androidstudycase.domain.entity.LottieFilesApiResponse import com.ericampire.android.androidstudycase.domain.entity.LottieFilesApiResponse
import com.ericampire.android.androidstudycase.domain.entity.Lottiefile import com.ericampire.android.androidstudycase.domain.entity.Lottiefile
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 RemoteLottieFileDataSource @Inject constructor( class RemoteLottieFileDataSource @Inject constructor(
private val httpClient: HttpClient private val httpClient: HttpClient
) : LottieFileDataSource { ) : LottieFileDataSource {
private suspend fun find(url: String): List<Lottiefile> { private suspend fun find(url: String): Flow<Result<List<Lottiefile>>> {
return flow {
try {
val data = httpClient.get<LottieFilesApiResponse>(url) val data = httpClient.get<LottieFilesApiResponse>(url)
return data.lottieFilesLottieFilesData.page.results emit(Result.Success(data.lottieFilesLottieFilesData.page.results))
} catch (e: Exception) {
emit(Result.Error(e))
}
}
} }
override suspend fun findRecent(): List<Lottiefile> { override suspend fun findRecent(): Flow<Result<List<Lottiefile>>> {
return find(ApiUrl.LottieFile.recent) return find(ApiUrl.LottieFile.recent)
} }
override suspend fun findPopular(): List<Lottiefile> { override suspend fun findPopular(): Flow<Result<List<Lottiefile>>> {
return find(ApiUrl.LottieFile.popular) return find(ApiUrl.LottieFile.popular)
} }
override suspend fun findFeatured(): List<Lottiefile> { override suspend fun findFeatured(): Flow<Result<List<Lottiefile>>> {
return find(ApiUrl.LottieFile.featured) return find(ApiUrl.LottieFile.featured)
} }