Refactor SQL classes: update GameModeConfig functions, improve null safety in SchematicNode and SchematicType, and adjust NodeMemberTable structure.

Signed-off-by: Chaoscaot <max@maxsp.de>
This commit is contained in:
2025-11-05 17:04:01 +01:00
parent b2a4b05545
commit 9acfb32ae0
4 changed files with 22 additions and 15 deletions
@@ -35,11 +35,19 @@ import java.util.stream.Collectors;
public final class GameModeConfig<M, W> {
public static final Function<String, String> ToString = Function.identity();
public static final Function<File, String> ToStaticWarGear = __ -> "WarGear";
public static final Function<File, String> ToInternalName = file -> file != null ? file.getName().replace(".yml", "") : "WarGear";
public static final Function<File, String> ToStaticWarGear = GameModeConfig::constWarGear;
public static final Function<File, String> ToInternalName = GameModeConfig::internalName;
public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yyyy HH:mm");
private static final Random random = new Random();
private static String constWarGear(File f) {
return "WarGear";
}
private static String internalName(File f) {
return f.getName().replace(".yml", "");
}
private static final Map<String, GameModeConfig<?, String>> byFileName;
private static final Map<String, GameModeConfig<?, String>> byGameName;
private static final Map<SchematicType, GameModeConfig<?, String>> bySchematicType;
@@ -33,14 +33,14 @@ import kotlin.jvm.optionals.getOrNull
object NodeMemberTable : CompositeIdTable("NodeMember") {
val node = reference("NodeId", SchematicNodeTable)
val nodeOwner = reference("NodeOwner", SteamwarUserTable)
val parentNode = optReference("ParentNodeId", SchematicNodeTable)
val userId = reference("UserId", SteamwarUserTable)
val parentNode = optReference("ParentId", SchematicNodeTable)
override val primaryKey = PrimaryKey(node, nodeOwner)
override val primaryKey = PrimaryKey(node, userId)
init {
addIdColumn(node)
addIdColumn(nodeOwner)
addIdColumn(userId)
}
}
@@ -50,7 +50,7 @@ class NodeMember(id: EntityID<CompositeID>) : CompositeEntity(id) {
fun createNodeMember(node: Int, member: Int): NodeMember = useDb {
NodeMemberTable.insertIgnore {
it[this.node] = EntityID(node, SchematicNodeTable)
it[this.nodeOwner] = EntityID(member, SteamwarUserTable)
it[this.userId] = EntityID(member, SteamwarUserTable)
}
getNodeMember(node, member) ?: throw IllegalStateException("NodeMember not created")
}
@@ -60,7 +60,7 @@ class NodeMember(id: EntityID<CompositeID>) : CompositeEntity(id) {
@JvmStatic
fun getNodeMember(node: Int, member: Int) = useDb {
find { (NodeMemberTable.node eq node) and (NodeMemberTable.nodeOwner eq member) }.firstOrNull()
find { (NodeMemberTable.node eq node) and (NodeMemberTable.userId eq member) }.firstOrNull()
}
@JvmStatic
@@ -70,14 +70,14 @@ class NodeMember(id: EntityID<CompositeID>) : CompositeEntity(id) {
fun getNodeMembers(node: Int) = useDb { find { NodeMemberTable.node eq node }.toSet() }
@JvmStatic
fun getSchematics(member: Int) = useDb { find { NodeMemberTable.nodeOwner eq member }.toSet() }
fun getSchematics(member: Int) = useDb { find { NodeMemberTable.userId eq member }.toSet() }
@JvmStatic
fun init() = Unit
}
val node by NodeMemberTable.node.transform({ EntityID(it, SchematicNodeTable) }, { it.value })
val member by NodeMemberTable.nodeOwner.transform({ EntityID(it, SteamwarUserTable) }, { it.value })
val member by NodeMemberTable.userId.transform({ EntityID(it, SteamwarUserTable) }, { it.value })
var parent by NodeMemberTable.parentNode.transform(
{ it.map { EntityID(it, SchematicNodeTable) }.getOrNull() },
{ Optional.ofNullable(it?.value) })
@@ -206,7 +206,7 @@ class SchematicNode(id: EntityID<Int>) : IntEntity(id) {
@JvmStatic
fun getAllAccessibleSchematicsOfType(user: Int, type: String) =
accessibleByUserType(SteamwarUser.byId(user)!!, SchematicType.fromDB(type))
accessibleByUserType(SteamwarUser.byId(user)!!, SchematicType.fromDB(type)!!)
@JvmStatic
fun getAllSchematicsAccessibleByUser(user: Int) = getAll(SteamwarUser.byId(user)!!)
@@ -328,7 +328,7 @@ class SchematicNode(id: EntityID<Int>) : IntEntity(id) {
}
private var nodeType by SchematicNodeTable.type
var schemtype: SchematicType
get() = checkDir { SchematicType.fromDB(nodeType!!) }
get() = checkDir { SchematicType.fromDB(nodeType!!)!! }
set(value) = checkDir { useDb { nodeType = value.toDB() } }
var config by SchematicNodeTable.config
@@ -46,7 +46,7 @@ data class SchematicType(
val Normal = SchematicType("Normal", "", Type.NORMAL, null, "STONE_BUTTON", false)
private val types: List<SchematicType>
private val fromDB: Map<String, SchematicType>
private val fromDB: Map<String, SchematicType>?
init {
val tmpTypes = mutableListOf<SchematicType>()
@@ -85,8 +85,7 @@ data class SchematicType(
fun values() = types
@JvmStatic
fun fromDB(value: String) =
fromDB[value.lowercase()] ?: throw IllegalArgumentException("Unknown SchematicType: $value")
fun fromDB(value: String) = fromDB?.let { it[value] }
}
fun name() = name