forked from SteamWar/SteamWar
Migrate SQL-related classes (Referee, SchemElo, Script, Session, SWException, TeamTeilnahme) to Kotlin and remove outdated Java implementations. Update references across modules.
Signed-off-by: Chaoscaot <max@maxsp.de>
This commit is contained in:
@@ -1,56 +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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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 java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class Referee {
|
||||
|
||||
private static final Table<Referee> table = new Table<>(Referee.class);
|
||||
private static final SelectStatement<Referee> byEvent = table.selectFields("eventID");
|
||||
|
||||
private static final Statement insert = table.insertAll();
|
||||
private static final Statement delete = table.delete("eventReferee");
|
||||
|
||||
public static void add(int eventID, int userID) {
|
||||
insert.update(eventID, userID);
|
||||
}
|
||||
|
||||
public static void remove(int eventID, int userID) {
|
||||
delete.update(eventID, userID);
|
||||
}
|
||||
|
||||
public static Set<Integer> get(int eventID) {
|
||||
return byEvent.listSelect(eventID).stream().map(referee -> referee.userID).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@Field(keys = {"eventReferee"})
|
||||
private final int eventID;
|
||||
@Field(keys = {"eventReferee"})
|
||||
private final int userID;
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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.CompositeID
|
||||
import org.jetbrains.exposed.v1.core.dao.id.CompositeIdTable
|
||||
import org.jetbrains.exposed.v1.core.dao.id.EntityID
|
||||
import org.jetbrains.exposed.v1.core.eq
|
||||
import org.jetbrains.exposed.v1.dao.CompositeEntity
|
||||
import org.jetbrains.exposed.v1.dao.CompositeEntityClass
|
||||
import org.jetbrains.exposed.v1.jdbc.select
|
||||
|
||||
object RefereeTable: CompositeIdTable("Referee") {
|
||||
val eventId = reference("EventId", EventTable)
|
||||
val userId = reference("UserId", SteamwarUserTable)
|
||||
|
||||
override val primaryKey = PrimaryKey(eventId, userId)
|
||||
|
||||
init {
|
||||
addIdColumn(eventId)
|
||||
addIdColumn(userId)
|
||||
}
|
||||
}
|
||||
|
||||
class Referee(id: EntityID<CompositeID>): CompositeEntity(id) {
|
||||
companion object: CompositeEntityClass<Referee>(RefereeTable) {
|
||||
@JvmStatic
|
||||
fun add(eventId: Int, userId: Int) = useDb {
|
||||
new {
|
||||
this.eventID = eventId
|
||||
this.userID = userId
|
||||
}
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun remove(eventId: Int, userId: Int) = useDb {
|
||||
find { (RefereeTable.eventId eq eventId) and (RefereeTable.userId eq userId) }.firstOrNull()?.delete()
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun get(event: Int) = useDb {
|
||||
find { RefereeTable.eventId eq event }.map { it.userID }.toSet()
|
||||
}
|
||||
}
|
||||
|
||||
var eventID by RefereeTable.eventId.transform({ EntityID(it, EventTable) }, { it.value })
|
||||
var userID by RefereeTable.userId.transform({ EntityID(it, SteamwarUserTable) }, { it.value })
|
||||
}
|
||||
@@ -1,68 +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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package de.steamwar.sql;
|
||||
|
||||
import de.steamwar.sql.internal.Field;
|
||||
import de.steamwar.sql.internal.Statement;
|
||||
import de.steamwar.sql.internal.Table;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
import java.io.File;
|
||||
import java.sql.Timestamp;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class SWException {
|
||||
|
||||
public static void init() {
|
||||
// force class initialialisation
|
||||
}
|
||||
|
||||
private static final String CWD = System.getProperty("user.dir");
|
||||
private static final String SERVER_NAME = new File(CWD).getName();
|
||||
|
||||
private static final Table<SWException> table = new Table<>(SWException.class, "Exception");
|
||||
private static final Statement insert = table.insertFields(true, "server", "message", "stacktrace");
|
||||
|
||||
@Field(keys = {Table.PRIMARY}, autoincrement = true)
|
||||
private final int id;
|
||||
@Field(def = "CURRENT_TIMESTAMP")
|
||||
private final Timestamp time;
|
||||
@Field
|
||||
private final String server;
|
||||
@Field
|
||||
private final String message;
|
||||
@Field
|
||||
private final String stacktrace;
|
||||
|
||||
public static void log(String message, String stacktrace){
|
||||
insert.update(SERVER_NAME, generateMessage(message), stacktrace);
|
||||
}
|
||||
|
||||
public static int logGetId(String message, String stacktrace) {
|
||||
return insert.insertGetKey(SERVER_NAME, generateMessage(message), stacktrace);
|
||||
}
|
||||
|
||||
private static String generateMessage(String message) {
|
||||
StringBuilder msgBuilder = new StringBuilder(message);
|
||||
SQLWrapper.impl.additionalExceptionMetadata(msgBuilder);
|
||||
msgBuilder.append("\nCWD: ").append(CWD);
|
||||
return msgBuilder.toString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package de.steamwar.sql
|
||||
|
||||
import de.steamwar.sql.internal.useDb
|
||||
import org.jetbrains.exposed.v1.core.dao.id.IntIdTable
|
||||
import org.jetbrains.exposed.v1.javatime.timestamp
|
||||
import org.jetbrains.exposed.v1.jdbc.insert
|
||||
import org.jetbrains.exposed.v1.jdbc.insertAndGetId
|
||||
import java.io.File
|
||||
import java.time.Instant
|
||||
|
||||
object ExceptionTable: IntIdTable("Exception") {
|
||||
val time = timestamp("Time").default(Instant.now())
|
||||
val server = text("Server")
|
||||
val message = text("Message")
|
||||
val stackTrace = text("StackTrace")
|
||||
}
|
||||
|
||||
class SWException {
|
||||
companion object {
|
||||
val cwd = System.getProperty("user.dir")
|
||||
val serverName = File(cwd).name
|
||||
|
||||
@JvmStatic
|
||||
fun log(message: String, stacktrace: String) = useDb {
|
||||
ExceptionTable.insert {
|
||||
it[ExceptionTable.server] = serverName
|
||||
it[ExceptionTable.message] = generateMessage(message)
|
||||
it[ExceptionTable.stackTrace] = stacktrace
|
||||
}
|
||||
|
||||
Unit
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun logGetId(message: String, stacktrace: String) = useDb {
|
||||
ExceptionTable.insertAndGetId {
|
||||
it[ExceptionTable.server] = serverName
|
||||
it[ExceptionTable.message] = generateMessage(message)
|
||||
it[ExceptionTable.stackTrace] = stacktrace
|
||||
}.value
|
||||
}
|
||||
|
||||
fun generateMessage(message: String): String {
|
||||
val msgBuilder = StringBuilder(message)
|
||||
SQLWrapper.impl.additionalExceptionMetadata(msgBuilder)
|
||||
msgBuilder.append("\nCWD: ").append(cwd)
|
||||
return msgBuilder.toString()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,56 +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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class SchemElo {
|
||||
private static final int ELO_DEFAULT = 1000;
|
||||
|
||||
private static final Table<SchemElo> table = new Table<>(SchemElo.class);
|
||||
private static final SelectStatement<SchemElo> select = table.select(Table.PRIMARY);
|
||||
private static final Statement setElo = table.insertAll();
|
||||
|
||||
public static int getElo(SchematicNode node, int season) {
|
||||
SchemElo elo = select.select(node, season);
|
||||
return elo != null ? elo.elo : 0;
|
||||
}
|
||||
|
||||
public static int getCurrentElo(int schemID) {
|
||||
SchemElo elo = select.select(schemID, Season.getSeason());
|
||||
return elo != null ? elo.elo : ELO_DEFAULT;
|
||||
}
|
||||
|
||||
public static void setElo(int schemID, int elo) {
|
||||
setElo.update(schemID, elo, Season.getSeason());
|
||||
}
|
||||
|
||||
@Field(keys = {Table.PRIMARY})
|
||||
private final int schemId;
|
||||
@Field
|
||||
private final int elo;
|
||||
@Field(keys = {Table.PRIMARY})
|
||||
private final int season;
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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.CompositeID
|
||||
import org.jetbrains.exposed.v1.core.dao.id.CompositeIdTable
|
||||
import org.jetbrains.exposed.v1.core.dao.id.EntityID
|
||||
import org.jetbrains.exposed.v1.core.dao.id.IdTable
|
||||
import org.jetbrains.exposed.v1.core.eq
|
||||
import org.jetbrains.exposed.v1.dao.CompositeEntity
|
||||
import org.jetbrains.exposed.v1.dao.CompositeEntityClass
|
||||
import org.jetbrains.exposed.v1.jdbc.insertIgnore
|
||||
|
||||
object SchemEloTable: CompositeIdTable("SchemElo") {
|
||||
val schemId = reference("SchemId", SchematicNodeTable)
|
||||
val season = integer("Season").entityId()
|
||||
val elo = integer("Elo")
|
||||
|
||||
override val primaryKey = PrimaryKey(schemId, season)
|
||||
|
||||
init {
|
||||
addIdColumn(schemId)
|
||||
}
|
||||
}
|
||||
|
||||
class SchemElo(id: EntityID<CompositeID>): CompositeEntity(id) {
|
||||
companion object: CompositeEntityClass<SchemElo>(SchemEloTable) {
|
||||
@JvmStatic
|
||||
fun getElo(node: SchematicNode, season: Int, defaultElo: Int = 0) = useDb {
|
||||
find { (SchemEloTable.schemId eq node.id) and (SchemEloTable.season eq season) }.firstOrNull()?.elo ?: defaultElo
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getCurrentElo(schemId: Int) = getElo(SchematicNode.byId(schemId)!!, Season.getSeason())
|
||||
|
||||
@JvmStatic
|
||||
fun setElo(node: Int, elo: Int) = useDb {
|
||||
findByIdAndUpdate(CompositeID {
|
||||
it[SchemEloTable.schemId] = node
|
||||
it[SchemEloTable.season] = Season.getSeason()
|
||||
}) {
|
||||
it.elo = elo
|
||||
} ?: SchemEloTable.insertIgnore {
|
||||
it[SchemEloTable.schemId] = node
|
||||
it[SchemEloTable.season] = Season.getSeason()
|
||||
it[SchemEloTable.elo] = elo
|
||||
}
|
||||
|
||||
return@useDb
|
||||
}
|
||||
}
|
||||
|
||||
var node by SchemEloTable.schemId
|
||||
var season by SchemEloTable.season
|
||||
var elo by SchemEloTable.elo
|
||||
}
|
||||
@@ -1,84 +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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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.List;
|
||||
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public class Script {
|
||||
|
||||
private static final Table<Script> table = new Table<>(Script.class);
|
||||
|
||||
private static final SelectStatement<Script> byId = table.select(Table.PRIMARY);
|
||||
private static final SelectStatement<Script> byUserName = table.select("nameUser");
|
||||
private static final SelectStatement<Script> byUser = table.selectFields("userId");
|
||||
|
||||
private static final Statement insert = table.insertFields(true, "userId", "name", "code");
|
||||
private static final Statement updateName = table.update(Table.PRIMARY, "name");
|
||||
private static final Statement updateCode = table.update(Table.PRIMARY, "code");
|
||||
private static final Statement delete = table.delete(Table.PRIMARY);
|
||||
|
||||
public static Script get(int id) {
|
||||
return byId.select(id);
|
||||
}
|
||||
|
||||
public static Script get(SteamwarUser user, String name) {
|
||||
return byUserName.select(user, name);
|
||||
}
|
||||
|
||||
public static Script create(SteamwarUser user, String name, String code) {
|
||||
return new Script(insert.insertGetKey(user, name, code), user.getId(), name, code);
|
||||
}
|
||||
|
||||
public static List<Script> list(SteamwarUser user) {
|
||||
return byUser.listSelect(user);
|
||||
}
|
||||
|
||||
@Field(keys = Table.PRIMARY, autoincrement = true)
|
||||
private final int id;
|
||||
@Field(keys = "nameUser")
|
||||
private final int userId;
|
||||
@Field(keys = "nameUser")
|
||||
private String name;
|
||||
@Field
|
||||
private String code;
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
updateName.update(name, id);
|
||||
}
|
||||
|
||||
public void setCode(String code) {
|
||||
this.code = code;
|
||||
updateCode.update(code, id);
|
||||
}
|
||||
|
||||
public void delete() {
|
||||
delete.update(id);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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
|
||||
|
||||
object ScriptTable: IntIdTable("Script") {
|
||||
val userId = reference("UserId", SteamwarUserTable)
|
||||
val name = varchar("Name", 64)
|
||||
val code = text("Code")
|
||||
}
|
||||
|
||||
class Script(id: EntityID<Int>) : IntEntity(id) {
|
||||
companion object : IntEntityClass<Script>(ScriptTable) {
|
||||
@JvmStatic
|
||||
fun byId(id: Int) = useDb { findById(id) }
|
||||
|
||||
@JvmStatic
|
||||
fun get(user: SteamwarUser, name: String) = useDb {
|
||||
find { ScriptTable.userId eq user.id and (ScriptTable.name eq name) }.firstOrNull()
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun create(user: SteamwarUser, name: String, code: String) = useDb {
|
||||
new {
|
||||
this.userId = user.id.value
|
||||
this.scriptName = name
|
||||
this.scriptCode = code
|
||||
}
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun list(user: SteamwarUser) = useDb {
|
||||
find { ScriptTable.userId eq user.id }.toList()
|
||||
}
|
||||
}
|
||||
|
||||
fun getId() = id.value
|
||||
var userId by ScriptTable.userId.transform({ EntityID(it, SteamwarUserTable) }, { it.value })
|
||||
private var scriptName by ScriptTable.name
|
||||
private var scriptCode by ScriptTable.code
|
||||
|
||||
var name: String
|
||||
get() = scriptName
|
||||
set(value) = useDb { scriptName = value }
|
||||
|
||||
var code: String
|
||||
get() = scriptCode
|
||||
set(value) = useDb { scriptCode = value }
|
||||
|
||||
override fun delete() = useDb { super.delete() }
|
||||
}
|
||||
@@ -1,45 +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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package de.steamwar.sql;
|
||||
|
||||
import de.steamwar.sql.internal.Field;
|
||||
import de.steamwar.sql.internal.Statement;
|
||||
import de.steamwar.sql.internal.Table;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class Session {
|
||||
|
||||
private static final Table<Session> table = new Table<>(Session.class);
|
||||
private static final Statement insert = table.insert(Table.PRIMARY);
|
||||
|
||||
public static void insertSession(int userID, Timestamp startTime){
|
||||
insert.update(userID, startTime);
|
||||
}
|
||||
|
||||
@Field(keys = {Table.PRIMARY})
|
||||
private int userId;
|
||||
@Field(keys = {Table.PRIMARY})
|
||||
private Timestamp startTime;
|
||||
@Field(def = "CURRENT_TIMESTAMP")
|
||||
private Timestamp endTime;
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package de.steamwar.sql
|
||||
|
||||
import de.steamwar.sql.internal.useDb
|
||||
import org.jetbrains.exposed.v1.core.Table
|
||||
import org.jetbrains.exposed.v1.core.dao.id.EntityID
|
||||
import org.jetbrains.exposed.v1.javatime.timestamp
|
||||
import org.jetbrains.exposed.v1.jdbc.insert
|
||||
import java.sql.Timestamp
|
||||
import java.time.Instant
|
||||
|
||||
object SessionTable: Table("Session") {
|
||||
val userId = reference("UserId", SteamwarUserTable)
|
||||
val startTime = timestamp("StartTime")
|
||||
val endTime = timestamp("EndTime").default(Instant.now())
|
||||
}
|
||||
|
||||
class Session {
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun insertSession(userId: Int, startTime: Timestamp) = useDb {
|
||||
SessionTable.insert {
|
||||
it[SessionTable.userId] = EntityID(userId, SteamwarUserTable)
|
||||
it[SessionTable.startTime] = startTime.toInstant()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -39,7 +39,7 @@ import javax.crypto.spec.PBEKeySpec
|
||||
object SteamwarUserTable : IntIdTable("UserData", "id") {
|
||||
val uuid = varchar("UUID", 36)
|
||||
val username = varchar("UserName", 32)
|
||||
val team = integer("Team")
|
||||
val team = reference("Team", TeamTable)
|
||||
val leader = bool("Leader")
|
||||
val locale = varchar("Locale", 16).nullable()
|
||||
val manualLocale = bool("ManualLocale")
|
||||
@@ -155,9 +155,9 @@ class SteamwarUser(id: EntityID<Int>): IntEntity(id) {
|
||||
var userName by SteamwarUserTable.username
|
||||
private var teamInternal by SteamwarUserTable.team
|
||||
var team: Int
|
||||
get() = teamInternal
|
||||
get() = teamInternal.value
|
||||
set(value) = useDb {
|
||||
teamInternal = value
|
||||
teamInternal = EntityID(value, TeamTable)
|
||||
leaderInternal = false
|
||||
}
|
||||
|
||||
|
||||
@@ -1,70 +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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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 java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class TeamTeilnahme {
|
||||
|
||||
private static final Table<TeamTeilnahme> table = new Table<>(TeamTeilnahme.class);
|
||||
private static final SelectStatement<TeamTeilnahme> select = table.select(Table.PRIMARY);
|
||||
private static final SelectStatement<TeamTeilnahme> selectTeams = table.selectFields("EventID");
|
||||
private static final SelectStatement<TeamTeilnahme> selectEvents = table.selectFields("TeamID");
|
||||
private static final Statement insert = table.insert(Table.PRIMARY);
|
||||
private static final Statement delete = table.delete(Table.PRIMARY);
|
||||
private static final Statement deleteFuture = new Statement("DELETE t FROM TeamTeilnahme t INNER JOIN Event e ON t.EventID = e.EventID WHERE t.TeamID = ? AND e.Start > NOW()");
|
||||
|
||||
@Field(keys = {Table.PRIMARY})
|
||||
private final int teamId;
|
||||
@Field(keys = {Table.PRIMARY})
|
||||
private final int eventId;
|
||||
|
||||
public static boolean nimmtTeil(int teamID, int eventID){
|
||||
return select.select(teamID, eventID) != null;
|
||||
}
|
||||
|
||||
public static void teilnehmen(int teamID, int eventID){
|
||||
insert.update(teamID, eventID);
|
||||
}
|
||||
|
||||
public static void notTeilnehmen(int teamID, int eventID){
|
||||
delete.update(teamID, eventID);
|
||||
}
|
||||
|
||||
public static void deleteFuture(int teamID) {
|
||||
deleteFuture.update(teamID);
|
||||
}
|
||||
|
||||
public static Set<Team> getTeams(int eventID){
|
||||
return selectTeams.listSelect(eventID).stream().map(tt -> Team.byId(tt.teamId)).collect(Collectors.toSet()); // suboptimal performance (O(n) database queries)
|
||||
}
|
||||
|
||||
public static Set<Event> getEvents(int teamID){
|
||||
return selectEvents.listSelect(teamID).stream().map(tt -> Event.byId(tt.eventId)).collect(Collectors.toSet()); // suboptimal performance (O(n) database queries)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package de.steamwar.sql
|
||||
|
||||
import de.steamwar.sql.internal.useDb
|
||||
import org.jetbrains.exposed.v1.core.IntegerColumnType
|
||||
import org.jetbrains.exposed.v1.core.and
|
||||
import org.jetbrains.exposed.v1.core.dao.id.CompositeID
|
||||
import org.jetbrains.exposed.v1.core.dao.id.CompositeIdTable
|
||||
import org.jetbrains.exposed.v1.core.dao.id.EntityID
|
||||
import org.jetbrains.exposed.v1.core.eq
|
||||
import org.jetbrains.exposed.v1.dao.CompositeEntity
|
||||
import org.jetbrains.exposed.v1.dao.CompositeEntityClass
|
||||
import org.jetbrains.exposed.v1.jdbc.deleteWhere
|
||||
import org.jetbrains.exposed.v1.jdbc.insertIgnore
|
||||
|
||||
object TeamTeilnahmeTable : CompositeIdTable("TeamTeilnahme") {
|
||||
val teamId = reference("teamId", TeamTable)
|
||||
val eventId = reference("eventId", EventTable)
|
||||
|
||||
override val primaryKey = PrimaryKey(teamId, eventId)
|
||||
|
||||
init {
|
||||
addIdColumn(teamId)
|
||||
addIdColumn(eventId)
|
||||
}
|
||||
}
|
||||
|
||||
class TeamTeilnahme(id: EntityID<CompositeID>) : CompositeEntity(id) {
|
||||
companion object : CompositeEntityClass<TeamTeilnahme>(TeamTeilnahmeTable) {
|
||||
@JvmStatic
|
||||
fun nimmtTeil(teamId: Int, eventId: Int) = useDb {
|
||||
find { (TeamTeilnahmeTable.teamId eq teamId) and (TeamTeilnahmeTable.eventId eq eventId) }.firstOrNull() != null
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun teilnehmen(teamId: Int, eventId: Int) = useDb {
|
||||
TeamTeilnahmeTable.insertIgnore {
|
||||
it[TeamTeilnahmeTable.teamId] = teamId
|
||||
it[TeamTeilnahmeTable.eventId] = eventId
|
||||
}
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun notTeilnehmen(teamId: Int, eventId: Int) = useDb {
|
||||
TeamTeilnahmeTable.deleteWhere { (TeamTeilnahmeTable.teamId eq teamId) and (TeamTeilnahmeTable.eventId eq eventId) }
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun deleteFuture(teamId: Int) = useDb {
|
||||
exec(
|
||||
"DELETE t FROM TeamTeilnahme t INNER JOIN Event e ON t.EventID = e.EventID WHERE t.TeamID = ? AND e.Start > NOW()",
|
||||
args = listOf(IntegerColumnType() to teamId)
|
||||
)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getTeams(eventId: Int) = useDb {
|
||||
find { TeamTeilnahmeTable.eventId eq eventId }.map { it.teamId }
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getEvents(teamId: Int) = useDb {
|
||||
find { TeamTeilnahmeTable.teamId eq teamId }.map { it.eventId }
|
||||
}
|
||||
}
|
||||
|
||||
val teamId by TeamTeilnahmeTable.teamId
|
||||
val eventId by TeamTeilnahmeTable.eventId
|
||||
}
|
||||
Reference in New Issue
Block a user