From 8499f70df054d0d14f630c7f6b7b7f43cf9a60d1 Mon Sep 17 00:00:00 2001 From: "arthur.valin" Date: Thu, 11 Jan 2024 17:28:15 +0100 Subject: [PATCH] Get bets in bet page --- .../fr/iut/alldev/allin/ui/bet/BetScreen.kt | 48 +------------------ .../iut/alldev/allin/ui/bet/BetViewModel.kt | 22 ++++++++- .../fr/iut/alldev/allin/data/api/AllInApi.kt | 4 ++ .../allin/data/repository/BetRepository.kt | 1 + .../data/repository/impl/BetRepositoryImpl.kt | 7 ++- 5 files changed, 33 insertions(+), 49 deletions(-) diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/BetScreen.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/BetScreen.kt index 8d0149b..2b2a8f0 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/BetScreen.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/BetScreen.kt @@ -35,56 +35,10 @@ import fr.iut.alldev.allin.R import fr.iut.alldev.allin.data.ext.formatToMediumDateNoYear import fr.iut.alldev.allin.data.ext.formatToTime import fr.iut.alldev.allin.data.model.bet.Bet -import fr.iut.alldev.allin.data.model.bet.BetFinishedStatus -import fr.iut.alldev.allin.data.model.bet.BetStatus -import fr.iut.alldev.allin.data.model.bet.MatchBet -import fr.iut.alldev.allin.data.model.bet.YesNoBet import fr.iut.alldev.allin.theme.AllInTheme import fr.iut.alldev.allin.ui.bet.components.BetScreenCard import fr.iut.alldev.allin.ui.bet.components.BetScreenPopularCard import fr.iut.alldev.allin.ui.core.AllInChip -import java.time.ZonedDateTime - -private val bets = listOf( - YesNoBet( - theme = "Études", - phrase = "Emre va t'il finir son TP de MAUI?", - endRegisterDate = ZonedDateTime.now(), - endBetDate = ZonedDateTime.now(), - isPublic = true, - betStatus = BetStatus.Waiting, - creator = "Lucas" - ), - YesNoBet( - theme = "Études", - phrase = "Emre va t'il finir son TP de MAUI?", - endRegisterDate = ZonedDateTime.now(), - endBetDate = ZonedDateTime.now(), - isPublic = true, - betStatus = BetStatus.InProgress, - creator = "Lucas" - ), - YesNoBet( - theme = "Études", - phrase = "Emre va t'il finir son TP de MAUI?", - endRegisterDate = ZonedDateTime.now(), - endBetDate = ZonedDateTime.now(), - isPublic = true, - betStatus = BetStatus.Finished(BetFinishedStatus.WON), - creator = "Lucas" - ), - MatchBet( - theme = "Études", - phrase = "Emre va t'il finir son TP de MAUI?", - endRegisterDate = ZonedDateTime.now(), - endBetDate = ZonedDateTime.now(), - isPublic = true, - betStatus = BetStatus.Waiting, - nameTeam1 = "Team 1", - nameTeam2 = "Team 2", - creator = "Lucas" - ), -) @OptIn(ExperimentalFoundationApi::class, ExperimentalMaterialApi::class) @Composable @@ -93,6 +47,8 @@ fun BetScreen( selectBet: (Bet, Boolean) -> Unit, ) { + val bets by viewModel.bets.collectAsState() + val horizontalPadding = 23.dp val refreshing by viewModel.isRefreshing.collectAsState() diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/BetViewModel.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/BetViewModel.kt index ed071f3..e7712ba 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/BetViewModel.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/BetViewModel.kt @@ -3,25 +3,43 @@ package fr.iut.alldev.allin.ui.bet import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel +import fr.iut.alldev.allin.data.model.bet.Bet +import fr.iut.alldev.allin.data.repository.BetRepository import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.emitAll +import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import javax.inject.Inject - @HiltViewModel class BetViewModel @Inject constructor( + private val betRepository: BetRepository ) : ViewModel() { private val _isRefreshing = MutableStateFlow(false) val isRefreshing: StateFlow get() = _isRefreshing.asStateFlow() + val bets: StateFlow> by lazy { + flow { + kotlin.runCatching { emitAll(betRepository.getAllBets()) } + } + .filterNotNull() + .stateIn( + viewModelScope, + SharingStarted.WhileSubscribed(5_000L), + emptyList() + ) + } - private fun refreshData(){ + private fun refreshData() { Thread.sleep(1000) } diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/api/AllInApi.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/api/AllInApi.kt index 8db6d5b..9d3264a 100644 --- a/src/data/src/main/java/fr/iut/alldev/allin/data/api/AllInApi.kt +++ b/src/data/src/main/java/fr/iut/alldev/allin/data/api/AllInApi.kt @@ -3,6 +3,7 @@ package fr.iut.alldev.allin.data.api import fr.iut.alldev.allin.data.api.model.CheckUser import fr.iut.alldev.allin.data.api.model.RequestBet import fr.iut.alldev.allin.data.api.model.RequestUser +import fr.iut.alldev.allin.data.api.model.ResponseBet import fr.iut.alldev.allin.data.api.model.ResponseUser import retrofit2.http.Body import retrofit2.http.GET @@ -21,4 +22,7 @@ interface AllInApi { @POST("bets/add") suspend fun createBet(@Body body: RequestBet) + + @GET("bets/gets") + suspend fun getAllBets(): List } \ No newline at end of file diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/repository/BetRepository.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/repository/BetRepository.kt index 81cf458..bec1d9c 100644 --- a/src/data/src/main/java/fr/iut/alldev/allin/data/repository/BetRepository.kt +++ b/src/data/src/main/java/fr/iut/alldev/allin/data/repository/BetRepository.kt @@ -7,4 +7,5 @@ abstract class BetRepository { abstract suspend fun createBet(bet: Bet, token: String) abstract suspend fun getHistory(): Flow> abstract suspend fun getCurrentBets(): Flow> + abstract suspend fun getAllBets(): Flow> } \ No newline at end of file diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/repository/impl/BetRepositoryImpl.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/repository/impl/BetRepositoryImpl.kt index 06ef875..bf33f40 100644 --- a/src/data/src/main/java/fr/iut/alldev/allin/data/repository/impl/BetRepositoryImpl.kt +++ b/src/data/src/main/java/fr/iut/alldev/allin/data/repository/impl/BetRepositoryImpl.kt @@ -21,7 +21,6 @@ class BetRepositoryImpl @Inject constructor( } override suspend fun getHistory(): Flow> { - // TODO return flowOf( listOf( YesNoBet( @@ -90,4 +89,10 @@ class BetRepositoryImpl @Inject constructor( ) } + override suspend fun getAllBets(): Flow> { + return flowOf( + api.getAllBets().map { it.toBet() } + ) + } + } \ No newline at end of file