Manual tables handling
This commit is contained in:
@@ -103,6 +103,7 @@ object PairingHandler: PairgothApiHandler {
|
|||||||
if (payload.containsKey("h")) game.handicap = payload.getString("h")?.toIntOrNull() ?: badRequest("invalid handicap")
|
if (payload.containsKey("h")) game.handicap = payload.getString("h")?.toIntOrNull() ?: badRequest("invalid handicap")
|
||||||
if (payload.containsKey("t")) {
|
if (payload.containsKey("t")) {
|
||||||
game.table = payload.getString("t")?.toIntOrNull() ?: badRequest("invalid table number")
|
game.table = payload.getString("t")?.toIntOrNull() ?: badRequest("invalid table number")
|
||||||
|
game.forcedTable = true
|
||||||
}
|
}
|
||||||
tournament.dispatchEvent(GameUpdated, request, Json.Object("round" to round, "game" to game.toJson()))
|
tournament.dispatchEvent(GameUpdated, request, Json.Object("round" to round, "game" to game.toJson()))
|
||||||
if (game.table != previousTable) {
|
if (game.table != previousTable) {
|
||||||
|
@@ -11,8 +11,10 @@ data class Game(
|
|||||||
var black: ID,
|
var black: ID,
|
||||||
var handicap: Int = 0,
|
var handicap: Int = 0,
|
||||||
var result: Result = UNKNOWN,
|
var result: Result = UNKNOWN,
|
||||||
var drawnUpDown: Int = 0 // counted for white (black gets the opposite)
|
var drawnUpDown: Int = 0, // counted for white (black gets the opposite)
|
||||||
|
var forcedTable: Boolean = false
|
||||||
) {
|
) {
|
||||||
|
|
||||||
companion object {}
|
companion object {}
|
||||||
enum class Result(val symbol: Char) {
|
enum class Result(val symbol: Char) {
|
||||||
UNKNOWN('?'),
|
UNKNOWN('?'),
|
||||||
@@ -43,7 +45,8 @@ fun Game.toJson() = Json.Object(
|
|||||||
"b" to black,
|
"b" to black,
|
||||||
"h" to handicap,
|
"h" to handicap,
|
||||||
"r" to "${result.symbol}",
|
"r" to "${result.symbol}",
|
||||||
"dd" to drawnUpDown
|
"dd" to drawnUpDown,
|
||||||
|
"ft" to forcedTable
|
||||||
)
|
)
|
||||||
|
|
||||||
fun Game.Companion.fromJson(json: Json.Object) = Game(
|
fun Game.Companion.fromJson(json: Json.Object) = Game(
|
||||||
@@ -53,5 +56,6 @@ fun Game.Companion.fromJson(json: Json.Object) = Game(
|
|||||||
black = json.getID("b") ?: throw Error("missing black player"),
|
black = json.getID("b") ?: throw Error("missing black player"),
|
||||||
handicap = json.getInt("h") ?: 0,
|
handicap = json.getInt("h") ?: 0,
|
||||||
result = json.getChar("r")?.let { Game.Result.fromSymbol(it) } ?: UNKNOWN,
|
result = json.getChar("r")?.let { Game.Result.fromSymbol(it) } ?: UNKNOWN,
|
||||||
drawnUpDown = json.getInt("dd") ?: 0
|
drawnUpDown = json.getInt("dd") ?: 0,
|
||||||
|
forcedTable = json.getBoolean("ft") ?: false
|
||||||
)
|
)
|
||||||
|
@@ -130,11 +130,18 @@ sealed class Tournament <P: Pairable>(
|
|||||||
var changed = false
|
var changed = false
|
||||||
var nextTable = 1
|
var nextTable = 1
|
||||||
val excluded = excludedTables(round)
|
val excluded = excludedTables(round)
|
||||||
games(round).values.filter{ game -> pivot?.let { pivot.id != game.id } ?: true }.sortedBy(orderBY).forEach { game ->
|
val forcedTablesGames = games(round).values.filter { game -> game.forcedTable && (pivot == null || game != pivot && game.table != pivot.table) }
|
||||||
while (excluded.contains(nextTable)) ++nextTable
|
val forcedTables = forcedTablesGames.map { game -> game.table }.toSet()
|
||||||
|
val excludedAndForced = excluded union forcedTables
|
||||||
|
games(round).values
|
||||||
|
.filter { game -> pivot?.let { pivot.id != game.id } ?: true }
|
||||||
|
.filter { game -> !forcedTablesGames.contains(game) }
|
||||||
|
.sortedBy(orderBY)
|
||||||
|
.forEach { game ->
|
||||||
|
while (excludedAndForced.contains(nextTable)) ++nextTable
|
||||||
if (pivot != null && nextTable == pivot.table) {
|
if (pivot != null && nextTable == pivot.table) {
|
||||||
++nextTable
|
++nextTable
|
||||||
while (excluded.contains(nextTable)) ++nextTable
|
while (excludedAndForced.contains(nextTable)) ++nextTable
|
||||||
}
|
}
|
||||||
if (game.table != 0) {
|
if (game.table != 0) {
|
||||||
changed = changed || game.table != nextTable
|
changed = changed || game.table != nextTable
|
||||||
|
Reference in New Issue
Block a user