Get bets in bet page
continuous-integration/drone/push Build is passing Details

pull/3/head
Arthur VALIN 2 years ago
parent 269dfdd433
commit 8499f70df0

@ -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.formatToMediumDateNoYear
import fr.iut.alldev.allin.data.ext.formatToTime 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.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.theme.AllInTheme
import fr.iut.alldev.allin.ui.bet.components.BetScreenCard import fr.iut.alldev.allin.ui.bet.components.BetScreenCard
import fr.iut.alldev.allin.ui.bet.components.BetScreenPopularCard import fr.iut.alldev.allin.ui.bet.components.BetScreenPopularCard
import fr.iut.alldev.allin.ui.core.AllInChip 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) @OptIn(ExperimentalFoundationApi::class, ExperimentalMaterialApi::class)
@Composable @Composable
@ -93,6 +47,8 @@ fun BetScreen(
selectBet: (Bet, Boolean) -> Unit, selectBet: (Bet, Boolean) -> Unit,
) { ) {
val bets by viewModel.bets.collectAsState()
val horizontalPadding = 23.dp val horizontalPadding = 23.dp
val refreshing by viewModel.isRefreshing.collectAsState() val refreshing by viewModel.isRefreshing.collectAsState()

@ -3,25 +3,43 @@ package fr.iut.alldev.allin.ui.bet
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel 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.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow 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.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import javax.inject.Inject import javax.inject.Inject
@HiltViewModel @HiltViewModel
class BetViewModel @Inject constructor( class BetViewModel @Inject constructor(
private val betRepository: BetRepository
) : ViewModel() { ) : ViewModel() {
private val _isRefreshing = MutableStateFlow(false) private val _isRefreshing = MutableStateFlow(false)
val isRefreshing: StateFlow<Boolean> val isRefreshing: StateFlow<Boolean>
get() = _isRefreshing.asStateFlow() get() = _isRefreshing.asStateFlow()
val bets: StateFlow<List<Bet>> 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) Thread.sleep(1000)
} }

@ -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.CheckUser
import fr.iut.alldev.allin.data.api.model.RequestBet 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.RequestUser
import fr.iut.alldev.allin.data.api.model.ResponseBet
import fr.iut.alldev.allin.data.api.model.ResponseUser import fr.iut.alldev.allin.data.api.model.ResponseUser
import retrofit2.http.Body import retrofit2.http.Body
import retrofit2.http.GET import retrofit2.http.GET
@ -21,4 +22,7 @@ interface AllInApi {
@POST("bets/add") @POST("bets/add")
suspend fun createBet(@Body body: RequestBet) suspend fun createBet(@Body body: RequestBet)
@GET("bets/gets")
suspend fun getAllBets(): List<ResponseBet>
} }

@ -7,4 +7,5 @@ abstract class BetRepository {
abstract suspend fun createBet(bet: Bet, token: String) abstract suspend fun createBet(bet: Bet, token: String)
abstract suspend fun getHistory(): Flow<List<Bet>> abstract suspend fun getHistory(): Flow<List<Bet>>
abstract suspend fun getCurrentBets(): Flow<List<Bet>> abstract suspend fun getCurrentBets(): Flow<List<Bet>>
abstract suspend fun getAllBets(): Flow<List<Bet>>
} }

@ -21,7 +21,6 @@ class BetRepositoryImpl @Inject constructor(
} }
override suspend fun getHistory(): Flow<List<Bet>> { override suspend fun getHistory(): Flow<List<Bet>> {
// TODO
return flowOf( return flowOf(
listOf( listOf(
YesNoBet( YesNoBet(
@ -90,4 +89,10 @@ class BetRepositoryImpl @Inject constructor(
) )
} }
override suspend fun getAllBets(): Flow<List<Bet>> {
return flowOf(
api.getAllBets().map { it.toBet() }
)
}
} }
Loading…
Cancel
Save