Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 20 additions & 13 deletions src/main/kotlin/net/sportsday/services/GamesService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,11 @@ import net.sportsday.utils.configuration.KeyValueStore
import org.jetbrains.exposed.sql.SizedCollection
import org.jetbrains.exposed.sql.transactions.transaction
import java.time.LocalDateTime
import kotlin.math.abs
import kotlin.time.Duration.Companion.minutes

private const val EPSILON = 1e-6

/**
* Created by testusuke on 2023/05/05
* @author testusuke
Expand Down Expand Up @@ -456,14 +459,18 @@ object GamesService {
if (game.calculationType == CalculationType.DIFF_SCORE || game.calculationType == CalculationType.TOTAL_SCORE) {
leagueTeamResults.values
.sortedWith(
compareByDescending<LeagueTeamResult> { it.score }
.apply {
if (game.calculationType == CalculationType.DIFF_SCORE) {
thenByDescending { it.goalDiff }
} else if (game.calculationType == CalculationType.TOTAL_SCORE) {
thenByDescending { it.goal }
}
},
when (game.calculationType) {
CalculationType.DIFF_SCORE ->
compareByDescending<LeagueTeamResult> { it.score }
.thenByDescending { it.goalDiff }

CalculationType.TOTAL_SCORE ->
compareByDescending<LeagueTeamResult> { it.score }
.thenByDescending { it.goal }

else ->
compareByDescending { it.score }
}
)
.map { leagueTeamResult ->
if (lastResult == null) {
Expand All @@ -472,17 +479,17 @@ object GamesService {
// if score is same, rank is same
if (game.calculationType == CalculationType.TOTAL_SCORE) {
if (
lastResult!!.score == leagueTeamResult.score &&
lastResult!!.goal == leagueTeamResult.goal
abs(lastResult!!.score - leagueTeamResult.score) < EPSILON &&
abs(lastResult!!.goal - leagueTeamResult.goal) < EPSILON
) {
leagueTeamResult.rank = lastRank
} else {
leagueTeamResult.rank = lastRank + 1
}
} else {
if (
lastResult!!.score == leagueTeamResult.score &&
lastResult!!.goalDiff == leagueTeamResult.goalDiff
abs(lastResult!!.score - leagueTeamResult.score) < EPSILON &&
abs(lastResult!!.goalDiff - leagueTeamResult.goalDiff) < EPSILON
) {
leagueTeamResult.rank = lastRank
} else {
Expand All @@ -504,7 +511,7 @@ object GamesService {
if (lastResult == null) {
leagueTeamResult.rank = 1
} else {
if (lastResult!!.score == leagueTeamResult.score) {
if (abs(lastResult!!.score - leagueTeamResult.score) < EPSILON) {
leagueTeamResult.rank = lastRank
} else {
leagueTeamResult.rank = lastRank + 1
Expand Down
Loading