Change payload of tournaments list

This commit is contained in:
Claude Brisson
2023-06-12 09:43:05 +02:00
parent 231d90171b
commit 453d6d6570
4 changed files with 10 additions and 8 deletions

View File

@@ -1,6 +1,7 @@
package org.jeudego.pairgoth.api package org.jeudego.pairgoth.api
import com.republicate.kson.Json 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.PAYLOAD_KEY
import org.jeudego.pairgoth.api.ApiHandler.Companion.badRequest import org.jeudego.pairgoth.api.ApiHandler.Companion.badRequest
import org.jeudego.pairgoth.ext.OpenGotha import org.jeudego.pairgoth.ext.OpenGotha
@@ -21,7 +22,7 @@ object TournamentHandler: PairgothApiHandler {
override fun get(request: HttpServletRequest, response: HttpServletResponse): Json? { override fun get(request: HttpServletRequest, response: HttpServletResponse): Json? {
val accept = request.getHeader("Accept") val accept = request.getHeader("Accept")
return when (val id = getSelector(request)?.toIntOrNull()) { return when (val id = getSelector(request)?.toIntOrNull()) {
null -> Json.Array(Store.getTournamentsIDs()) null -> Store.getTournaments().toJsonObject()
else -> else ->
when { when {
ApiServlet.isJson(accept) -> Store.getTournament(id)?.toJson() ?: badRequest("no tournament with id #${id}") ApiServlet.isJson(accept) -> Store.getTournament(id)?.toJson() ?: badRequest("no tournament with id #${id}")

View File

@@ -22,7 +22,7 @@ private fun Tournament<*>.filename() = "${id.toString().padStart(LEFT_PAD, '0')}
class FileStore(pathStr: String): StoreImplementation { class FileStore(pathStr: String): StoreImplementation {
companion object { companion object {
private val filenameRegex = Regex("^(\\d+)-.*\\.tour$") private val filenameRegex = Regex("^(\\d+)-(.*)\\.tour$")
private val timestampFormat: DateFormat = SimpleDateFormat("yyyyMMddHHmmss") private val timestampFormat: DateFormat = SimpleDateFormat("yyyyMMddHHmmss")
private val timestamp: String get() = timestampFormat.format(Date()) private val timestamp: String get() = timestampFormat.format(Date())
} }
@@ -33,14 +33,15 @@ class FileStore(pathStr: String): StoreImplementation {
} }
init { init {
_nextTournamentId.set(getTournamentsIDs().maxOrNull() ?: 0.toID()) _nextTournamentId.set(getTournaments().keys.maxOrNull() ?: 0.toID())
} }
override fun getTournamentsIDs(): Set<ID> { override fun getTournaments(): Map<ID, String> {
return path.useDirectoryEntries("*.tour") { entries -> return path.useDirectoryEntries("*.tour") { entries ->
entries.mapNotNull { entry -> entries.mapNotNull { entry ->
filenameRegex.matchEntire(entry.fileName.toString())?.groupValues?.get(1)?.toID() val match = filenameRegex.matchEntire(entry.fileName.toString())
}.toSortedSet() match?.let { Pair(it.groupValues[1].toID(), it.groupValues[2]) }
}.sortedBy { it.first }.toMap()
} }
} }

View File

@@ -6,7 +6,7 @@ import org.jeudego.pairgoth.model.Tournament
class MemoryStore: StoreImplementation { class MemoryStore: StoreImplementation {
private val tournaments = mutableMapOf<ID, Tournament<*>>() private val tournaments = mutableMapOf<ID, Tournament<*>>()
override fun getTournamentsIDs(): Set<ID> = tournaments.keys override fun getTournaments(): Map<ID, String> = tournaments.mapValues { it.value.shortName }
override fun addTournament(tournament: Tournament<*>) { override fun addTournament(tournament: Tournament<*>) {
if (tournaments.containsKey(tournament.id)) throw Error("tournament id #${tournament.id} already exists") if (tournaments.containsKey(tournament.id)) throw Error("tournament id #${tournament.id} already exists")

View File

@@ -14,7 +14,7 @@ interface StoreImplementation {
val nextPlayerId get() = _nextPlayerId.incrementAndGet() val nextPlayerId get() = _nextPlayerId.incrementAndGet()
val nextGameId get() = _nextGameId.incrementAndGet() val nextGameId get() = _nextGameId.incrementAndGet()
fun getTournamentsIDs(): Set<ID> fun getTournaments(): Map<ID, String>
fun addTournament(tournament: Tournament<*>) fun addTournament(tournament: Tournament<*>)
fun getTournament(id: ID): Tournament<*>? fun getTournament(id: ID): Tournament<*>?
fun replaceTournament(tournament: Tournament<*>) fun replaceTournament(tournament: Tournament<*>)