You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
3.4 KiB
96 lines
3.4 KiB
package allin.data.mock
|
|
|
|
import allin.data.ParticipationDataSource
|
|
import allin.model.Participation
|
|
|
|
class MockParticipationDataSource(private val mockData: MockDataSource.MockData) : ParticipationDataSource {
|
|
private val participations get() = mockData.participations
|
|
private val betInfos get() = mockData.betInfos
|
|
private val answerInfos get() = mockData.answerInfos
|
|
|
|
override fun addParticipation(participation: Participation) {
|
|
participations += participation
|
|
var betTotalStakes = 0
|
|
|
|
betInfos.replaceAll {
|
|
if (participation.betId == it.id) {
|
|
betTotalStakes = it.totalStakes + participation.stake
|
|
val betTotalParticipants = it.totalParticipants + 1
|
|
it.copy(
|
|
totalStakes = betTotalStakes,
|
|
totalParticipants = betTotalParticipants
|
|
)
|
|
} else {
|
|
it
|
|
}
|
|
}
|
|
|
|
answerInfos.replaceAll {
|
|
if (participation.betId == it.betId) {
|
|
if (participation.answer == it.response) {
|
|
val answerTotalStakes = it.totalStakes + participation.stake
|
|
val probability = answerTotalStakes / betTotalStakes.toFloat()
|
|
it.copy(
|
|
totalStakes = answerTotalStakes,
|
|
odds = 1 / probability
|
|
)
|
|
} else {
|
|
val probability = it.totalStakes / betTotalStakes.toFloat()
|
|
it.copy(odds = 1 / probability)
|
|
}
|
|
} else {
|
|
it
|
|
}
|
|
}
|
|
}
|
|
|
|
override fun getParticipationFromBetId(betid: String): List<Participation> =
|
|
participations.filter { it.betId == betid }
|
|
|
|
override fun getParticipationFromUserId(username: String, betid: String): List<Participation> =
|
|
participations.filter { it.betId == betid && it.username == username }
|
|
|
|
override fun deleteParticipation(id: String): Boolean {
|
|
val participation = participations.find { it.id == id }
|
|
val result = participations.remove(participation)
|
|
var betTotalStakes = 0
|
|
|
|
betInfos.replaceAll {
|
|
if (participation?.betId == it.id) {
|
|
betTotalStakes = it.totalStakes - participation.stake
|
|
val betTotalParticipants = it.totalParticipants - 1
|
|
it.copy(
|
|
totalStakes = betTotalStakes,
|
|
totalParticipants = betTotalParticipants
|
|
)
|
|
} else {
|
|
it
|
|
}
|
|
}
|
|
|
|
answerInfos.replaceAll {
|
|
if (participation?.betId == it.betId) {
|
|
if (participation.answer == it.response) {
|
|
val answerTotalStakes = it.totalStakes - participation.stake
|
|
val probability = answerTotalStakes / betTotalStakes.toFloat()
|
|
it.copy(
|
|
totalStakes = answerTotalStakes,
|
|
odds = 1 / probability
|
|
)
|
|
} else {
|
|
val probability = it.totalStakes / betTotalStakes.toFloat()
|
|
it.copy(odds = 1 / probability)
|
|
}
|
|
} else {
|
|
it
|
|
}
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
override fun getBestWinFromUserid(userId: String) =
|
|
mockData.participations.filter { it.id == userId }.maxBy { it.stake }.stake
|
|
|
|
|
|
} |