Add bet total participants and stakes
continuous-integration/drone/push Build is passing Details

pull/5/head
avalin 11 months ago
parent 866bc358ba
commit c4525ad97e

@ -36,6 +36,7 @@ fun BetScreenCard(
date: String, date: String,
time: String, time: String,
players: List<User>, players: List<User>,
totalParticipants: Int,
onClickParticipate: () -> Unit, onClickParticipate: () -> Unit,
onClickCard: () -> Unit, onClickCard: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
@ -80,8 +81,8 @@ fun BetScreenCard(
Text( Text(
text = pluralStringResource( text = pluralStringResource(
id = R.plurals.bet_players_waiting_format, id = R.plurals.bet_players_waiting_format,
players.size, totalParticipants,
players.size totalParticipants
), ),
style = AllInTheme.typography.sm2, style = AllInTheme.typography.sm2,
color = AllInTheme.colors.onBackground2 color = AllInTheme.colors.onBackground2
@ -108,6 +109,7 @@ private fun BetScreenCardPreview() {
title = "Emre va réussir son TP de CI/CD mercredi?", title = "Emre va réussir son TP de CI/CD mercredi?",
date = "12 Sept.", date = "12 Sept.",
time = "13:00", time = "13:00",
totalParticipants = 25,
players = listOf( players = listOf(
User(id = "", username = "Lucas D", email = "", coins = 0), User(id = "", username = "Lucas D", email = "", coins = 0),
), ),
@ -128,6 +130,7 @@ private fun BetScreenCardNoPlayersPreview() {
title = "Emre va réussir son TP de CI/CD mercredi?", title = "Emre va réussir son TP de CI/CD mercredi?",
date = "12 Sept.", date = "12 Sept.",
time = "13:00", time = "13:00",
totalParticipants = 25,
players = emptyList(), players = emptyList(),
onClickParticipate = {}, onClickParticipate = {},
onClickCard = {} onClickCard = {}
@ -146,10 +149,11 @@ private fun BetScreenCardDisabledPreview() {
title = "Emre va réussir son TP de CI/CD mercredi?", title = "Emre va réussir son TP de CI/CD mercredi?",
date = "12 Sept.", date = "12 Sept.",
time = "13:00", time = "13:00",
totalParticipants = 25,
players = emptyList(), players = emptyList(),
onClickParticipate = {}, onClickParticipate = {},
onClickCard = {}, onClickCard = {},
enabled = false enabled = false,
) )
} }
} }

@ -76,9 +76,8 @@ fun BetScreenLoadedContent(
item { item {
Box(Modifier.fillMaxWidth()) { Box(Modifier.fillMaxWidth()) {
BetScreenPopularCard( BetScreenPopularCard(
nbPlayers = 12, // Todo : Players nbPlayers = it.totalParticipants,
points = 2.35f, // Todo : Points points = it.totalStakes,
pointUnit = "k",
title = it.phrase, title = it.phrase,
onClick = { selectBet(it, false) }, onClick = { selectBet(it, false) },
enabled = !isRefreshing, enabled = !isRefreshing,
@ -137,6 +136,7 @@ fun BetScreenLoadedContent(
date = it.endRegisterDate.formatToMediumDateNoYear(), date = it.endRegisterDate.formatToMediumDateNoYear(),
time = it.endRegisterDate.formatToTime(), time = it.endRegisterDate.formatToTime(),
players = emptyList(), // TODO : Players players = emptyList(), // TODO : Players
totalParticipants = it.totalParticipants,
onClickParticipate = { selectBet(it, true) }, onClickParticipate = { selectBet(it, true) },
onClickCard = { selectBet(it, false) }, onClickCard = { selectBet(it, false) },
enabled = !isRefreshing, enabled = !isRefreshing,
@ -153,18 +153,20 @@ fun BetScreenLoadedContent(
Spacer(modifier = Modifier.height(24.dp)) Spacer(modifier = Modifier.height(24.dp))
} }
} }
}
if (bets.isEmpty()) { if (bets.isEmpty()) {
item {
AllInEmptyView( AllInEmptyView(
text = stringResource(id = R.string.bet_empty_text), text = stringResource(id = R.string.bet_empty_text),
subtext = null, subtext = null,
image = painterResource(id = R.drawable.video_game), image = painterResource(id = R.drawable.video_game),
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.align(Alignment.Center) .fillParentMaxHeight(.5f)
) )
} }
}
}
PullRefreshIndicator( PullRefreshIndicator(
modifier = Modifier.align(Alignment.TopCenter), modifier = Modifier.align(Alignment.TopCenter),
@ -187,7 +189,9 @@ private fun BetScreenLoadedContentPreview() {
endRegisterDate = ZonedDateTime.now(), endRegisterDate = ZonedDateTime.now(),
endBetDate = ZonedDateTime.now(), endBetDate = ZonedDateTime.now(),
isPublic = false, isPublic = false,
betStatus = BetStatus.IN_PROGRESS betStatus = BetStatus.IN_PROGRESS,
totalParticipants = 200,
totalStakes = 2500
), ),
filters = emptyList(), filters = emptyList(),
bets = emptyList(), bets = emptyList(),

@ -1,5 +1,6 @@
package fr.iut.alldev.allin.ui.bet.components package fr.iut.alldev.allin.ui.bet.components
import android.icu.text.CompactDecimalFormat
import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
@ -11,9 +12,11 @@ import androidx.compose.foundation.layout.width
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.res.pluralStringResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@ -22,24 +25,29 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.core.os.ConfigurationCompat
import fr.iut.alldev.allin.R import fr.iut.alldev.allin.R
import fr.iut.alldev.allin.ext.shadow import fr.iut.alldev.allin.ext.shadow
import fr.iut.alldev.allin.theme.AllInColorToken import fr.iut.alldev.allin.theme.AllInColorToken
import fr.iut.alldev.allin.theme.AllInTheme import fr.iut.alldev.allin.theme.AllInTheme
import fr.iut.alldev.allin.ui.core.AllInBouncyCard import fr.iut.alldev.allin.ui.core.AllInBouncyCard
import fr.iut.alldev.allin.ui.core.HighlightedText import fr.iut.alldev.allin.ui.core.HighlightedText
import kotlin.math.ceil
@Composable @Composable
fun BetScreenPopularCard( fun BetScreenPopularCard(
nbPlayers: Int, nbPlayers: Int,
points: Float, points: Int,
pointUnit: String,
title: String, title: String,
onClick: () -> Unit, onClick: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
enabled: Boolean = true enabled: Boolean = true
) { ) {
val configuration = LocalConfiguration.current
val numberFormat = remember(configuration) {
val locale = ConfigurationCompat.getLocales(configuration).get(0) ?: java.util.Locale.getDefault()
CompactDecimalFormat.getInstance(locale, CompactDecimalFormat.CompactStyle.SHORT)
}
AllInBouncyCard( AllInBouncyCard(
modifier = modifier modifier = modifier
.let { .let {
@ -114,15 +122,11 @@ fun BetScreenPopularCard(
style = AllInTheme.typography.p1, style = AllInTheme.typography.p1,
fontSize = 15.sp fontSize = 15.sp
) )
val pointsText = if (points % 1 == 0f) { val pointsText = numberFormat.format(points)
stringResource(id = R.string.int_and_unit, points.toInt(), pointUnit)
} else {
stringResource(id = R.string.float_and_unit, points, pointUnit)
}
HighlightedText( HighlightedText(
text = pluralStringResource( text = pluralStringResource(
id = R.plurals.bet_points_at_stake_format, id = R.plurals.bet_points_at_stake_format,
if (pointUnit.isEmpty()) ceil(points).toInt() else 2, points,
pointsText pointsText
), ),
query = pointsText, query = pointsText,
@ -145,8 +149,7 @@ private fun BetScreenPopularCardPreview() {
AllInTheme { AllInTheme {
BetScreenPopularCard( BetScreenPopularCard(
nbPlayers = 12, nbPlayers = 12,
points = 2.35f, points = 2350,
pointUnit = "k",
title = "Emre va réussir son TP de CI/CD mercredi?", title = "Emre va réussir son TP de CI/CD mercredi?",
onClick = {} onClick = {}
) )
@ -159,8 +162,7 @@ private fun BetScreenPopularCardSingularPreview() {
AllInTheme { AllInTheme {
BetScreenPopularCard( BetScreenPopularCard(
nbPlayers = 1, nbPlayers = 1,
points = 1.0f, points = 150,
pointUnit = "",
title = "Emre va réussir son TP de CI/CD mercredi?", title = "Emre va réussir son TP de CI/CD mercredi?",
onClick = {} onClick = {}
) )

@ -44,11 +44,11 @@ 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.BetStatus import fr.iut.alldev.allin.data.model.bet.BetStatus
import fr.iut.alldev.allin.data.model.bet.BinaryBet
import fr.iut.alldev.allin.data.model.bet.CustomBet import fr.iut.alldev.allin.data.model.bet.CustomBet
import fr.iut.alldev.allin.data.model.bet.MatchBet import fr.iut.alldev.allin.data.model.bet.MatchBet
import fr.iut.alldev.allin.data.model.bet.NO_VALUE import fr.iut.alldev.allin.data.model.bet.NO_VALUE
import fr.iut.alldev.allin.data.model.bet.YES_VALUE import fr.iut.alldev.allin.data.model.bet.YES_VALUE
import fr.iut.alldev.allin.data.model.bet.BinaryBet
import fr.iut.alldev.allin.data.model.bet.vo.BetAnswerDetail import fr.iut.alldev.allin.data.model.bet.vo.BetAnswerDetail
import fr.iut.alldev.allin.data.model.bet.vo.BetDetail import fr.iut.alldev.allin.data.model.bet.vo.BetDetail
import fr.iut.alldev.allin.ext.formatToSimple import fr.iut.alldev.allin.ext.formatToSimple
@ -303,7 +303,9 @@ private fun BetConfirmationBottomSheetContentPreview() {
endBetDate = ZonedDateTime.now(), endBetDate = ZonedDateTime.now(),
isPublic = true, isPublic = true,
betStatus = BetStatus.FINISHED, betStatus = BetStatus.FINISHED,
creator = "creator" creator = "creator",
totalStakes = 0,
totalParticipants = 0
), ),
answers = listOf( answers = listOf(
BetAnswerDetail( BetAnswerDetail(

@ -142,6 +142,8 @@ private fun BetResultBottomSheetContentPreview() {
isPublic = true, isPublic = true,
betStatus = BetStatus.IN_PROGRESS, betStatus = BetStatus.IN_PROGRESS,
creator = "creator", creator = "creator",
totalStakes = 0,
totalParticipants = 0
), ),
stake = 4175, stake = 4175,
winnings = 2600, winnings = 2600,

@ -1,6 +1,5 @@
package fr.iut.alldev.allin.ui.betStatus.components package fr.iut.alldev.allin.ui.betStatus.components
import android.content.res.Configuration
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@ -21,11 +20,11 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.core.os.ConfigurationCompat import androidx.core.os.ConfigurationCompat
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.BinaryBet
import fr.iut.alldev.allin.data.model.bet.CustomBet import fr.iut.alldev.allin.data.model.bet.CustomBet
import fr.iut.alldev.allin.data.model.bet.MatchBet import fr.iut.alldev.allin.data.model.bet.MatchBet
import fr.iut.alldev.allin.data.model.bet.NO_VALUE import fr.iut.alldev.allin.data.model.bet.NO_VALUE
import fr.iut.alldev.allin.data.model.bet.YES_VALUE import fr.iut.alldev.allin.data.model.bet.YES_VALUE
import fr.iut.alldev.allin.data.model.bet.BinaryBet
import fr.iut.alldev.allin.data.model.bet.vo.BetDetail import fr.iut.alldev.allin.data.model.bet.vo.BetDetail
import fr.iut.alldev.allin.ext.formatToSimple import fr.iut.alldev.allin.ext.formatToSimple
import fr.iut.alldev.allin.theme.AllInColorToken import fr.iut.alldev.allin.theme.AllInColorToken
@ -152,7 +151,6 @@ fun Bet.getAnswerFromParticipationIdx(idx: Int) =
} }
@Preview @Preview
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
private fun ParticipationAnswersPreview( private fun ParticipationAnswersPreview(
@PreviewParameter(BetDetailPreviewProvider::class) bet: BetDetail, @PreviewParameter(BetDetailPreviewProvider::class) bet: BetDetail,

@ -22,10 +22,10 @@ fun HighlightedText(
text: String, text: String,
query: String, query: String,
highlightStyle: SpanStyle, highlightStyle: SpanStyle,
modifier: Modifier = Modifier,
fontSize: TextUnit = TextUnit.Unspecified, fontSize: TextUnit = TextUnit.Unspecified,
fontStyle: FontStyle? = null, fontStyle: FontStyle? = null,
fontWeight: FontWeight? = null, fontWeight: FontWeight? = null,
modifier: Modifier = Modifier,
color: Color = Color.Unspecified, color: Color = Color.Unspecified,
textAlign: TextAlign? = null, textAlign: TextAlign? = null,
style: TextStyle = LocalTextStyle.current style: TextStyle = LocalTextStyle.current

@ -69,7 +69,13 @@ fun FriendsScreenContent(
} }
} }
}, },
SectionElement(stringResource(id = R.string.friends_requests_tab)) { SectionElement(
stringResource(
id = R.string.friends_requests_tab,
(requestsTabState as? FriendsScreenViewModel.RequestsTabState.Loaded)
?.users?.size ?: 0
)
) {
when (requestsTabState) { when (requestsTabState) {
is FriendsScreenViewModel.RequestsTabState.Loaded -> { is FriendsScreenViewModel.RequestsTabState.Loaded -> {

@ -2,6 +2,7 @@ package fr.iut.alldev.allin.ui.friends.tabs
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
@ -12,12 +13,14 @@ import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Search import androidx.compose.material.icons.filled.Search
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.graphics.vector.rememberVectorPainter
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import fr.iut.alldev.allin.R import fr.iut.alldev.allin.R
import fr.iut.alldev.allin.data.model.FriendStatus import fr.iut.alldev.allin.data.model.FriendStatus
@ -35,6 +38,7 @@ fun FriendsScreenAddTab(
onToggleDeleteFriend: (User) -> Unit, onToggleDeleteFriend: (User) -> Unit,
setSearch: (String) -> Unit, setSearch: (String) -> Unit,
) { ) {
Box {
LazyColumn( LazyColumn(
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
contentPadding = WindowInsets.navigationBars.asPaddingValues(start = 24.dp, end = 24.dp, top = 18.dp), contentPadding = WindowInsets.navigationBars.asPaddingValues(start = 24.dp, end = 24.dp, top = 18.dp),
@ -64,19 +68,29 @@ fun FriendsScreenAddTab(
toggleIsFriend = { onToggleDeleteFriend(it) } toggleIsFriend = { onToggleDeleteFriend(it) }
) )
} }
}
if (friends.isEmpty() && search.isBlank()) { if (friends.isEmpty() && search.isBlank()) {
item {
AllInEmptyView( AllInEmptyView(
text = stringResource(id = R.string.friends_empty_text), text = stringResource(id = R.string.friends_empty_text),
subtext = stringResource(id = R.string.friends_empty_subtext), subtext = stringResource(id = R.string.friends_empty_subtext),
image = painterResource(id = R.drawable.silhouettes), image = painterResource(id = R.drawable.silhouettes),
modifier = Modifier modifier = Modifier.align(Alignment.Center)
.fillMaxWidth()
.padding(top = 24.dp)
) )
} }
} }
}
@Preview
@Composable
private fun FriendsScreenAddTabPreview() {
AllInTheme {
FriendsScreenAddTab(
friends = emptyList(),
search = "",
onToggleDeleteFriend = { },
setSearch = { }
)
} }
} }

@ -1,16 +1,24 @@
package fr.iut.alldev.allin.ui.friends.tabs package fr.iut.alldev.allin.ui.friends.tabs
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.navigationBars
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import fr.iut.alldev.allin.R
import fr.iut.alldev.allin.data.model.User import fr.iut.alldev.allin.data.model.User
import fr.iut.alldev.allin.ext.asPaddingValues import fr.iut.alldev.allin.ext.asPaddingValues
import fr.iut.alldev.allin.theme.AllInTheme
import fr.iut.alldev.allin.ui.core.bet.AllInEmptyView
import fr.iut.alldev.allin.ui.friends.components.FriendsScreenRequestLine import fr.iut.alldev.allin.ui.friends.components.FriendsScreenRequestLine
@Composable @Composable
@ -19,6 +27,7 @@ fun FriendsScreenRequestsTab(
acceptRequest: (User) -> Unit, acceptRequest: (User) -> Unit,
declineRequest: (User) -> Unit declineRequest: (User) -> Unit
) { ) {
Box {
LazyColumn( LazyColumn(
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
contentPadding = WindowInsets.navigationBars.asPaddingValues(start = 24.dp, end = 24.dp, top = 18.dp), contentPadding = WindowInsets.navigationBars.asPaddingValues(start = 24.dp, end = 24.dp, top = 18.dp),
@ -31,6 +40,27 @@ fun FriendsScreenRequestsTab(
decline = { declineRequest(it) } decline = { declineRequest(it) }
) )
} }
}
if (requests.isEmpty()) {
AllInEmptyView(
text = stringResource(id = R.string.friends_requests_empty_text),
subtext = null,
image = painterResource(id = R.drawable.mailbox),
modifier = Modifier.align(Alignment.Center)
)
}
}
}
@Preview
@Composable
private fun FriendsScreenRequestsTabPreview() {
AllInTheme {
FriendsScreenRequestsTab(
requests = emptyList(),
acceptRequest = { },
declineRequest = { }
)
} }
} }

@ -3,9 +3,9 @@ package fr.iut.alldev.allin.ui.preview
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
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.BetStatus import fr.iut.alldev.allin.data.model.bet.BetStatus
import fr.iut.alldev.allin.data.model.bet.BinaryBet
import fr.iut.alldev.allin.data.model.bet.CustomBet import fr.iut.alldev.allin.data.model.bet.CustomBet
import fr.iut.alldev.allin.data.model.bet.MatchBet import fr.iut.alldev.allin.data.model.bet.MatchBet
import fr.iut.alldev.allin.data.model.bet.BinaryBet
import java.time.ZonedDateTime import java.time.ZonedDateTime
class BetPreviewProvider : PreviewParameterProvider<Bet> { class BetPreviewProvider : PreviewParameterProvider<Bet> {
@ -18,7 +18,9 @@ class BetPreviewProvider : PreviewParameterProvider<Bet> {
endBetDate = ZonedDateTime.now(), endBetDate = ZonedDateTime.now(),
isPublic = true, isPublic = true,
betStatus = BetStatus.FINISHED, betStatus = BetStatus.FINISHED,
creator = "creator" creator = "creator",
totalStakes = 0,
totalParticipants = 0
), ),
MatchBet( MatchBet(
id = "2", id = "2",
@ -30,7 +32,9 @@ class BetPreviewProvider : PreviewParameterProvider<Bet> {
betStatus = BetStatus.FINISHED, betStatus = BetStatus.FINISHED,
creator = "creator", creator = "creator",
nameTeam1 = "The Monarchs", nameTeam1 = "The Monarchs",
nameTeam2 = "Climate Change" nameTeam2 = "Climate Change",
totalStakes = 0,
totalParticipants = 0
), ),
CustomBet( CustomBet(
id = "3", id = "3",
@ -46,8 +50,9 @@ class BetPreviewProvider : PreviewParameterProvider<Bet> {
"Answer 2", "Answer 2",
"Answer 3", "Answer 3",
"Answer 4" "Answer 4"
) ),
totalStakes = 0,
totalParticipants = 0
), ),
) )
} }

@ -3,9 +3,9 @@ package fr.iut.alldev.allin.ui.preview
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
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.BetStatus import fr.iut.alldev.allin.data.model.bet.BetStatus
import fr.iut.alldev.allin.data.model.bet.BinaryBet
import fr.iut.alldev.allin.data.model.bet.CustomBet import fr.iut.alldev.allin.data.model.bet.CustomBet
import fr.iut.alldev.allin.data.model.bet.MatchBet import fr.iut.alldev.allin.data.model.bet.MatchBet
import fr.iut.alldev.allin.data.model.bet.BinaryBet
import java.time.ZonedDateTime import java.time.ZonedDateTime
@ -20,7 +20,9 @@ class BetWithStatusPreviewProvider : PreviewParameterProvider<Bet> {
endBetDate = ZonedDateTime.now(), endBetDate = ZonedDateTime.now(),
isPublic = true, isPublic = true,
betStatus = status, betStatus = status,
creator = "creator" creator = "creator",
totalStakes = 0,
totalParticipants = 0
), ),
MatchBet( MatchBet(
id = "2", id = "2",
@ -32,7 +34,9 @@ class BetWithStatusPreviewProvider : PreviewParameterProvider<Bet> {
betStatus = status, betStatus = status,
creator = "creator", creator = "creator",
nameTeam1 = "The Monarchs", nameTeam1 = "The Monarchs",
nameTeam2 = "Climate Change" nameTeam2 = "Climate Change",
totalStakes = 0,
totalParticipants = 0
), ),
CustomBet( CustomBet(
id = "3", id = "3",
@ -48,8 +52,9 @@ class BetWithStatusPreviewProvider : PreviewParameterProvider<Bet> {
"Answer 2", "Answer 2",
"Answer 3", "Answer 3",
"Answer 4" "Answer 4"
) ),
totalStakes = 0,
totalParticipants = 0
) )
) )
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

@ -172,11 +172,12 @@
<string name="friends_title">Amis</string> <string name="friends_title">Amis</string>
<string name="friends_request_sent">Requête envoyée</string> <string name="friends_request_sent">Requête envoyée</string>
<string name="friends_add_tab">Ajouter</string> <string name="friends_add_tab">Ajouter</string>
<string name="friends_requests_tab">Demandes</string> <string name="friends_requests_tab">Demandes (%d)</string>
<string name="friends_requests_accept">Accepter</string> <string name="friends_requests_accept">Accepter</string>
<string name="friends_requests_decline">Refuser</string> <string name="friends_requests_decline">Refuser</string>
<string name="friends_empty_text">Vous n\'avez pas encore d\'amis</string> <string name="friends_empty_text">Vous n\'avez pas encore d\'amis</string>
<string name="friends_empty_subtext">Ajoutez des amis depuis cet écran</string> <string name="friends_empty_subtext">Ajoutez des amis depuis cet écran</string>
<string name="friends_requests_empty_text">Aucunes demandes d\'amis en attentes</string>
<!--Daily reward--> <!--Daily reward-->
<string name="daily_reward_title">Récompense quotidienne</string> <string name="daily_reward_title">Récompense quotidienne</string>

@ -169,11 +169,12 @@
<string name="friends_title">Friends</string> <string name="friends_title">Friends</string>
<string name="friends_request_sent">Request sent</string> <string name="friends_request_sent">Request sent</string>
<string name="friends_add_tab">Add friends</string> <string name="friends_add_tab">Add friends</string>
<string name="friends_requests_tab">Requests</string> <string name="friends_requests_tab">Requests (%d)</string>
<string name="friends_requests_accept">Accept</string> <string name="friends_requests_accept">Accept</string>
<string name="friends_requests_decline">Decline</string> <string name="friends_requests_decline">Decline</string>
<string name="friends_empty_text">You don\'t have any friends yet</string> <string name="friends_empty_text">You don\'t have any friends yet</string>
<string name="friends_empty_subtext">Add new friends from this screen</string> <string name="friends_empty_subtext">Add new friends from this screen</string>
<string name="friends_requests_empty_text">No currently pending friend requests</string>
<!--Daily reward--> <!--Daily reward-->
<string name="daily_reward_title">Daily reward</string> <string name="daily_reward_title">Daily reward</string>

@ -7,11 +7,11 @@ import fr.iut.alldev.allin.data.model.bet.BetResult
import fr.iut.alldev.allin.data.model.bet.BetResultDetail import fr.iut.alldev.allin.data.model.bet.BetResultDetail
import fr.iut.alldev.allin.data.model.bet.BetStatus import fr.iut.alldev.allin.data.model.bet.BetStatus
import fr.iut.alldev.allin.data.model.bet.BetType import fr.iut.alldev.allin.data.model.bet.BetType
import fr.iut.alldev.allin.data.model.bet.BinaryBet
import fr.iut.alldev.allin.data.model.bet.CustomBet import fr.iut.alldev.allin.data.model.bet.CustomBet
import fr.iut.alldev.allin.data.model.bet.MatchBet import fr.iut.alldev.allin.data.model.bet.MatchBet
import fr.iut.alldev.allin.data.model.bet.NO_VALUE import fr.iut.alldev.allin.data.model.bet.NO_VALUE
import fr.iut.alldev.allin.data.model.bet.YES_VALUE import fr.iut.alldev.allin.data.model.bet.YES_VALUE
import fr.iut.alldev.allin.data.model.bet.BinaryBet
import fr.iut.alldev.allin.data.model.bet.vo.BetAnswerDetail import fr.iut.alldev.allin.data.model.bet.vo.BetAnswerDetail
import fr.iut.alldev.allin.data.model.bet.vo.BetDetail import fr.iut.alldev.allin.data.model.bet.vo.BetDetail
import fr.iut.alldev.allin.data.serialization.ZonedDateTimeSerializer import fr.iut.alldev.allin.data.serialization.ZonedDateTimeSerializer
@ -30,7 +30,10 @@ data class ResponseBet(
@Serializable(ZonedDateTimeSerializer::class) var endBet: ZonedDateTime, @Serializable(ZonedDateTimeSerializer::class) var endBet: ZonedDateTime,
var isPrivate: Boolean, var isPrivate: Boolean,
var response: List<String>, var response: List<String>,
val createdBy: String val createdBy: String,
var popularityscore: Int = 0,
val totalStakes: Int = 0,
val totalParticipants: Int = 0
) { ) {
fun toBet(): Bet = when { fun toBet(): Bet = when {
response.toSet() == setOf(YES_VALUE, NO_VALUE) -> { response.toSet() == setOf(YES_VALUE, NO_VALUE) -> {
@ -42,7 +45,9 @@ data class ResponseBet(
endBetDate = endBet, endBetDate = endBet,
isPublic = !isPrivate, isPublic = !isPrivate,
betStatus = status, betStatus = status,
creator = createdBy creator = createdBy,
totalStakes = totalStakes,
totalParticipants = totalParticipants
) )
} }
@ -57,7 +62,9 @@ data class ResponseBet(
betStatus = status, betStatus = status,
creator = createdBy, creator = createdBy,
nameTeam1 = response.firstOrNull() ?: "", nameTeam1 = response.firstOrNull() ?: "",
nameTeam2 = response.lastOrNull() ?: "" nameTeam2 = response.lastOrNull() ?: "",
totalStakes = totalStakes,
totalParticipants = totalParticipants
) )
} }
@ -71,7 +78,9 @@ data class ResponseBet(
isPublic = !isPrivate, isPublic = !isPrivate,
betStatus = status, betStatus = status,
creator = createdBy, creator = createdBy,
possibleAnswers = response possibleAnswers = response,
totalStakes = totalStakes,
totalParticipants = totalParticipants
) )
} }
} }

@ -12,6 +12,8 @@ sealed class Bet(
open val endBetDate: ZonedDateTime, open val endBetDate: ZonedDateTime,
open val isPublic: Boolean, open val isPublic: Boolean,
open val betStatus: BetStatus, open val betStatus: BetStatus,
open val totalStakes: Int,
open val totalParticipants: Int
) { ) {
abstract fun getBetType(): BetType abstract fun getBetType(): BetType
abstract fun getResponses(): List<String> abstract fun getResponses(): List<String>

@ -15,8 +15,7 @@ class BetFactory {
isPublic: Boolean, isPublic: Boolean,
nameTeam1: String = "", nameTeam1: String = "",
nameTeam2: String = "", nameTeam2: String = "",
possibleAnswers: List<String> = emptyList(), possibleAnswers: List<String> = emptyList()
): Bet = ): Bet =
when (betType) { when (betType) {
BetType.BINARY -> { BetType.BINARY -> {
@ -28,7 +27,9 @@ class BetFactory {
endRegisterDate = endRegisterDate, endRegisterDate = endRegisterDate,
endBetDate = endBetDate, endBetDate = endBetDate,
isPublic = isPublic, isPublic = isPublic,
betStatus = BetStatus.WAITING betStatus = BetStatus.WAITING,
totalStakes = 0,
totalParticipants = 0
) )
} }
@ -43,7 +44,9 @@ class BetFactory {
isPublic = isPublic, isPublic = isPublic,
betStatus = BetStatus.WAITING, betStatus = BetStatus.WAITING,
nameTeam1 = nameTeam1, nameTeam1 = nameTeam1,
nameTeam2 = nameTeam2 nameTeam2 = nameTeam2,
totalStakes = 0,
totalParticipants = 0
) )
} }
@ -58,7 +61,9 @@ class BetFactory {
endBetDate = endBetDate, endBetDate = endBetDate,
isPublic = isPublic, isPublic = isPublic,
betStatus = BetStatus.WAITING, betStatus = BetStatus.WAITING,
possibleAnswers = possibleAnswers possibleAnswers = possibleAnswers,
totalStakes = 0,
totalParticipants = 0
) )
} }
} }

