From 453d6d6570d00936b96ad4ff84d15e27c68972e1 Mon Sep 17 00:00:00 2001 From: Claude Brisson Date: Mon, 12 Jun 2023 09:43:05 +0200 Subject: [PATCH] Change payload of tournaments list --- .../org/jeudego/pairgoth/api/TournamentHandler.kt | 3 ++- .../kotlin/org/jeudego/pairgoth/store/FileStore.kt | 11 ++++++----- .../kotlin/org/jeudego/pairgoth/store/MemoryStore.kt | 2 +- .../org/jeudego/pairgoth/store/StoreImplementation.kt | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/api/TournamentHandler.kt b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/api/TournamentHandler.kt index d803114..fdd7e1a 100644 --- a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/api/TournamentHandler.kt +++ b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/api/TournamentHandler.kt @@ -1,6 +1,7 @@ package org.jeudego.pairgoth.api import com.republicate.kson.Json +import com.republicate.kson.toJsonObject import org.jeudego.pairgoth.api.ApiHandler.Companion.PAYLOAD_KEY import org.jeudego.pairgoth.api.ApiHandler.Companion.badRequest import org.jeudego.pairgoth.ext.OpenGotha @@ -21,7 +22,7 @@ object TournamentHandler: PairgothApiHandler { override fun get(request: HttpServletRequest, response: HttpServletResponse): Json? { val accept = request.getHeader("Accept") return when (val id = getSelector(request)?.toIntOrNull()) { - null -> Json.Array(Store.getTournamentsIDs()) + null -> Store.getTournaments().toJsonObject() else -> when { ApiServlet.isJson(accept) -> Store.getTournament(id)?.toJson() ?: badRequest("no tournament with id #${id}") diff --git a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/store/FileStore.kt b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/store/FileStore.kt index 1f70fb3..413e3fb 100644 --- a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/store/FileStore.kt +++ b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/store/FileStore.kt @@ -22,7 +22,7 @@ private fun Tournament<*>.filename() = "${id.toString().padStart(LEFT_PAD, '0')} class FileStore(pathStr: String): StoreImplementation { companion object { - private val filenameRegex = Regex("^(\\d+)-.*\\.tour$") + private val filenameRegex = Regex("^(\\d+)-(.*)\\.tour$") private val timestampFormat: DateFormat = SimpleDateFormat("yyyyMMddHHmmss") private val timestamp: String get() = timestampFormat.format(Date()) } @@ -33,14 +33,15 @@ class FileStore(pathStr: String): StoreImplementation { } init { - _nextTournamentId.set(getTournamentsIDs().maxOrNull() ?: 0.toID()) + _nextTournamentId.set(getTournaments().keys.maxOrNull() ?: 0.toID()) } - override fun getTournamentsIDs(): Set { + override fun getTournaments(): Map { return path.useDirectoryEntries("*.tour") { entries -> entries.mapNotNull { entry -> - filenameRegex.matchEntire(entry.fileName.toString())?.groupValues?.get(1)?.toID() - }.toSortedSet() + val match = filenameRegex.matchEntire(entry.fileName.toString()) + match?.let { Pair(it.groupValues[1].toID(), it.groupValues[2]) } + }.sortedBy { it.first }.toMap() } } diff --git a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/store/MemoryStore.kt b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/store/MemoryStore.kt index 1d7f99e..4ff7387 100644 --- a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/store/MemoryStore.kt +++ b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/store/MemoryStore.kt @@ -6,7 +6,7 @@ import org.jeudego.pairgoth.model.Tournament class MemoryStore: StoreImplementation { private val tournaments = mutableMapOf>() - override fun getTournamentsIDs(): Set = tournaments.keys + override fun getTournaments(): Map = tournaments.mapValues { it.value.shortName } override fun addTournament(tournament: Tournament<*>) { if (tournaments.containsKey(tournament.id)) throw Error("tournament id #${tournament.id} already exists") diff --git a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/store/StoreImplementation.kt b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/store/StoreImplementation.kt index 0948a47..0a6ac83 100644 --- a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/store/StoreImplementation.kt +++ b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/store/StoreImplementation.kt @@ -14,7 +14,7 @@ interface StoreImplementation { val nextPlayerId get() = _nextPlayerId.incrementAndGet() val nextGameId get() = _nextGameId.incrementAndGet() - fun getTournamentsIDs(): Set + fun getTournaments(): Map fun addTournament(tournament: Tournament<*>) fun getTournament(id: ID): Tournament<*>? fun replaceTournament(tournament: Tournament<*>)