Add manual pairing API call

This commit is contained in:
Claude Brisson
2023-06-05 07:43:07 +02:00
parent a9697b9dce
commit 76aa60f3c6
4 changed files with 24 additions and 4 deletions

View File

@@ -4,6 +4,7 @@ import com.republicate.kson.Json
import com.republicate.kson.toJsonArray import com.republicate.kson.toJsonArray
import org.jeudego.pairgoth.api.ApiHandler.Companion.badRequest import org.jeudego.pairgoth.api.ApiHandler.Companion.badRequest
import org.jeudego.pairgoth.model.Pairing import org.jeudego.pairgoth.model.Pairing
import org.jeudego.pairgoth.model.getID
import org.jeudego.pairgoth.model.toID import org.jeudego.pairgoth.model.toID
import org.jeudego.pairgoth.model.toJson import org.jeudego.pairgoth.model.toJson
import org.jeudego.pairgoth.web.Event import org.jeudego.pairgoth.web.Event
@@ -49,6 +50,20 @@ object PairingHandler: PairgothApiHandler {
return ret return ret
} }
override fun put(request: HttpServletRequest): Json {
val tournament = getTournament(request)
val round = getSubSelector(request)?.toIntOrNull() ?: badRequest("invalid round number")
// only allow last round (if players have not been paired in the last round, it *may* be possible to be more laxist...)
if (round != tournament.lastRound()) badRequest("cannot edit pairings in other rounds but the last")
val payload = getObjectPayload(request)
val game = tournament.games(round)[payload.getInt("id")] ?: badRequest("invalid game id")
game.black = payload.getID("b") ?: badRequest("missing black player id")
game.white = payload.getID("w") ?: badRequest("missing white player id")
if (payload.containsKey("h")) game.handicap = payload.getString("h")?.toIntOrNull() ?: badRequest("invalid handicap")
Event.dispatch(gameUpdated, Json.Object("tournament" to tournament.id, "round" to round, "data" to game.toJson()))
return Json.Object("success" to true)
}
override fun delete(request: HttpServletRequest): Json { override fun delete(request: HttpServletRequest): Json {
val tournament = getTournament(request) val tournament = getTournament(request)
val round = getSubSelector(request)?.toIntOrNull() ?: badRequest("invalid round number") val round = getSubSelector(request)?.toIntOrNull() ?: badRequest("invalid round number")

View File

@@ -1,6 +1,10 @@
package org.jeudego.pairgoth.model package org.jeudego.pairgoth.model
import com.republicate.kson.Json
typealias ID = Int typealias ID = Int
fun String.toID() = toInt() fun String.toID() = toInt()
fun Number.toID() = toInt() fun Number.toID() = toInt()
fun Json.Object.getID(key: String) = getInt(key)
fun Json.Array.getID(index: Int) = getInt(index)

View File

@@ -6,9 +6,9 @@ import java.util.*
data class Game( data class Game(
val id: ID, val id: ID,
val white: ID, var white: ID,
val black: ID, var black: ID,
val handicap: Int = 0, var handicap: Int = 0,
var result: Result = UNKNOWN var result: Result = UNKNOWN
) { ) {
enum class Result(val symbol: Char) { enum class Result(val symbol: Char) {

View File

@@ -15,6 +15,7 @@ enum class Event {
teamDeleted, teamDeleted,
gamesAdded, gamesAdded,
gamesDeleted, gamesDeleted,
gameUpdated,
resultUpdated, resultUpdated,
; ;