Coverage Summary for Class: DetailStreamRepositoryImpl (com.codandotv.streamplayerapp.feature_detail.data)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| DetailStreamRepositoryImpl |
57.1%
(4/7)
|
|
60%
(9/15)
|
59.4%
(60/101)
|
| DetailStreamRepositoryImpl$getMovie$$inlined$map$1 |
0%
(0/2)
|
|
| DetailStreamRepositoryImpl$getMovie$$inlined$map$1$2 |
0%
(0/1)
|
|
| DetailStreamRepositoryImpl$getMovie$$inlined$map$1$2$1 |
|
| DetailStreamRepositoryImpl$getMovie$1 |
|
| DetailStreamRepositoryImpl$getVideoStreams$$inlined$map$1 |
0%
(0/2)
|
|
| DetailStreamRepositoryImpl$getVideoStreams$$inlined$map$1$2 |
0%
(0/1)
|
|
| DetailStreamRepositoryImpl$getVideoStreams$$inlined$map$1$2$1 |
|
| DetailStreamRepositoryImpl$getVideoStreams$1 |
|
| DetailStreamRepositoryImpl$isFavorite$1 |
|
| Total |
30.8%
(4/13)
|
|
60%
(9/15)
|
59.4%
(60/101)
|
package com.codandotv.streamplayerapp.feature_detail.data
import com.codandotv.streamplayerapp.core_local_storage.data.dao.FavoriteDao
import com.codandotv.streamplayerapp.core_networking.handleError.toFlow
import com.codandotv.streamplayerapp.feature_detail.domain.DetailStream
import com.codandotv.streamplayerapp.feature_detail.domain.VideoStream
import com.codandotv.streamplayerapp.feature_detail.domain.toDetailStream
import com.codandotv.streamplayerapp.feature_detail.domain.toDetailStreamLocal
import com.codandotv.streamplayerapp.feature_detail.domain.toVideoStreams
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
interface DetailStreamRepository {
suspend fun getMovie(): Flow<DetailStream>
suspend fun deleteFromMyList(movie: String)
suspend fun insertToMyList(movie: DetailStream)
suspend fun isFavorite(movieId:String) : Boolean
suspend fun getVideoStreams(): Flow<List<VideoStream>>
}
class DetailStreamRepositoryImpl(
private val movieId: String,
private val service: DetailStreamService,
private val favoriteDao: FavoriteDao,
) : DetailStreamRepository {
override suspend fun getMovie(): Flow<DetailStream> =
service.getMovie(movieId)
.toFlow()
.map {
it.toDetailStream(isFavorite(movieId))
}
override suspend fun deleteFromMyList(movie: String) = favoriteDao.delete(movie)
override suspend fun insertToMyList(movie: DetailStream) = favoriteDao.insert(movie.toDetailStreamLocal())
/**
* Verify if movieId was saved as favorite
* @param movieId
* @return Boolean
*/
override suspend fun isFavorite(movieId: String) : Boolean = favoriteDao.fetchAll().any {
movie -> movie.id == movieId
}
override suspend fun getVideoStreams(): Flow<List<VideoStream>> =
service.getVideoStreams(movieId)
.toFlow()
.map {
it.toVideoStreams()
}
}