mob1st/bet-functions

Redefinition of models in Firestore data to allow single query for bets in home screen

Closed this issue · 0 comments

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>
)