[+] Add some get-only fields

pull/98/head
Azalea 2025-01-02 10:44:06 -05:00
parent a1b56f6e0b
commit d71af941b0
2 changed files with 4 additions and 1 deletions

View File

@ -24,6 +24,7 @@ abstract class GameApiController<T : IUserData>(val name: String, userDataClass:
abstract val playlogRepo: GenericPlaylogRepo<*>
abstract val shownRanks: List<Pair<Int, String>>
abstract val settableFields: Map<String, (T, String) -> Unit>
open val gettableFields: Set<String> = setOf()
@API("trend")
abstract suspend fun trend(@RP username: String): List<TrendOut>
@ -110,7 +111,8 @@ abstract class GameApiController<T : IUserData>(val name: String, userDataClass:
fun playlog(@RP id: Long): IGenericGamePlaylog = playlogRepo.findById(id).getOrNull() ?: (404 - "Playlog not found")
val userDetailFields by lazy { userDataClass.gettersMap().let { vm ->
settableFields.map { (k, _) -> k to (vm[k] ?: error("Field $k not found")) }.toMap()
(settableFields.keys.toSet() + gettableFields)
.associateWith { k -> (vm[k] ?: error("Field $k not found")) }
} }
@API("user-detail")

View File

@ -38,6 +38,7 @@ class Chusan(
"avatarFront" to { u, v -> u.avatarFront = v.int },
"avatarBack" to { u, v -> u.avatarBack = v.int },
) }
override val gettableFields: Set<String> = setOf("level", "playerRating")
override suspend fun userSummary(@RP username: Str, @RP token: String?) = us.cardByName(username) { card ->
// Summary values: total plays, player rating, server-wide ranking