Redefinition of models in Firestore data to allow single query for bets in home screen
Closed this issue · 0 comments
pablobaldez commented
Here are an example in kotlin to show the model to be followed in firestore
CompetitionRound (think in another name)
data class CompetitionRound<T : Contests>(
val startAt: Date,
val allowBetsAt: Date,
val competition: Competition,
val round: Round,
val approxDuration: Duration?,
val contests: T
)
sealed interface Contests
data class MmaFight(
val fighters: PairContest<Athlete>,
val method: MultipleContest<MmaWinMethod>,
) : Contests
data class FootballMatch(
val teams: PairContest<Team>,
val score: MultipleContest<Score>,
) : Contests
data class BigBrotherElimination(
val winner: PairContest<Athlete>,
val score: MultipleContest<Score>,
) : Contests
data class PresidentElection(
val winner: PairContest<Athlete>,
val score: MultipleContest<Score>
)
data class FirstTurnElection(
val decision: PairContest<Boolean>
)
data class LeagueTopScorer(
val player: MultipleContest<Athlete>,
val goals: MultipleContest<Int>
)
Score
data class Score(
val contender1: ContenderScore,
val contender2: ContenderScore
)
data class ContenderScore(
val competitorId: String,
val value: Int
)
Bet
sealed interface Contest
data class PairContest<T>(
val contender1: Bet<T>,
val contender2: Bet<T>,
val draw: Bet<Nothing>?,
) : Contest
data class MultipleContest<T>(
val contenders: List<Bet<T>>,
) : Contest
data class Bet<T>(
val odds: Odds,
val subject: T,
)
sealed class Odds {
data class American(val value: Double)
data class Decimal(val value: Double)
}
some sport data examples
data class Round(
val id: String,
val name: String,
val index: Int,
val startAt: Date,
)
data class Team(
val id: String,
val name: String,
val icon: String,
val foundation: Date,
val athletes: List<Athlete>
)
data class Athlete(
val id: String,
val name: String,
val bornDate: Date,
val country: Country
)
data class Score(
val contender1: ContenderScore,
val contender2: ContenderScore
)
data class ContenderScore(
val competitorId: String,
val value: Number
)
class Competition(
val start: Date,
val end: Date?,
val currentRound: Int,
val rounds: List<Round>
)