diff --git a/CommonCore/SQL/src/de/steamwar/sql/EventFight.java b/CommonCore/SQL/src/de/steamwar/sql/EventFight.java
deleted file mode 100644
index a1472918..00000000
--- a/CommonCore/SQL/src/de/steamwar/sql/EventFight.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * This file is a part of the SteamWar software.
- *
- * Copyright (C) 2025 SteamWar.de-Serverteam
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package de.steamwar.sql;
-
-import de.steamwar.sql.internal.Field;
-import de.steamwar.sql.internal.SelectStatement;
-import de.steamwar.sql.internal.Statement;
-import de.steamwar.sql.internal.Table;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.Setter;
-
-import java.sql.Timestamp;
-import java.util.*;
-
-import static java.time.temporal.ChronoUnit.SECONDS;
-
-@AllArgsConstructor
-public class EventFight implements Comparable {
-
- private static final Table table = new Table<>(EventFight.class);
- private static final SelectStatement byId = table.select(Table.PRIMARY);
- private static final SelectStatement byGroup = new SelectStatement(table, "SELECT * FROM EventFight WHERE GroupID = ? ORDER BY StartTime ASC");
- private static final SelectStatement byGroupLast = new SelectStatement(table, "SELECT * FROM EventFight WHERE GroupID = ? ORDER BY StartTime DESC LIMIT 1");
- private static final SelectStatement allComing = new SelectStatement<>(table, "SELECT * FROM EventFight WHERE StartTime > now() ORDER BY StartTime ASC");
- private static final SelectStatement event = new SelectStatement<>(table, "SELECT * FROM EventFight WHERE EventID = ? ORDER BY StartTime ASC");
- private static final SelectStatement activeFights = new SelectStatement<>(table, "SELECT * FROM EventFight WHERE EventID IN (SELECT EventID FROM Event WHERE Start < now() and End > now()) AND Fight IS NULL AND StartTime < now()");
- private static final Statement reschedule = table.update(Table.PRIMARY, "StartTime");
- private static final Statement setResult = table.update(Table.PRIMARY, "Ergebnis");
- private static final Statement setFight = table.update(Table.PRIMARY, "Fight");
-
- private static final Statement create = table.insertFields(true, "eventID", "startTime", "spielmodus", "map", "teamBlue", "teamRed", "spectatePort");
- private static final Statement update = table.update(Table.PRIMARY, "startTime", "spielModus", "map", "teamBlue", "teamRed", "spectatePort");
- private static final Statement setGroup = table.update(Table.PRIMARY, "GroupID");
- private static final Statement delete = table.delete(Table.PRIMARY);
-
- @Getter
- private static final Queue fights = new PriorityQueue<>();
-
- public static EventFight get(int fightID) {
- return byId.select(fightID);
- }
-
- public static List get(EventGroup group) {
- return byGroup.listSelect(group.getId());
- }
-
- public static Optional getLast(EventGroup group) {
- return Optional.ofNullable(byGroupLast.select(group.getId()));
- }
-
- public static void loadAllComingFights() {
- fights.clear();
- fights.addAll(allComing.listSelect());
- }
-
- public static List getEvent(int eventID) {
- return event.listSelect(eventID);
- }
-
- private static List activeFightsCache = null;
-
- public static void clearActiveFightsCache() {
- activeFightsCache = null;
- }
-
- public static List getActiveFights() {
- if (activeFightsCache == null) {
- activeFightsCache = activeFights.listSelect();
- }
- return activeFightsCache;
- }
-
- public static EventFight create(int event, Timestamp from, String spielmodus, String map, int blueTeam, int redTeam, Integer spectatePort) {
- return get(create.insertGetKey(event, from, spielmodus, map, blueTeam, redTeam, spectatePort));
- }
-
- @Getter
- @Field
- private final int eventID;
- @Getter
- @Field(keys = {Table.PRIMARY}, autoincrement = true)
- private final int fightID;
- @Getter
- @Setter
- @Field(nullable = true, def = "null")
- private Integer groupId;
- @Getter
- @Setter
- @Field
- private Timestamp startTime;
- @Getter
- @Setter
- @Field
- private String spielmodus;
- @Getter
- @Setter
- @Field
- private String map;
- @Getter
- @Setter
- @Field
- private int teamBlue;
- @Getter
- @Setter
- @Field
- private int teamRed;
- @Getter
- @Setter
- @Field(nullable = true)
- private Integer spectatePort;
- @Getter
- @Setter
- @Field(def = "1")
- private int bestOf;
- @Getter
- @Field(def = "0")
- private int ergebnis;
- @Field(nullable = true)
- private int fight;
-
- public Optional getGroup() {
- return Optional.ofNullable(groupId).flatMap(EventGroup::get);
- }
-
- public Optional getWinner() {
- if(ergebnis == 0)
- return Optional.empty();
- return Optional.ofNullable(ergebnis == 1 ? Team.get(teamBlue) : Team.get(teamRed));
- }
-
- public Optional getLosser() {
- if(ergebnis == 0)
- return Optional.empty();
- return Optional.ofNullable(ergebnis == 1 ? Team.get(teamRed) : Team.get(teamBlue));
- }
-
- public List getDependents() {
- return EventRelation.getFightRelations(this);
- }
-
- public void setErgebnis(int winner) {
- this.ergebnis = winner;
- setResult.update(winner, fightID);
- }
-
- public void setFight(int fight) {
- //Fight.FightID, not EventFight.FightID
- this.fight = fight;
- setFight.update(fight, fightID);
- }
-
- public void setGroup(Integer group) {
- setGroup.update(group, fightID);
- this.groupId = group;
- }
-
- public boolean hasFinished() {
- return fight != 0 || ergebnis != 0;
- }
-
- public void reschedule() {
- startTime = Timestamp.from(new Date().toInstant().plus(30, SECONDS));
- reschedule.update(startTime, fightID);
- }
-
- @Override
- public int hashCode(){
- return fightID;
- }
-
- @Override
- public boolean equals(Object o){
- if(o == null)
- return false;
- if(!(o instanceof EventFight))
- return false;
- return fightID == ((EventFight) o).fightID;
- }
-
- @Override
- public int compareTo(EventFight o) {
- return startTime.compareTo(o.startTime);
- }
-
- public void update(Timestamp startTime, String spielmodus, String map, int teamBlue, int teamRed, Integer spectatePort) {
- update.update(startTime, spielmodus, map, teamBlue, teamRed, spectatePort, fightID);
- this.startTime = startTime;
- this.spielmodus = spielmodus;
- this.map = map;
- this.teamBlue = teamBlue;
- this.teamRed = teamRed;
- this.spectatePort = spectatePort;
- }
-
- public void delete() {
- delete.update(fightID);
- }
-}
diff --git a/CommonCore/SQL/src/de/steamwar/sql/EventFight.kt b/CommonCore/SQL/src/de/steamwar/sql/EventFight.kt
new file mode 100644
index 00000000..9449781c
--- /dev/null
+++ b/CommonCore/SQL/src/de/steamwar/sql/EventFight.kt
@@ -0,0 +1,194 @@
+/*
+ * This file is a part of the SteamWar software.
+ *
+ * Copyright (C) 2025 SteamWar.de-Serverteam
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package de.steamwar.sql
+
+import de.steamwar.sql.internal.useDb
+import org.jetbrains.exposed.v1.core.SortOrder
+import org.jetbrains.exposed.v1.core.and
+import org.jetbrains.exposed.v1.core.dao.id.EntityID
+import org.jetbrains.exposed.v1.core.dao.id.IntIdTable
+import org.jetbrains.exposed.v1.core.eq
+import org.jetbrains.exposed.v1.core.greater
+import org.jetbrains.exposed.v1.core.greaterEq
+import org.jetbrains.exposed.v1.core.inList
+import org.jetbrains.exposed.v1.core.inSubQuery
+import org.jetbrains.exposed.v1.core.isNull
+import org.jetbrains.exposed.v1.core.less
+import org.jetbrains.exposed.v1.dao.IntEntity
+import org.jetbrains.exposed.v1.dao.IntEntityClass
+import org.jetbrains.exposed.v1.javatime.timestamp
+import org.jetbrains.exposed.v1.jdbc.insertAndGetId
+import org.jetbrains.exposed.v1.jdbc.select
+import java.sql.Timestamp
+import java.time.Instant
+import java.util.Optional
+import java.util.PriorityQueue
+import java.util.Queue
+
+object EventFightTable : IntIdTable("EventFight", "FightID") {
+ val eventId = reference("EventID", EventTable)
+ val startTime = timestamp("StartTime")
+ val gamemode = text("Spielmodus")
+ val map = text("Map")
+ val groupId = optReference("GroupId", EventGroupTable)
+ val teamBlue = reference("TeamBlue", TeamTable)
+ val teamRed = reference("TeamRed", TeamTable)
+ val spectatePort = integer("SpectatePort").nullable()
+ val bestOf = integer("BestOf")
+ val ergebnis = integer("Ergebnis")
+ val fight = integer("Fight").entityId().nullable()
+}
+
+class EventFight(id: EntityID) : IntEntity(id), Comparable {
+ companion object : IntEntityClass(EventFightTable) {
+ val fights: Queue = PriorityQueue()
+ @JvmStatic get
+
+ @JvmStatic
+ fun byId(fightId: Int) = useDb { findById(fightId) }
+
+ @JvmStatic
+ fun byId(group: EventGroup) = useDb {
+ find { EventFightTable.groupId eq group.id }.orderBy(EventFightTable.startTime to SortOrder.DESC).toList()
+ }
+
+ @JvmStatic
+ fun getLast(group: EventGroup) = useDb {
+ Optional.ofNullable(
+ find { EventFightTable.groupId eq group.id }.orderBy(EventFightTable.startTime to SortOrder.DESC)
+ .firstOrNull()
+ )
+ }
+
+ @JvmStatic
+ fun loadAllComingFights() = useDb {
+ fights.clear()
+ fights.addAll(find { EventFightTable.startTime greaterEq Instant.now() }.orderBy(EventFightTable.startTime to SortOrder.ASC))
+ }
+
+ @JvmStatic
+ fun getEvent(eventId: Int) = useDb {
+ find { EventFightTable.eventId eq eventId }.orderBy(EventFightTable.startTime to SortOrder.ASC).toList()
+ }
+
+ private var activeFightsCache: List? = null
+
+ @JvmStatic
+ fun clearActiveFightsCache() {
+ activeFightsCache = null
+ }
+
+ @JvmStatic
+ fun getActiveFights(): List {
+ if (activeFightsCache == null) {
+ activeFightsCache = useDb {
+ find {
+ EventFightTable.fight.isNull() and (EventFightTable.startTime less Instant.now()) and (EventFightTable.eventId.inSubQuery(
+ EventTable.select(
+ EventTable.id
+ )
+ .where { (EventTable.start less Instant.now()) and (EventTable.end greater Instant.now()) }))
+ }.orderBy(EventFightTable.startTime to SortOrder.ASC).toList()
+ }
+ }
+
+ return activeFightsCache!!
+ }
+
+ @JvmStatic
+ fun create(
+ event: Int,
+ from: Timestamp,
+ spielmodus: String,
+ map: String,
+ blueTeam: Int,
+ redTeam: Int,
+ spectatePort: Int?
+ ) = useDb {
+ get(
+ EventFightTable.insertAndGetId {
+ it[eventId] = EntityID(event, EventTable)
+ it[startTime] = from.toInstant()
+ it[gamemode] = spielmodus
+ it[EventFightTable.map] = map
+ it[teamBlue] = EntityID(blueTeam, TeamTable)
+ it[teamRed] = EntityID(redTeam, TeamTable)
+ it[EventFightTable.spectatePort] = spectatePort
+ }
+ )
+ }
+ }
+
+ val fightID by EventFightTable.id.transform({ EntityID(it, EventFightTable) }, { it.value })
+ var teamBlue by EventFightTable.teamBlue.transform({ EntityID(it, TeamTable) }, { it.value })
+ var teamRed by EventFightTable.teamRed.transform({ EntityID(it, TeamTable) }, { it.value })
+ private var fightErgebnis by EventFightTable.ergebnis
+ var ergebnis: Int
+ get() = fightErgebnis
+ set(value) = useDb {
+ fightErgebnis = value
+ }
+ var eventID by EventFightTable.eventId.transform({ EntityID(it, EventTable) }, { it.value })
+ var startTime by EventFightTable.startTime.transform({ it.toInstant() }, { Timestamp.from(it) })
+ var spielmodus by EventFightTable.gamemode
+ var map by EventFightTable.map
+ var groupId by EventFightTable.groupId
+ val group by lazy { Optional.ofNullable(groupId).map { EventGroup[it] } }
+ var spectatePort by EventFightTable.spectatePort
+ private var fightStat by EventFightTable.fight.transform({ it?.let { EntityID(it, EventFightTable) } }, { it?.value })
+ var fight: Int?
+ get() = fightStat
+ set(value) = useDb {
+ fightStat = value
+ }
+ val dependents by lazy { useDb { EventRelation.getFightRelations(this@EventFight) } }
+
+ val winner: Team?
+ get() = if (ergebnis == 1) Team[teamBlue] else if (ergebnis == 2) Team[teamRed] else null
+ val losser: Team?
+ get() = if (ergebnis == 1) Team[teamRed] else if (ergebnis == 2) Team[teamBlue] else null
+
+ fun setGroup(group: Int?) = useDb { groupId = group?.let { EntityID(it, EventGroupTable) } }
+ fun hasFinished() = fight != null || ergebnis != 0
+
+ fun reschedule() = useDb {
+ startTime = Timestamp.from(Instant.now().plusSeconds(30))
+ }
+
+ override fun hashCode() = fightID
+ override fun equals(other: Any?) = other is EventFight && other.fightID == fightID
+ override fun compareTo(other: EventFight): Int = startTime.compareTo(other.startTime)
+
+ fun update(
+ startTime: Timestamp,
+ spielmodus: String,
+ map: String,
+ teamBlue: Int,
+ teamRed: Int,
+ spectatePort: Int?
+ ) = useDb {
+ this@EventFight.startTime = startTime
+ this@EventFight.spielmodus = spielmodus
+ this@EventFight.map = map
+ this@EventFight.teamBlue = teamBlue
+ this@EventFight.teamRed = teamRed
+ this@EventFight.spectatePort = spectatePort
+ }
+}
\ No newline at end of file
diff --git a/CommonCore/SQL/src/de/steamwar/sql/EventGroup.java b/CommonCore/SQL/src/de/steamwar/sql/EventGroup.java
deleted file mode 100644
index 68934765..00000000
--- a/CommonCore/SQL/src/de/steamwar/sql/EventGroup.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * This file is a part of the SteamWar software.
- *
- * Copyright (C) 2025 SteamWar.de-Serverteam
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package de.steamwar.sql;
-
-import de.steamwar.sql.internal.*;
-import lombok.Getter;
-import lombok.Setter;
-
-import java.util.*;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-@Getter
-@Setter
-public class EventGroup {
- static {
- SqlTypeMapper.ordinalEnumMapper(EventGroupType.class);
- }
-
- private static final Table table = new Table<>(EventGroup.class);
-
- private static final SelectStatement get = table.select(Table.PRIMARY);
- private static final SelectStatement byEvent = new SelectStatement<>(table, "SELECT * FROM EventGroup WHERE EventID = ?");
-
- private static final Statement insert = table.insertFields(true, "EventID", "Name", "Type");
- private static final Statement update = table.update(Table.PRIMARY, "Name", "Type", "PointsPerWin", "PointsPerLoss", "PointsPerDraw");
- private static final Statement delete = table.delete(Table.PRIMARY);
-
- public static List get(Event eventID) {
- return byEvent.listSelect(eventID.getEventID());
- }
-
- public static EventGroup create(Event event, String name, EventGroupType type) {
- int key = insert.insertGetKey(event.getEventID(), name, type);
- return EventGroup.get(key).get();
- }
-
- public static Optional get(int id) {
- return Optional.ofNullable(get.select(id));
- }
-
- @Field(keys = Table.PRIMARY)
- private final int id;
-
- @Field(keys = "EVENT_NAME")
- private int eventID;
-
- @Field(keys = "EVENT_NAME")
- private String name;
-
- @Field
- private EventGroupType type;
-
- @Field
- private int pointsPerWin;
-
- @Field
- private int pointsPerLoss;
-
- @Field
- private int pointsPerDraw;
-
- public EventGroup(int id, int eventID, String name, EventGroupType type, int pointsPerWin, int pointsPerLoss, int pointsPerDraw) {
- this.id = id;
- this.eventID = eventID;
- this.name = name;
- this.type = type;
- this.pointsPerWin = pointsPerWin;
- this.pointsPerLoss = pointsPerLoss;
- this.pointsPerDraw = pointsPerDraw;
- }
-
- private Map points;
-
- public List getFights() {
- return EventFight.get(this);
- }
-
- public Set getTeamsId() {
- return getFights().stream().flatMap(fight -> Stream.of(fight.getTeamBlue(), fight.getTeamRed()))
- .collect(Collectors.toSet());
- }
-
- public Set getTeams() {
- return getTeamsId().stream().map(Team::get).collect(Collectors.toSet());
- }
-
- public Optional getLastFight() {
- return EventFight.getLast(this);
- }
-
- public List getDependents() {
- return EventRelation.getGroupRelations(this);
- }
-
- public Map calculatePoints() {
- if (points == null) {
- Map p = getTeamsId().stream().collect(Collectors.toMap(team -> team, team -> 0));
-
- for (EventFight fight : getFights()) {
- int blueTeamAdd = 0;
- int redTeamAdd = 0;
-
- if (!fight.hasFinished()) {
- continue;
- }
-
- switch (fight.getErgebnis()) {
- case 1:
- blueTeamAdd += pointsPerWin;
- redTeamAdd += pointsPerLoss;
- break;
- case 2:
- blueTeamAdd += pointsPerLoss;
- redTeamAdd += pointsPerWin;
- break;
- case 0:
- if (fight.getFightID() != 0) {
- blueTeamAdd += pointsPerDraw;
- redTeamAdd += pointsPerDraw;
- }
- break;
- }
-
- p.put(fight.getTeamBlue(), p.get(fight.getTeamBlue()) + blueTeamAdd);
- p.put(fight.getTeamRed(), p.get(fight.getTeamRed()) + redTeamAdd);
- }
-
- points = p.entrySet().stream().collect(Collectors.toMap(integerIntegerEntry -> Team.get(integerIntegerEntry.getKey()), Map.Entry::getValue));
- }
-
- return points;
- }
-
- public void update(String name, EventGroupType type, int pointsPerWin, int pointsPerLoss, int pointsPerDraw) {
- update.update(name, type, pointsPerWin, pointsPerLoss, pointsPerDraw, id);
- this.name = name;
- this.type = type;
- this.pointsPerWin = pointsPerWin;
- this.pointsPerLoss = pointsPerLoss;
- this.pointsPerDraw = pointsPerDraw;
- }
-
- public boolean needsTieBreak() {
- return calculatePoints().values().stream().sorted().limit(2).distinct().count() < 2;
- }
-
- public void delete() {
- delete.update(id);
- }
-
- public static enum EventGroupType {
- GROUP_STAGE,
- ELIMINATION_STAGE
- }
-}
diff --git a/CommonCore/SQL/src/de/steamwar/sql/EventGroup.kt b/CommonCore/SQL/src/de/steamwar/sql/EventGroup.kt
new file mode 100644
index 00000000..a8a87094
--- /dev/null
+++ b/CommonCore/SQL/src/de/steamwar/sql/EventGroup.kt
@@ -0,0 +1,151 @@
+/*
+ * This file is a part of the SteamWar software.
+ *
+ * Copyright (C) 2025 SteamWar.de-Serverteam
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package de.steamwar.sql
+
+import de.steamwar.sql.internal.useDb
+import org.jetbrains.exposed.v1.core.dao.id.EntityID
+import org.jetbrains.exposed.v1.core.dao.id.IntIdTable
+import org.jetbrains.exposed.v1.core.eq
+import org.jetbrains.exposed.v1.dao.IntEntity
+import org.jetbrains.exposed.v1.dao.IntEntityClass
+import java.util.Optional
+
+object EventGroupTable : IntIdTable("EventGroup", "Id") {
+ val event = reference("EventID", EventTable)
+ val name = varchar("Name", 64)
+ val type = enumeration("Type", EventGroup.EventGroupType::class)
+ val pointsPerWin = integer("PointsPerWin")
+ val pointsPerLoss = integer("PointsPerLoss")
+ val pointsPerDraw = integer("PointsPerDraw")
+}
+
+class EventGroup(id: EntityID) : IntEntity(id) {
+ companion object : IntEntityClass(EventGroupTable) {
+
+ @JvmStatic
+ fun get(event: Event) = useDb { find { EventGroupTable.event eq event.id }.toList() }
+
+ @JvmStatic
+ fun byId(groupId: Int) = useDb { Optional.ofNullable(findById(groupId)) }
+
+ @JvmStatic
+ fun create(event: Event, name: String, type: EventGroupType) = useDb {
+ new {
+ this.eventID = event.id.value
+ this.groupName = name
+ this.groupType = type
+ }
+ }
+ }
+
+ var eventID by EventGroupTable.event.transform({ EntityID(it, EventTable) }, { it.value })
+ private set
+ private var groupName by EventGroupTable.name
+ private var groupType by EventGroupTable.type
+ private var groupPointsPerWin by EventGroupTable.pointsPerWin
+ private var groupPointsPerLoss by EventGroupTable.pointsPerLoss
+ private var groupPointsPerDraw by EventGroupTable.pointsPerDraw
+ val fights by lazy { useDb { EventFight.find { EventFightTable.groupId eq id }.toList() } }
+ val teamsId by lazy { fights.flatMap { listOf(it.teamBlue, it.teamRed) }.toSet() }
+
+ var name: String
+ get() = groupName
+ set(value) {
+ groupName = value
+ }
+ var type: EventGroupType
+ get() = groupType
+ set(value) {
+ groupType = value
+ }
+ var pointsPerWin: Int
+ get() = groupPointsPerWin
+ set(value) {
+ groupPointsPerWin = value
+ }
+ var pointsPerLoss: Int
+ get() = groupPointsPerLoss
+ set(value) {
+ groupPointsPerLoss = value
+ }
+ var pointsPerDraw: Int
+ get() = groupPointsPerDraw
+ set(value) {
+ groupPointsPerDraw = value
+ }
+ val dependents by lazy { EventRelation.getGroupRelations(this) }
+ val lastFight by lazy { Optional.ofNullable(fights.maxByOrNull { it.startTime }) }
+
+ fun getId() = id.value
+
+ private var points: Map? = null
+
+ fun calculatePoints(): Map {
+ if (points == null) {
+ val p: MutableMap = teamsId.associateWith { 0 }.toMutableMap()
+
+ for (fight in fights) {
+ var blueTeamAdd = 0
+ var redTeamAdd = 0
+
+ if (!fight.hasFinished()) {
+ continue
+ }
+
+ when (fight.ergebnis) {
+ 1 -> {
+ blueTeamAdd += pointsPerWin
+ redTeamAdd += pointsPerLoss
+ }
+ 2 -> {
+ blueTeamAdd += pointsPerLoss
+ redTeamAdd += pointsPerWin
+ }
+ 0 -> if (fight.fight != null) {
+ blueTeamAdd += pointsPerDraw
+ redTeamAdd += pointsPerDraw
+ }
+ }
+
+ p[fight.teamBlue] = p[fight.teamBlue]?.plus(blueTeamAdd) ?: blueTeamAdd
+ p[fight.teamRed] = p[fight.teamRed]?.plus(redTeamAdd) ?: redTeamAdd
+ }
+
+ return p.mapKeys { Team.byId(it.key) }.also { points = it }
+ } else {
+ return points!!
+ }
+ }
+
+ fun needsTieBreak() = calculatePoints().values.let { it.size == it.toSet().size }
+
+ fun update(name: String, type: EventGroupType, pointsPerWin: Int, pointsPerLoss: Int, pointsPerDraw: Int) = useDb {
+ this@EventGroup.name = name
+ this@EventGroup.type = type
+ this@EventGroup.pointsPerWin = pointsPerWin
+ this@EventGroup.pointsPerLoss = pointsPerLoss
+ this@EventGroup.pointsPerDraw = pointsPerDraw
+ }
+
+ enum class EventGroupType {
+ GROUP_STAGE,
+ ELIMINATION_STAGE
+ }
+}
\ No newline at end of file
diff --git a/CommonCore/SQL/src/de/steamwar/sql/EventRelation.java b/CommonCore/SQL/src/de/steamwar/sql/EventRelation.java
deleted file mode 100644
index 539908de..00000000
--- a/CommonCore/SQL/src/de/steamwar/sql/EventRelation.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * This file is a part of the SteamWar software.
- *
- * Copyright (C) 2025 SteamWar.de-Serverteam
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package de.steamwar.sql;
-
-import de.steamwar.sql.internal.*;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.Setter;
-
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-
-@AllArgsConstructor
-@Getter
-@Setter
-public class EventRelation {
-
- static {
- SqlTypeMapper.ordinalEnumMapper(FightTeam.class);
- SqlTypeMapper.ordinalEnumMapper(FromType.class);
- }
-
- private static final Table table = new Table<>(EventRelation.class);
-
- private static final SelectStatement get = new SelectStatement<>(table, "SELECT * FROM EventRelation WHERE FromType = ? AND FromId = ?");
- private static final SelectStatement byId = new SelectStatement<>(table, "SELECT * FROM EventRelation WHERE id = ?");
- private static final SelectStatement byEvent = new SelectStatement<>(table, "SELECT ER.* FROM EventRelation ER JOIN EventFight EF ON EF.fightId = ER.fightId WHERE EF.EventID = ?");
- private static final Statement insert = table.insertFields(true, "fightId", "fightTeam", "fromType", "fromId", "fromPlace");
- private static final Statement update = table.update(Table.PRIMARY, "fromType", "fromId", "fromPlace");
- private static final Statement updateTeam = table.update(Table.PRIMARY, "fightTeam");
- private static final Statement delete = table.delete(Table.PRIMARY);
-
- public static List get(Event event) {
- return byEvent.listSelect(event.getEventID());
- }
-
- public static EventRelation get(int id) {
- return byId.select(id);
- }
-
- public static List getFightRelations(EventFight fight) {
- return get.listSelect(FromType.FIGHT, fight.getFightID());
- }
-
- public static List getGroupRelations(EventGroup group) {
- return get.listSelect(FromType.GROUP, group.getId());
- }
-
- public static EventRelation create(EventFight fight, FightTeam fightTeam, FromType fromType, int fromId, int fromPlace) {
- int id = insert.insertGetKey(fight.getFightID(), fightTeam, fromType, fromId, fromPlace);
- return get(id);
- }
-
- @Field(keys = Table.PRIMARY)
- private final int id;
-
- @Field
- private int fightId;
-
- @Field
- private FightTeam fightTeam;
-
- @Field
- private FromType fromType;
-
- @Field
- private int fromId;
-
- @Field
- private int fromPlace;
-
- public EventFight getFight() {
- return EventFight.get(fightId);
- }
-
- public Optional getFromFight() {
- if(fromType == FromType.FIGHT) {
- return Optional.of(EventFight.get(fromId));
- } else {
- return Optional.empty();
- }
- }
-
- public Optional getFromGroup() {
- if(fromType == FromType.GROUP) {
- return EventGroup.get(fromId);
- } else {
- return Optional.empty();
- }
- }
-
- public void delete() {
- delete.update(id);
- }
-
- public void setUpdateTeam(FightTeam team) {
- updateTeam.update(id, team);
- this.fightTeam = team;
- }
-
- public void setFromFight(EventFight fight, int place) {
- setFrom(fight.getFightID(), place, FromType.FIGHT);
- }
-
- public void setFromGroup(EventGroup group, int place) {
- setFrom(group.getId(), place, FromType.GROUP);
- }
-
- private void setFrom(int fightId, int place, FromType type) {
- update.update(type, fightId, place, id);
- this.fromType = type;
- this.fromId = fightId;
- this.fromPlace = place;
- }
-
- public Optional getAdvancingTeam() {
- if (fromType == FromType.FIGHT) {
- if (fromPlace == 0) {
- return getFromFight().flatMap(EventFight::getWinner);
- } else {
- return getFromFight().flatMap(EventFight::getLosser);
- }
- } else if (fromType == FromType.GROUP) {
- return getFromGroup().map(EventGroup::calculatePoints)
- .flatMap(points -> points.entrySet().stream()
- .sorted(Map.Entry.comparingByValue().reversed())
- .skip(fromPlace)
- .findFirst()
- .map(Map.Entry::getKey));
- } else {
- return Optional.empty();
- }
- }
-
- public boolean apply() {
- Optional team = getAdvancingTeam().map(Team::getTeamId);
- if(!team.isPresent())
- return false;
-
- EventFight fight = getFight();
- if(fightTeam == FightTeam.RED) {
- fight.update(
- fight.getStartTime(),
- fight.getSpielmodus(),
- fight.getMap(),
- fight.getTeamBlue(),
- team.get(),
- fight.getSpectatePort()
- );
- } else {
- fight.update(
- fight.getStartTime(),
- fight.getSpielmodus(),
- fight.getMap(),
- team.get(),
- fight.getTeamRed(),
- fight.getSpectatePort()
- );
- }
-
- return true;
- }
-
- public static enum FightTeam {
- BLUE,
- RED
- }
-
- public static enum FromType {
- FIGHT,
- GROUP
- }
-}
diff --git a/CommonCore/SQL/src/de/steamwar/sql/EventRelation.kt b/CommonCore/SQL/src/de/steamwar/sql/EventRelation.kt
new file mode 100644
index 00000000..e02119ed
--- /dev/null
+++ b/CommonCore/SQL/src/de/steamwar/sql/EventRelation.kt
@@ -0,0 +1,146 @@
+/*
+ * This file is a part of the SteamWar software.
+ *
+ * Copyright (C) 2025 SteamWar.de-Serverteam
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package de.steamwar.sql
+
+import de.steamwar.sql.internal.useDb
+import org.jetbrains.exposed.v1.core.and
+import org.jetbrains.exposed.v1.core.dao.id.EntityID
+import org.jetbrains.exposed.v1.core.dao.id.IntIdTable
+import org.jetbrains.exposed.v1.core.eq
+import org.jetbrains.exposed.v1.dao.IntEntity
+import org.jetbrains.exposed.v1.dao.IntEntityClass
+import org.jetbrains.exposed.v1.jdbc.select
+import java.util.Optional
+
+object EventRelationTable : IntIdTable("EventRelation") {
+ val fightId = reference("FightId", EventFightTable)
+ val fightTeam = enumeration("FightTeam", EventRelation.FightTeam::class)
+ val fromType = enumeration("FromType", EventRelation.FromType::class)
+ val fromId = integer("FromId")
+ val fromPlace = integer("FromPlace")
+}
+
+class EventRelation(id: EntityID) : IntEntity(id) {
+ companion object : IntEntityClass(EventRelationTable) {
+ @JvmStatic
+ fun get(event: Event) = useDb {
+ EventRelationTable.innerJoin(EventFightTable)
+ .select(EventRelationTable.columns)
+ .where { EventFightTable.eventId eq event.id }
+ .map { wrapRow(it) }
+ }
+
+ @JvmStatic
+ fun byId(id: Int) = useDb { findById(id) }
+
+ @JvmStatic
+ fun getFightRelations(fight: EventFight) =
+ useDb { find { (EventRelationTable.fromId eq fight.id.value) and (EventRelationTable.fromType eq FromType.FIGHT) } }
+
+ @JvmStatic
+ fun getGroupRelations(group: EventGroup) =
+ useDb { find { (EventRelationTable.fromId eq group.id.value) and (EventRelationTable.fromType eq FromType.GROUP) } }
+
+ @JvmStatic
+ fun create(fight: EventFight, fightTeam: FightTeam, fromType: FromType, fromId: Int, fromPlace: Int) = useDb {
+ new {
+ this.fightEntityId = fight.id
+ this.fightTeam = fightTeam
+ this.fromType = fromType
+ this.fromId = fromId
+ this.fromPlace = fromPlace
+ }
+ }
+ }
+
+ var fightEntityId by EventRelationTable.fightId
+ var fightId: Int
+ get() = fightEntityId.value
+ set(value) = useDb { fightEntityId = EntityID(value, EventFightTable) }
+ val fight by lazy { useDb { EventFight[fightEntityId] } }
+ var fightTeam by EventRelationTable.fightTeam
+ private set
+ var fromType by EventRelationTable.fromType
+ private set
+ var fromId by EventRelationTable.fromId
+ private set
+
+ var fromFightId: Int?
+ get() = if (fromType == FromType.FIGHT) fromId else null
+ set(value) = useDb {
+ fromType = FromType.FIGHT
+ fromId = value!!
+ }
+ val fromFight: EventFight?
+ get() = fromFightId?.let { EventFight[it] }
+ var fromGroupId: Int?
+ get() = if (fromType == FromType.GROUP) fromId else null
+ set(value) = useDb {
+ fromType = FromType.GROUP
+ fromId = value!!
+ }
+ val fromGroup: EventGroup?
+ get() = fromGroupId?.let { EventGroup[it] }
+ var fromPlace by EventRelationTable.fromPlace
+ private set
+
+ fun getId() = id.value
+ fun setUpdateTeam(team: FightTeam) = useDb {
+ fightTeam = team
+ }
+
+ fun setFromFight(fight: EventFight, place: Int) = useDb {
+ fromType = FromType.FIGHT
+ fromId = fight.id.value
+ fromPlace = place
+ }
+
+ fun setFromGroup(group: EventGroup, place: Int) = useDb {
+ fromType = FromType.GROUP
+ fromId = group.id.value
+ fromPlace = place
+ }
+
+ fun getAdvancingTeam(): Team? = when(fromType) {
+ FromType.FIGHT -> if (fromPlace == 0) fromFight?.winner else fromFight?.losser
+ FromType.GROUP -> fromGroup?.calculatePoints()?.toList()?.sortedBy { (_, v) -> v }?.reversed()?.elementAt(fromPlace)?.first
+ }
+
+ fun apply(): Boolean {
+ val team = getAdvancingTeam() ?: return false
+
+ useDb {
+ when(fightTeam) {
+ FightTeam.BLUE -> fight.teamBlue = team.teamId
+ FightTeam.RED -> fight.teamRed = team.teamId
+ }
+ }
+
+ return true
+ }
+
+ enum class FightTeam {
+ BLUE, RED
+ }
+
+ enum class FromType {
+ FIGHT, GROUP
+ }
+}
\ No newline at end of file
diff --git a/CommonCore/SQL/src/de/steamwar/sql/Team.java b/CommonCore/SQL/src/de/steamwar/sql/Team.java
deleted file mode 100644
index 71921de6..00000000
--- a/CommonCore/SQL/src/de/steamwar/sql/Team.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * This file is a part of the SteamWar software.
- *
- * Copyright (C) 2025 SteamWar.de-Serverteam
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package de.steamwar.sql;
-
-import de.steamwar.sql.internal.Field;
-import de.steamwar.sql.internal.SelectStatement;
-import de.steamwar.sql.internal.Statement;
-import de.steamwar.sql.internal.Table;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-@AllArgsConstructor
-public class Team {
-
- private static final Map teamCache = new HashMap<>();
-
- public static void clear() {
- teamCache.clear();
- }
-
- private static final Table table = new Table<>(Team.class);
- private static final SelectStatement byId = table.select(Table.PRIMARY);
- private static final SelectStatement byName = new SelectStatement<>(table, "SELECT * FROM Team WHERE (lower(TeamName) = ? OR lower(TeamKuerzel) = ?) AND NOT TeamDeleted");
- private static final SelectStatement all = table.selectFields("TeamDeleted");
- private static final Statement insert = table.insertFields("TeamKuerzel", "TeamName");
- private static final Statement update = table.update(Table.PRIMARY, "TeamKuerzel", "TeamName", "TeamColor", "Address", "Port");
- private static final Statement delete = table.update(Table.PRIMARY, "TeamDeleted");
- private static final Statement getSize = new Statement("SELECT COUNT(id) FROM UserData WHERE Team = ?");
-
- @Field(keys = {Table.PRIMARY}, autoincrement = true)
- @Getter
- private final int teamId;
- @Field
- @Getter
- private String teamKuerzel;
- @Field
- @Getter
- private String teamName;
- @Field(def = "'8'")
- @Getter
- private String teamColor;
- @Field(nullable = true)
- @Getter
- private String address;
- @Field(def = "'25565'")
- @Getter
- private int port;
- @Field(def = "0")
- private boolean teamDeleted;
-
- public static void create(String kuerzel, String name){
- insert.update(kuerzel, name);
- }
-
- public static Team get(int id) {
- return teamCache.computeIfAbsent(id, byId::select);
- }
-
- public static Team get(String name){
- // No cache lookup due to low frequency use
- name = name.toLowerCase();
- return byName.select(name, name);
- }
-
- public static List getAll(){
- clear();
- List teams = all.listSelect(false);
- teams.forEach(team -> teamCache.put(team.getTeamId(), team));
- return teams;
- }
-
- public List getMembers(){
- return SteamwarUser.getTeam(teamId).stream().map(SteamwarUser::getId).collect(Collectors.toList());
- }
-
- public int size(){
- return getSize.select(rs -> {
- rs.next();
- return rs.getInt("COUNT(id)");
- }, teamId);
- }
-
- public void disband(SteamwarUser user){
- user.setLeader(false);
- delete.update(true, teamId);
- teamCache.remove(teamId);
- TeamTeilnahme.deleteFuture(teamId);
- }
-
- public void setTeamKuerzel(String teamKuerzel) {
- this.teamKuerzel = teamKuerzel;
- updateDB();
- }
-
- public void setTeamName(String teamName) {
- this.teamName = teamName;
- updateDB();
- }
-
- public void setTeamColor(String teamColor) {
- this.teamColor = teamColor;
- updateDB();
- }
-
- public void setAddress(String address) {
- this.address = address;
- updateDB();
- }
-
- public void setPort(int port) {
- this.port = port;
- updateDB();
- }
-
- private void updateDB(){
- update.update(teamKuerzel, teamName, teamColor, address, port, teamId);
- }
-}
diff --git a/CommonCore/SQL/src/de/steamwar/sql/Team.kt b/CommonCore/SQL/src/de/steamwar/sql/Team.kt
new file mode 100644
index 00000000..87419fad
--- /dev/null
+++ b/CommonCore/SQL/src/de/steamwar/sql/Team.kt
@@ -0,0 +1,112 @@
+/*
+ * This file is a part of the SteamWar software.
+ *
+ * Copyright (C) 2025 SteamWar.de-Serverteam
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package de.steamwar.sql
+
+import de.steamwar.sql.internal.useDb
+import org.jetbrains.exposed.v1.core.dao.id.EntityID
+import org.jetbrains.exposed.v1.core.dao.id.IntIdTable
+import org.jetbrains.exposed.v1.core.eq
+import org.jetbrains.exposed.v1.core.lowerCase
+import org.jetbrains.exposed.v1.dao.IntEntity
+import org.jetbrains.exposed.v1.dao.IntEntityClass
+import org.jetbrains.exposed.v1.jdbc.select
+
+object TeamTable : IntIdTable("Team", "TeamID") {
+ val kuerzel = varchar("TeamKuerzel", 10)
+ val color = char("TeamColor", 1)
+ val name = varchar("TeamName", 16)
+ val deleted = bool("TeamDeleted")
+ val address = text("Address")
+ val port = ushort("Port")
+}
+
+class Team(id: EntityID) : IntEntity(id) {
+ companion object : IntEntityClass(TeamTable) {
+ private val teamCache = mutableMapOf()
+
+ @JvmStatic
+ fun clear() = teamCache.clear()
+
+ @JvmStatic
+ fun byId(id: Int) = teamCache.computeIfAbsent(id) { useDb { Team[id] } }
+
+ @JvmStatic
+ fun get(name: String) = useDb { find { TeamTable.name.lowerCase() eq name.lowercase() }.firstOrNull() }
+
+ @JvmStatic
+ fun getAll() = useDb { all().toList() }
+
+ @JvmStatic
+ fun create(kuerzel: String, name: String) = useDb {
+ new {
+ this.kuerzel = kuerzel
+ this.name = name
+ }
+ }
+ }
+
+ val teamId by TeamTable.id.transform({ EntityID(it, TeamTable) }, { it.value })
+ private var kuerzel by TeamTable.kuerzel
+ private var color by TeamTable.color
+ private var name by TeamTable.name
+ var deleted by TeamTable.deleted
+ private set
+ private var teamAddress by TeamTable.address
+ private var teamPort by TeamTable.port
+ val members by lazy { SteamwarUserTable.select(SteamwarUserTable.id).where { SteamwarUserTable.team eq teamId }.map { it[SteamwarUserTable.id].value } }
+
+ fun size() = useDb { SteamwarUser.find { SteamwarUserTable.team eq teamId }.count().toInt() }
+ fun disband(user: SteamwarUser) = useDb {
+ user.team = 0
+ deleted = true
+ teamCache.remove(teamId)
+ TeamTeilnahme.deleteFuture(teamId)
+ }
+
+ var teamKuerzel: String
+ get() = kuerzel
+ set(value) = useDb {
+ kuerzel = value
+ }
+
+ var teamColor: String
+ get() = color
+ set(value) = useDb {
+ color = value
+ }
+
+ var teamName: String
+ get() = name
+ set(value) = useDb {
+ name = value
+ }
+
+ var address: String
+ get() = teamAddress
+ set(value) = useDb {
+ teamAddress = value
+ }
+
+ var port: Int
+ get() = teamPort.toInt()
+ set(value) = useDb {
+ teamPort = value.toUShort()
+ }
+}
\ No newline at end of file
diff --git a/CommonCore/SQL/src/de/steamwar/sql/TeamTeilnahme.java b/CommonCore/SQL/src/de/steamwar/sql/TeamTeilnahme.java
index 620710ff..d7c4c9e6 100644
--- a/CommonCore/SQL/src/de/steamwar/sql/TeamTeilnahme.java
+++ b/CommonCore/SQL/src/de/steamwar/sql/TeamTeilnahme.java
@@ -61,7 +61,7 @@ public class TeamTeilnahme {
}
public static Set getTeams(int eventID){
- return selectTeams.listSelect(eventID).stream().map(tt -> Team.get(tt.teamId)).collect(Collectors.toSet()); // suboptimal performance (O(n) database queries)
+ return selectTeams.listSelect(eventID).stream().map(tt -> Team.byId(tt.teamId)).collect(Collectors.toSet()); // suboptimal performance (O(n) database queries)
}
public static Set getEvents(int teamID){
diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/Config.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/Config.java
index 8d2b722d..a8c8019e 100644
--- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/Config.java
+++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/Config.java
@@ -211,15 +211,15 @@ public class Config {
int eventKampfID = Integer.parseInt(System.getProperty("fightID", "0"));
if(eventKampfID >= 1){
- EventKampf = EventFight.get(eventKampfID);
+ EventKampf = EventFight.byId(eventKampfID);
if(EventKampf == null){
Bukkit.getLogger().log(Level.SEVERE, "Failed to load EventFight");
Bukkit.shutdown();
}
assert EventKampf != null;
- Team team1 = Team.get(EventKampf.getTeamBlue());
- Team team2 = Team.get(EventKampf.getTeamRed());
+ Team team1 = Team.byId(EventKampf.getTeamBlue());
+ Team team2 = Team.byId(EventKampf.getTeamRed());
if(team1 == null || team2 == null){
Bukkit.getLogger().log(Level.SEVERE, "Failed to load Team");
diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/record/PacketProcessor.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/record/PacketProcessor.java
index 26ea3d58..cbb79a5e 100644
--- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/record/PacketProcessor.java
+++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/record/PacketProcessor.java
@@ -549,7 +549,7 @@ public class PacketProcessor implements Listener {
}
private void pasteForTeam(int teamId, FightTeam fightTeam){
- Team team = Team.get(teamId);
+ Team team = Team.byId(teamId);
fightTeam.setPrefixAndName("§" + team.getTeamColor(), team.getTeamKuerzel());
fightTeam.pasteTeamName();
}
diff --git a/LobbySystem/src/de/steamwar/lobby/particle/ParticleRequirement.java b/LobbySystem/src/de/steamwar/lobby/particle/ParticleRequirement.java
index 754f5d2b..f0e82439 100644
--- a/LobbySystem/src/de/steamwar/lobby/particle/ParticleRequirement.java
+++ b/LobbySystem/src/de/steamwar/lobby/particle/ParticleRequirement.java
@@ -108,7 +108,7 @@ public interface ParticleRequirement {
static ParticleRequirement specificTeam(int teamId) {
if (teamId == 0) return NO_REQUIRMENT;
- String teamKuerzel = Team.get(teamId).getTeamKuerzel();
+ String teamKuerzel = Team.byId(teamId).getTeamKuerzel();
return new ParticleRequirement() {
@Override
public String getRequirementName(Player player) {
@@ -216,7 +216,7 @@ public interface ParticleRequirement {
static ParticleRequirement easterEventSpecificTeam(int teamId) {
if (teamId == 0) return NO_REQUIRMENT;
- String teamKuerzel = Team.get(teamId).getTeamKuerzel();
+ String teamKuerzel = Team.byId(teamId).getTeamKuerzel();
return new ParticleRequirement() {
@Override
public String getRequirementName(Player player) {
diff --git a/MissileWars/src/de/steamwar/misslewars/Config.java b/MissileWars/src/de/steamwar/misslewars/Config.java
index eb223c5d..586db3b2 100644
--- a/MissileWars/src/de/steamwar/misslewars/Config.java
+++ b/MissileWars/src/de/steamwar/misslewars/Config.java
@@ -124,15 +124,15 @@ public class Config {
EventKampfID = Integer.parseInt(System.getProperty("fightID", "0"));
if (EventKampfID >= 1) {
- EventKampf = EventFight.get(EventKampfID);
+ EventKampf = EventFight.byId(EventKampfID);
if (EventKampf == null) {
Bukkit.getLogger().log(Level.SEVERE, "Failed to load EventFight");
Bukkit.shutdown();
}
assert EventKampf != null;
- Team team1 = Team.get(EventKampf.getTeamBlue());
- Team team2 = Team.get(EventKampf.getTeamRed());
+ Team team1 = Team.byId(EventKampf.getTeamBlue());
+ Team team2 = Team.byId(EventKampf.getTeamRed());
if (team1 == null || team2 == null) {
Bukkit.getLogger().log(Level.SEVERE, "Failed to load Team");
diff --git a/SchematicSystem/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/schematiccommand/parts/MemberPart.java b/SchematicSystem/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/schematiccommand/parts/MemberPart.java
index 751e1c9b..38c4d202 100644
--- a/SchematicSystem/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/schematiccommand/parts/MemberPart.java
+++ b/SchematicSystem/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/schematiccommand/parts/MemberPart.java
@@ -117,7 +117,7 @@ public class MemberPart extends SWCommand {
@Register("addteam")
public void addTeam(Player player, @Validator("isOwnerValidator") SchematicNode node) {
SteamwarUser user = getUser(player);
- Team team = Team.get(user.getTeam());
+ Team team = Team.byId(user.getTeam());
if (team == null || team.getTeamId() == 0) {
SchematicSystem.MESSAGE.send("COMMAND_ADD_TEAM_NOT_IN_TEAM", player);
return;
@@ -129,7 +129,7 @@ public class MemberPart extends SWCommand {
@Register("delteam")
public void remTeam(Player player, @Validator("isOwnerValidator") SchematicNode node) {
SteamwarUser user = getUser(player);
- Team team = Team.get(user.getTeam());
+ Team team = Team.byId(user.getTeam());
if (team == null || team.getTeamId() == 0) {
SchematicSystem.MESSAGE.send("COMMAND_DEL_TEAM_NOT_IN_TEAM", player);
return;
diff --git a/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueConfig.kt b/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueConfig.kt
index 7f0e7526..70b52169 100644
--- a/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueConfig.kt
+++ b/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueConfig.kt
@@ -53,12 +53,12 @@ data class TNTLeagueConfig(
init {
if (eventFightId != null && eventFightId > 0) {
- eventFight = EventFight.get(eventFightId) ?: throw IllegalArgumentException("EventFight with ID $eventFightId not found")
+ eventFight = EventFight.byId(eventFightId) ?: throw IllegalArgumentException("EventFight with ID $eventFightId not found")
event = Event.byId(eventFight.eventID)!!
- eventTeamBlue = Team.get(eventFight.teamBlue)
- eventTeamRed = Team.get(eventFight.teamRed)
+ eventTeamBlue = Team.byId(eventFight.teamBlue)
+ eventTeamRed = Team.byId(eventFight.teamRed)
blueTeam = TeamConfig(TNTLeagueWorldConfig.blueTeam, SubMessage("PLAIN_STRING", "§${eventTeamBlue.teamColor}${eventTeamBlue.teamName}"), eventTeamBlue.teamColor[0])
redTeam = TeamConfig(TNTLeagueWorldConfig.redTeam, SubMessage("PLAIN_STRING", "§${eventTeamRed.teamColor}${eventTeamRed.teamName}"), eventTeamRed.teamColor[0])
diff --git a/TowerRun/src/de/steamwar/towerrun/config/Config.java b/TowerRun/src/de/steamwar/towerrun/config/Config.java
index 7a7b6795..6e4d4f5f 100644
--- a/TowerRun/src/de/steamwar/towerrun/config/Config.java
+++ b/TowerRun/src/de/steamwar/towerrun/config/Config.java
@@ -67,7 +67,7 @@ public class Config {
EVENT_KAMPF_ID = Integer.parseInt(System.getProperty("fightID", "0"));
if (event()) {
- EVENT_FIGHT = EventFight.get(EVENT_KAMPF_ID);
+ EVENT_FIGHT = EventFight.byId(EVENT_KAMPF_ID);
if (EVENT_FIGHT == null) {
Bukkit.shutdown();
diff --git a/VelocityCore/src/de/steamwar/velocitycore/EventStarter.java b/VelocityCore/src/de/steamwar/velocitycore/EventStarter.java
index b3419a1c..eb0ee02c 100644
--- a/VelocityCore/src/de/steamwar/velocitycore/EventStarter.java
+++ b/VelocityCore/src/de/steamwar/velocitycore/EventStarter.java
@@ -64,8 +64,8 @@ public class EventStarter {
EventFight next;
while((next = nextFight(fights)) != null){
- Team blue = Team.get(next.getTeamBlue());
- Team red = Team.get(next.getTeamRed());
+ Team blue = Team.byId(next.getTeamBlue());
+ Team red = Team.byId(next.getTeamRed());
//Don't start EventServer if not the event bungee
String command;
diff --git a/VelocityCore/src/de/steamwar/velocitycore/ServerStarter.java b/VelocityCore/src/de/steamwar/velocitycore/ServerStarter.java
index 3b56256a..3ea195cd 100644
--- a/VelocityCore/src/de/steamwar/velocitycore/ServerStarter.java
+++ b/VelocityCore/src/de/steamwar/velocitycore/ServerStarter.java
@@ -110,7 +110,7 @@ public class ServerStarter {
fightMap = eventFight.getMap();
gameMode = eventFight.getSpielmodus();
- String serverName = Team.get(eventFight.getTeamBlue()).getTeamKuerzel() + "_vs_" + Team.get(eventFight.getTeamRed()).getTeamKuerzel();
+ String serverName = Team.byId(eventFight.getTeamBlue()).getTeamKuerzel() + "_vs_" + Team.byId(eventFight.getTeamRed()).getTeamKuerzel();
serverNameProvider = port -> serverName;
worldName = serverToWorldName(serverName + eventFight.getStartTime().toLocalDateTime().format(DateTimeFormatter.ISO_TIME));
return this;
diff --git a/VelocityCore/src/de/steamwar/velocitycore/commands/EventCommand.java b/VelocityCore/src/de/steamwar/velocitycore/commands/EventCommand.java
index 04755885..57cedf3a 100644
--- a/VelocityCore/src/de/steamwar/velocitycore/commands/EventCommand.java
+++ b/VelocityCore/src/de/steamwar/velocitycore/commands/EventCommand.java
@@ -87,8 +87,8 @@ public class EventCommand extends SWCommand {
DateTimeFormatter format = DateTimeFormatter.ofPattern(sender.parseToPlain("EVENT_TIME_FORMAT"));
for (EventFight fight : EventFight.getEvent(currentEvent.getEventID())) {
- Team blue = Team.get(fight.getTeamBlue());
- Team red = Team.get(fight.getTeamRed());
+ Team blue = Team.byId(fight.getTeamBlue());
+ Team red = Team.byId(fight.getTeamRed());
StringBuilder fline = new StringBuilder(sender.parseToLegacy("EVENT_CURRENT_FIGHT", fight.getStartTime().toLocalDateTime().format(format), blue.getTeamColor(), blue.getTeamKuerzel(), red.getTeamColor(), red.getTeamKuerzel()));
if (fight.hasFinished()) {
@@ -125,7 +125,7 @@ public class EventCommand extends SWCommand {
@Override
public Team map(Chatter sender, PreviousArguments previousArguments, String s) {
if ("PUB".equalsIgnoreCase(s) || "public".equalsIgnoreCase(s)) {
- return Team.get(0);
+ return Team.byId(0);
}
return Team.get(s);
}
@@ -137,7 +137,7 @@ public class EventCommand extends SWCommand {
for (EventFight fight : EventFight.getEvent(currentEvent.getEventID())) {
if (fight.hasFinished()) continue;
teamMapper.apply(fight).forEach(integer -> {
- Team team = Team.get(integer);
+ Team team = Team.byId(integer);
teams.add(team.getTeamName());
teams.add(team.getTeamKuerzel());
});
diff --git a/VelocityCore/src/de/steamwar/velocitycore/commands/TeamCommand.java b/VelocityCore/src/de/steamwar/velocitycore/commands/TeamCommand.java
index 3606348b..9fce599b 100644
--- a/VelocityCore/src/de/steamwar/velocitycore/commands/TeamCommand.java
+++ b/VelocityCore/src/de/steamwar/velocitycore/commands/TeamCommand.java
@@ -83,7 +83,7 @@ public class TeamCommand extends SWCommand {
@Register(value = "create", description = "TEAM_CREATE_USAGE")
public void create(@Validator("isNotInTeam") Chatter sender, @Length(min = 2, max = 4) @ErrorMessage("TEAM_KUERZEL_LENGTH") String kuerzel, @Length(min = 4, max = 15) @ErrorMessage("TEAM_NAME_LENGTH") String name){
SteamwarUser user = sender.user();
- Team team = Team.get(user.getTeam());
+ Team team = Team.byId(user.getTeam());
if(checkTeamKuerzel(sender, team, kuerzel) || checkTeamName(sender, team, name))
return;
@@ -116,7 +116,7 @@ public class TeamCommand extends SWCommand {
sender.system("TEAM_JOIN_USAGE");
StringBuilder sb = new StringBuilder();
for(int inv : invs){
- Team team = Team.get(inv);
+ Team team = Team.byId(inv);
sb.append(team.getTeamName()).append(" ");
}
sender.system("TEAM_JOIN_INVITED", sb.toString());
@@ -124,7 +124,7 @@ public class TeamCommand extends SWCommand {
}
for(int inv : invs){
- Team team = Team.get(inv);
+ Team team = Team.byId(inv);
if(team.getTeamKuerzel().equalsIgnoreCase(args[0]) || team.getTeamName().equalsIgnoreCase(args[0])){
t = inv;
break;
@@ -139,13 +139,13 @@ public class TeamCommand extends SWCommand {
user.setTeam(t);
teamInvitations.remove(user.getId());
- sender.system("TEAM_JOIN_JOINED", Team.get(t).getTeamName());
+ sender.system("TEAM_JOIN_JOINED", Team.byId(t).getTeamName());
}
@Register("stepback")
public void stepBack(@Validator("isLeader") Chatter sender) {
SteamwarUser user = sender.user();
- Team team = Team.get(user.getTeam());
+ Team team = Team.byId(user.getTeam());
if(noRemainingLeaders(team, user)){
sender.system("TEAM_OTHER_LEADER_REQUIRED");
@@ -159,7 +159,7 @@ public class TeamCommand extends SWCommand {
@Register("leave")
public void leave(@Validator("isInTeam") Chatter sender) {
SteamwarUser user = sender.user();
- Team team = Team.get(user.getTeam());
+ Team team = Team.byId(user.getTeam());
int teamSize = team.size();
if(teamSize > 1 && user.isLeader() && noRemainingLeaders(team, user)) {
@@ -182,7 +182,7 @@ public class TeamCommand extends SWCommand {
@Register(value = "invite", description = "TEAM_INVITE_USAGE")
public void invite(@Validator("isLeader") Chatter sender, @ErrorMessage("TEAM_INVITE_NO_PLAYER") SteamwarUser target){
- Team team = Team.get(sender.user().getTeam());
+ Team team = Team.byId(sender.user().getTeam());
if(notDuringEvent(sender))
return;
@@ -205,7 +205,7 @@ public class TeamCommand extends SWCommand {
@Register(value = "remove", description = "TEAM_REMOVE_USAGE")
public void remove(@Validator("isLeader") Chatter sender, @ErrorMessage("TEAM_REMOVE_NOT_PLAYER") @Mapper("memberList") SteamwarUser target){
- Team team = Team.get(sender.user().getTeam());
+ Team team = Team.byId(sender.user().getTeam());
if (target.isLeader()) {
sender.system("TEAM_REMOVE_NOT_LEADER");
@@ -239,7 +239,7 @@ public class TeamCommand extends SWCommand {
@Override
public Collection tabCompletes(Chatter sender, PreviousArguments previousArguments, String s) {
- return Team.get(sender.user().getTeam()).getMembers().stream()
+ return Team.byId(sender.user().getTeam()).getMembers().stream()
.map(SteamwarUser::byId)
.map(SteamwarUser::getUserName)
.toList();
@@ -249,7 +249,7 @@ public class TeamCommand extends SWCommand {
@Register(value = "changekurzel", description = "TEAM_KUERZEL_USAGE")
public void changekuerzel(@Validator("isLeader") Chatter sender, @Length(min = 2, max = 4) @ErrorMessage("TEAM_KUERZEL_LENGTH") String kuerzel){
- Team team = Team.get(sender.user().getTeam());
+ Team team = Team.byId(sender.user().getTeam());
if(notDuringEvent(sender))
return;
@@ -263,7 +263,7 @@ public class TeamCommand extends SWCommand {
@Register(value = "changename", description = "TEAM_NAME_USAGE")
public void changename(@Validator("isLeader") Chatter sender, @Length(min = 4, max = 15) @ErrorMessage("TEAM_NAME_LENGTH") String name){
- Team team = Team.get(sender.user().getTeam());
+ Team team = Team.byId(sender.user().getTeam());
if(notDuringEvent(sender))
return;
@@ -291,7 +291,7 @@ public class TeamCommand extends SWCommand {
@Register("info")
public void info(@Validator("isInTeam") Chatter sender){
- info(sender, Team.get(sender.user().getTeam()));
+ info(sender, Team.byId(sender.user().getTeam()));
}
@Register(value = "info", description = "TEAM_INFO_USAGE")
@@ -371,7 +371,7 @@ public class TeamCommand extends SWCommand {
@Register("event")
public void event(@Validator("isInTeam") Chatter sender) {
- Team team = Team.get(sender.user().getTeam());
+ Team team = Team.byId(sender.user().getTeam());
sender.system("TEAM_EVENT_USAGE");
Set events = TeamTeilnahme.getEvents(team.getTeamId());
@@ -385,7 +385,7 @@ public class TeamCommand extends SWCommand {
@Register("event")
public void event(@Validator("isLeader") Chatter sender, Event event){
- Team team = Team.get(sender.user().getTeam());
+ Team team = Team.byId(sender.user().getTeam());
if(notDuringEvent(sender))
return;
@@ -409,7 +409,7 @@ public class TeamCommand extends SWCommand {
@Register("tp")
public void tp(@Validator("isInTeam") PlayerChatter sender) {
- Team team = Team.get(sender.user().getTeam());
+ Team team = Team.byId(sender.user().getTeam());
tp(sender, team);
}
@@ -450,7 +450,7 @@ public class TeamCommand extends SWCommand {
@Register(value = "server", description = "TEAM_SERVER_USAGE")
public void server(@Validator("isLeader") Chatter sender, String server, @Min(intValue = 1) @Max(intValue = 65535) @ErrorMessage("TEAM_SERVER_PORT_INVALID") int port){
- Team team = Team.get(sender.user().getTeam());
+ Team team = Team.byId(sender.user().getTeam());
if (PunishmentCommand.isPunishedWithMessage(sender, Punishment.PunishmentType.NoTeamServer)) {
return;
}
@@ -508,7 +508,7 @@ public class TeamCommand extends SWCommand {
@Register("color")
@Register("changecolor")
public void changeColor(@Validator("isLeader") PlayerChatter sender) {
- Team team = Team.get(sender.user().getTeam());
+ Team team = Team.byId(sender.user().getTeam());
if(notDuringEvent(sender))
return;
diff --git a/VelocityCore/src/de/steamwar/velocitycore/commands/TpCommand.java b/VelocityCore/src/de/steamwar/velocitycore/commands/TpCommand.java
index ea42b271..107e700f 100644
--- a/VelocityCore/src/de/steamwar/velocitycore/commands/TpCommand.java
+++ b/VelocityCore/src/de/steamwar/velocitycore/commands/TpCommand.java
@@ -87,7 +87,7 @@ public class TpCommand extends SWCommand {
}
if (Event.get() != null) {
EventStarter.getEventServer().keySet().forEach(teamId -> {
- Team team = Team.get(teamId);
+ Team team = Team.byId(teamId);
list.add(team.getTeamName());
list.add(team.getTeamKuerzel());
});
diff --git a/VelocityCore/src/de/steamwar/velocitycore/commands/WhoisCommand.java b/VelocityCore/src/de/steamwar/velocitycore/commands/WhoisCommand.java
index 1abb69d2..4d096b3f 100644
--- a/VelocityCore/src/de/steamwar/velocitycore/commands/WhoisCommand.java
+++ b/VelocityCore/src/de/steamwar/velocitycore/commands/WhoisCommand.java
@@ -63,7 +63,7 @@ public class WhoisCommand extends SWCommand {
public void whois(Chatter sender, SteamwarUser user, WhoisParameterTypes... parameters) {
EnumSet parameterTypes = parameters.length == 0 ? EnumSet.noneOf(WhoisParameterTypes.class) : EnumSet.copyOf(Arrays.asList(parameters));
- Team team = Team.get(user.getTeam());
+ Team team = Team.byId(user.getTeam());
sender.system("WHOIS_USERNAME", user.getUserName());
sender.system("WHOIS_PREFIX", user.prefix().getColorCode() + user.prefix().getChatPrefix());
diff --git a/VelocityCore/src/de/steamwar/velocitycore/discord/channels/EventChannel.java b/VelocityCore/src/de/steamwar/velocitycore/discord/channels/EventChannel.java
index a7f398b9..1d19dab0 100644
--- a/VelocityCore/src/de/steamwar/velocitycore/discord/channels/EventChannel.java
+++ b/VelocityCore/src/de/steamwar/velocitycore/discord/channels/EventChannel.java
@@ -96,8 +96,8 @@ public class EventChannel {
Instant now = Instant.now();
EventFight.getEvent(event.getEventID()).forEach(eventFight -> {
- Team teamBlue = Team.get(eventFight.getTeamBlue());
- Team teamRed = Team.get(eventFight.getTeamRed());
+ Team teamBlue = Team.byId(eventFight.getTeamBlue());
+ Team teamRed = Team.byId(eventFight.getTeamRed());
if (eventFight.getStartTime().toLocalDateTime().getDayOfYear() != LocalDate.now().getDayOfYear()) {
return;
diff --git a/VelocityCore/src/de/steamwar/velocitycore/listeners/ChatListener.java b/VelocityCore/src/de/steamwar/velocitycore/listeners/ChatListener.java
index 02e5cc3d..3ab11933 100644
--- a/VelocityCore/src/de/steamwar/velocitycore/listeners/ChatListener.java
+++ b/VelocityCore/src/de/steamwar/velocitycore/listeners/ChatListener.java
@@ -247,7 +247,7 @@ public class ChatListener extends BasicListener {
sender,
msgReceiver == null ? receiver : msgReceiver,
highlightMentions(message, chatColorCode, receiver),
- sender.getTeam() == 0 ? "" : "§" + Team.get(sender.getTeam()).getTeamColor() + Team.get(sender.getTeam()).getTeamKuerzel() + " ",
+ sender.getTeam() == 0 ? "" : "§" + Team.byId(sender.getTeam()).getTeamColor() + Team.byId(sender.getTeam()).getTeamKuerzel() + " ",
UserElo.getEmblem(sender, rankedModes),
prefix.getColorCode(),
prefix.getChatPrefix().length() == 0 ? "§f" : prefix.getChatPrefix() + " ",
diff --git a/WebsiteBackend/src/de/steamwar/routes/Data.kt b/WebsiteBackend/src/de/steamwar/routes/Data.kt
index a638a04a..5f2ce465 100644
--- a/WebsiteBackend/src/de/steamwar/routes/Data.kt
+++ b/WebsiteBackend/src/de/steamwar/routes/Data.kt
@@ -44,11 +44,7 @@ data class ResponseSchematicType(val name: String, val db: String)
@Serializable
data class ResponseUser(val name: String, val uuid: String, val prefix: String, val perms: List) {
- constructor(user: SteamwarUser) : this(user.userName, user.uuid.toString(), user.prefix().chatPrefix, user.perms().filter { !it.name.startsWith("PREFIX_") }.map { it.name }) {
- synchronized(cache) {
- cache[user.getId()] = this
- }
- }
+ private constructor(user: SteamwarUser) : this(user.userName, user.uuid.toString(), user.prefix().chatPrefix, user.perms().filter { !it.name.startsWith("PREFIX_") }.map { it.name })
companion object {
private val cache = mutableMapOf()
@@ -59,6 +55,10 @@ data class ResponseUser(val name: String, val uuid: String, val prefix: String,
}
}
+ fun get(user: SteamwarUser): ResponseUser = synchronized(cache) {
+ return cache[user.getId()] ?: ResponseUser(user).also { cache[user.getId()] = it }
+ }
+
fun clearCache() {
synchronized(cache) {
cache.clear()
@@ -75,7 +75,7 @@ fun Route.configureDataRoutes() {
permission = UserPerm.MODERATION
}
get("/users") {
- call.respond(SteamwarUser.all().map { ResponseUser(it) })
+ call.respond(SteamwarUser.all().map { ResponseUser.get(it) })
}
get("/teams") {
call.respond(Team.getAll().map { ResponseTeam(it) })
@@ -118,7 +118,7 @@ fun Route.configureDataRoutes() {
listOf(UserPerm.PREFIX_ADMIN, UserPerm.PREFIX_DEVELOPER, UserPerm.PREFIX_MODERATOR, UserPerm.PREFIX_SUPPORTER, UserPerm.PREFIX_BUILDER)
.associateWith { SteamwarUser.getUsersWithPerm(it) }
.mapKeys { UserPerm.prefixes[it.key]!!.chatPrefix }
- .mapValues { it.value.map { ResponseUser(it) } }
+ .mapValues { it.value.map { ResponseUser.get(it) } }
)
}
get("/skin/{uuid}") {
@@ -137,7 +137,7 @@ fun Route.configureDataRoutes() {
route("/me") {
install(SWPermissionCheck)
get {
- call.respond(ResponseUser(call.principal()!!.user))
+ call.respond(ResponseUser.get(call.principal()!!.user))
}
}
}
diff --git a/WebsiteBackend/src/de/steamwar/routes/EventFights.kt b/WebsiteBackend/src/de/steamwar/routes/EventFights.kt
index fc2ab7c0..82569d40 100644
--- a/WebsiteBackend/src/de/steamwar/routes/EventFights.kt
+++ b/WebsiteBackend/src/de/steamwar/routes/EventFights.kt
@@ -47,8 +47,8 @@ data class ResponseEventFight(
eventFight.fightID,
eventFight.spielmodus,
eventFight.map,
- ResponseTeam(Team.get(eventFight.teamBlue)),
- ResponseTeam(Team.get(eventFight.teamRed)),
+ ResponseTeam(Team.byId(eventFight.teamBlue)),
+ ResponseTeam(Team.byId(eventFight.teamRed)),
eventFight.startTime.time,
eventFight.ergebnis,
eventFight.spectatePort,
@@ -162,7 +162,7 @@ suspend fun ApplicationCall.receiveFight(fieldName: String = "fight"): EventFigh
return null
}
- val fight = EventFight.get(fightId)
+ val fight = EventFight.byId(fightId)
if (fight == null) {
respond(HttpStatusCode.NotFound, ResponseError("Fight not found"))
return null
diff --git a/WebsiteBackend/src/de/steamwar/routes/EventGroups.kt b/WebsiteBackend/src/de/steamwar/routes/EventGroups.kt
index 38260e74..f784788d 100644
--- a/WebsiteBackend/src/de/steamwar/routes/EventGroups.kt
+++ b/WebsiteBackend/src/de/steamwar/routes/EventGroups.kt
@@ -66,7 +66,7 @@ fun Route.configureEventGroups() {
val pointsPerLoss = updateEventGroup.pointsPerLoss ?: group.pointsPerLoss
val pointsPerDraw = updateEventGroup.pointsPerDraw ?: group.pointsPerDraw
group.update(name, type, pointsPerWin, pointsPerLoss, pointsPerDraw)
- call.respond(ResponseGroups(EventGroup.get(group.id).orElse(null) ?: return@put))
+ call.respond(ResponseGroups(EventGroup.byId(group.getId()).orElse(null) ?: return@put))
}
delete {
val group = call.receiveEventGroup() ?: return@delete
@@ -84,7 +84,7 @@ suspend fun ApplicationCall.receiveEventGroup(): EventGroup? {
return null
}
- val group = EventGroup.get(groupId).orElse(null)
+ val group = EventGroup.byId(groupId).orElse(null)
if (group == null) {
respond(HttpStatusCode.NotFound)
return null
diff --git a/WebsiteBackend/src/de/steamwar/routes/EventReferees.kt b/WebsiteBackend/src/de/steamwar/routes/EventReferees.kt
index 0c8bbf3b..4997b1fa 100644
--- a/WebsiteBackend/src/de/steamwar/routes/EventReferees.kt
+++ b/WebsiteBackend/src/de/steamwar/routes/EventReferees.kt
@@ -31,7 +31,7 @@ fun Route.configureEventRefereesRouting() {
route("/referees") {
get {
val event = call.receiveEvent() ?: return@get
- call.respond(Referee.get(event.eventID).map { ResponseUser(SteamwarUser.byId(it)!!) })
+ call.respond(Referee.get(event.eventID).map { ResponseUser.get(SteamwarUser.byId(it)!!) })
}
put {
val event = call.receiveEvent() ?: return@put
@@ -39,7 +39,7 @@ fun Route.configureEventRefereesRouting() {
referees.forEach {
Referee.add(event.eventID, SteamwarUser.get(UUID.fromString(it))!!.getId())
}
- call.respond(Referee.get(event.eventID).map { ResponseUser(SteamwarUser.byId(it)!!) })
+ call.respond(Referee.get(event.eventID).map { ResponseUser.get(SteamwarUser.byId(it)!!) })
}
delete {
val event = call.receiveEvent() ?: return@delete
@@ -47,7 +47,7 @@ fun Route.configureEventRefereesRouting() {
referees.forEach {
Referee.remove(event.eventID, SteamwarUser.get(UUID.fromString(it))!!.getId())
}
- call.respond(Referee.get(event.eventID).map { ResponseUser(SteamwarUser.byId(it)!!) })
+ call.respond(Referee.get(event.eventID).map { ResponseUser.get(SteamwarUser.byId(it)!!) })
}
}
}
\ No newline at end of file
diff --git a/WebsiteBackend/src/de/steamwar/routes/EventRelations.kt b/WebsiteBackend/src/de/steamwar/routes/EventRelations.kt
index c8af5866..83c4e505 100644
--- a/WebsiteBackend/src/de/steamwar/routes/EventRelations.kt
+++ b/WebsiteBackend/src/de/steamwar/routes/EventRelations.kt
@@ -48,11 +48,11 @@ fun Route.configureEventRelations() {
post {
val create = call.receive()
- val fight = EventFight.get(create.fightId) ?: return@post call.respond(HttpStatusCode.NotFound)
+ val fight = EventFight.byId(create.fightId) ?: return@post call.respond(HttpStatusCode.NotFound)
when (create.fromType) {
- EventRelation.FromType.FIGHT -> EventFight.get(create.fromId) ?: return@post call.respond(HttpStatusCode.BadRequest)
- EventRelation.FromType.GROUP -> EventGroup.get(create.fromId) ?: return@post call.respond(HttpStatusCode.BadRequest)
+ EventRelation.FromType.FIGHT -> EventFight.byId(create.fromId) ?: return@post call.respond(HttpStatusCode.BadRequest)
+ EventRelation.FromType.GROUP -> EventGroup.byId(create.fromId) ?: return@post call.respond(HttpStatusCode.BadRequest)
}
val relation = EventRelation.create(fight, create.team, create.fromType, create.fromId, create.fromPlace)
@@ -70,10 +70,10 @@ fun Route.configureEventRelations() {
update.from?.let {
when(it.fromType) {
- EventRelation.FromType.FIGHT -> relation.setFromFight(EventFight.get(it.fromId) ?: return@put call.respond(HttpStatusCode.BadRequest),
+ EventRelation.FromType.FIGHT -> relation.setFromFight(EventFight.byId(it.fromId) ?: return@put call.respond(HttpStatusCode.BadRequest),
it.fromPlace
)
- EventRelation.FromType.GROUP -> relation.setFromGroup(EventGroup.get(it.fromId).orElse(null) ?: return@put call.respond(HttpStatusCode.BadRequest),
+ EventRelation.FromType.GROUP -> relation.setFromGroup(EventGroup.byId(it.fromId).orElse(null) ?: return@put call.respond(HttpStatusCode.BadRequest),
it.fromPlace
)
}
@@ -99,7 +99,7 @@ suspend fun ApplicationCall.receiveEventRelation(): EventRelation? {
return null
}
- val relation = EventRelation.get(relationId)
+ val relation = EventRelation.byId(relationId)
if (relation == null) {
respond(HttpStatusCode.NotFound)
return null
diff --git a/WebsiteBackend/src/de/steamwar/routes/Events.kt b/WebsiteBackend/src/de/steamwar/routes/Events.kt
index faeae862..e82fc495 100644
--- a/WebsiteBackend/src/de/steamwar/routes/Events.kt
+++ b/WebsiteBackend/src/de/steamwar/routes/Events.kt
@@ -51,7 +51,7 @@ data class ResponseGroups(
val points: Map
) {
constructor(group: EventGroup, short: Boolean = false) : this(
- group.id,
+ group.getId(),
group.name,
group.pointsPerWin,
group.pointsPerLoss,
@@ -71,12 +71,12 @@ data class ResponseRelation(
val fromPlace: Int
) {
constructor(relation: EventRelation) : this(
- relation.id,
+ relation.getId(),
relation.fightId,
relation.fightTeam,
relation.fromType,
- relation.fromFight.map { ResponseEventFight(it) }.orElse(null),
- relation.fromGroup.map { ResponseGroups(it) }.orElse(null),
+ relation.fromFight?.let { ResponseEventFight(it) },
+ relation.fromGroup?.let { ResponseGroups(it) },
relation.fromPlace
)
}
@@ -118,7 +118,7 @@ data class ExtendedResponseEvent(
TeamTeilnahme.getTeams(event.eventID).map { ResponseTeam(it) },
EventGroup.get(event).map { ResponseGroups(it) },
EventFight.getEvent(event.eventID).map { ResponseEventFight(it) },
- Referee.get(event.eventID).map { ResponseUser(SteamwarUser.byId(it)!!) },
+ Referee.get(event.eventID).map { ResponseUser.get(SteamwarUser.byId(it)!!) },
EventRelation.get(event).map { ResponseRelation(it) }
)
}
@@ -176,8 +176,8 @@ fun Route.configureEventsRoute() {
csv.append(arrayOf("Start", "BlueTeam", "RedTeam", "WinnerTeam", "Group").joinToString(","))
fights.forEach {
csv.appendLine()
- val blue = Team.get(it.teamBlue)
- val red = Team.get(it.teamRed)
+ val blue = Team.byId(it.teamBlue)
+ val red = Team.byId(it.teamRed)
val winner = when (it.ergebnis) {
1 -> blue.teamName
2 -> red.teamName
@@ -187,8 +187,8 @@ fun Route.configureEventsRoute() {
csv.append(
arrayOf(
it.startTime.toString(),
- Team.get(it.teamBlue).teamName,
- Team.get(it.teamRed).teamName,
+ Team.byId(it.teamBlue).teamName,
+ Team.byId(it.teamRed).teamName,
winner,
it.group.map { it.name }.orElse("Ungrouped")
).joinToString(",")