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.
Api/Sources/src/main/kotlin/allin/data/mock/MockParticipationDataSource.kt

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
}