[F] Fix setting api

This commit is contained in:
Azalea
2024-03-18 18:56:16 -04:00
parent 073c72fd63
commit 9ba1a68b51
2 changed files with 13 additions and 13 deletions

View File

@@ -2,26 +2,25 @@ package icu.samnyan.aqua.net
import ext.* import ext.*
import icu.samnyan.aqua.net.db.AquaGameOptions import icu.samnyan.aqua.net.db.AquaGameOptions
import icu.samnyan.aqua.net.db.AquaGameOptionsRepo
import icu.samnyan.aqua.net.db.AquaNetUserRepo import icu.samnyan.aqua.net.db.AquaNetUserRepo
import icu.samnyan.aqua.net.db.AquaUserServices import icu.samnyan.aqua.net.db.AquaUserServices
import org.springframework.web.bind.annotation.RestController import org.springframework.web.bind.annotation.RestController
import kotlin.reflect.full.findAnnotation import kotlin.reflect.full.findAnnotation
import kotlin.reflect.full.primaryConstructor
@RestController @RestController
@API("/api/v2/settings") @API("/api/v2/settings")
class SettingsApi( class SettingsApi(
val us: AquaUserServices, val us: AquaUserServices,
val userRepo: AquaNetUserRepo val userRepo: AquaNetUserRepo,
val goRepo: AquaGameOptionsRepo
) { ) {
// Get all params with SettingField annotation // Get all params with SettingField annotation
// Kotlin by default put all the @Annotations in the constructor param val fields = AquaGameOptions::class.vars()
val params = AquaGameOptions::class.primaryConstructor!!.parameters
.mapNotNull { it.findAnnotation<SettingField>()?.let { an -> it to an } } .mapNotNull { it.findAnnotation<SettingField>()?.let { an -> it to an } }
val fields = AquaGameOptions::class.vars().associateBy { it.name } val fieldMap = fields.associate { (f, _) -> f.name to f }
val fieldMap = params.associate { (key, _) -> key.name to fields[key.name]!! } val fieldDesc = fields.map { (f, an) -> mapOf(
val fieldDesc = params.map { (key, an) -> mapOf( "key" to f.name,
"key" to key.name,
"name" to an.name, "name" to an.name,
"desc" to an.desc "desc" to an.desc
) } ) }
@@ -42,12 +41,13 @@ class SettingsApi(
} }
// Check field type // Check field type
val type = field.returnType val type = field.returnType
val newValue = when { val newValue = when (type.classifier) {
type == String::class -> value String::class -> value
type == Int::class -> value.toInt() Int::class -> value.toInt()
type == Boolean::class -> value.toBoolean() Boolean::class -> value.toBoolean()
else -> (400 - "Invalid field type $type") else -> (400 - "Invalid field type $type")
} }
field.set(options, newValue) field.set(options, newValue)
goRepo.save(options)
} }
} }

View File

@@ -32,4 +32,4 @@ class AquaGameOptions(
var unlockTickets: Boolean = false, var unlockTickets: Boolean = false,
) )
interface AquaGameOptionsRepository : JpaRepository<AquaGameOptions, Long> interface AquaGameOptionsRepo : JpaRepository<AquaGameOptions, Long>