@ -13,7 +13,9 @@ data class BinaryBet(
override val endRegisterDate: ZonedDateTime, override val endRegisterDate: ZonedDateTime,
override val endBetDate: ZonedDateTime, override val endBetDate: ZonedDateTime,
override val isPublic: Boolean, override val isPublic: Boolean,
override val betStatus: BetStatus override val betStatus: BetStatus,
override val totalStakes: Int,
override val totalParticipants: Int
) : Bet( ) : Bet(
id, id,
creator, creator,
@ -22,7 +24,9 @@ data class BinaryBet(
endRegisterDate, endRegisterDate,
endBetDate, endBetDate,
isPublic, isPublic,
betStatus betStatus,
totalStakes,
totalParticipants
) { ) {
override fun getBetType() = BetType.BINARY override fun getBetType() = BetType.BINARY
override fun getResponses(): List<String> = listOf(YES_VALUE, NO_VALUE) override fun getResponses(): List<String> = listOf(YES_VALUE, NO_VALUE)

@ -11,6 +11,8 @@ data class CustomBet(
override val endBetDate: ZonedDateTime, override val endBetDate: ZonedDateTime,
override val isPublic: Boolean, override val isPublic: Boolean,
override val betStatus: BetStatus, override val betStatus: BetStatus,
override val totalStakes: Int,
override val totalParticipants: Int,
val possibleAnswers: List<String> val possibleAnswers: List<String>
) : Bet( ) : Bet(
id, id,
@ -20,7 +22,9 @@ data class CustomBet(
endRegisterDate, endRegisterDate,
endBetDate, endBetDate,
isPublic, isPublic,
betStatus betStatus,
totalStakes,
totalParticipants
) { ) {
override fun getBetType() = BetType.CUSTOM override fun getBetType() = BetType.CUSTOM

@ -11,6 +11,8 @@ data class MatchBet(
override val endBetDate: ZonedDateTime, override val endBetDate: ZonedDateTime,
override val isPublic: Boolean, override val isPublic: Boolean,
override val betStatus: BetStatus, override val betStatus: BetStatus,
override val totalStakes: Int,
override val totalParticipants: Int,
val nameTeam1: String, val nameTeam1: String,
val nameTeam2: String val nameTeam2: String
) : Bet( ) : Bet(
@ -21,7 +23,9 @@ data class MatchBet(
endRegisterDate, endRegisterDate,
endBetDate, endBetDate,
isPublic, isPublic,
betStatus betStatus,
totalStakes,
totalParticipants
) { ) {
override fun getBetType() = BetType.MATCH override fun getBetType() = BetType.MATCH
override fun getResponses(): List<String> = listOf(nameTeam1, nameTeam2) override fun getResponses(): List<String> = listOf(nameTeam1, nameTeam2)

Loading…
Cancel
Save