CommonDB #46
61
src/de/steamwar/sql/BannedUserIPs.java
Normale Datei
61
src/de/steamwar/sql/BannedUserIPs.java
Normale Datei
@ -0,0 +1,61 @@
|
||||
/*
|
||||
* This file is a part of the SteamWar software.
|
||||
*
|
||||
* Copyright (C) 2023 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.sql.Timestamp;
|
||||
import java.util.List;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class BannedUserIPs {
|
||||
|
||||
private static final Table<BannedUserIPs> table = new Table<>(BannedUserIPs.class);
|
||||
|
||||
private static final SelectStatement<BannedUserIPs> getByID = table.selectFields("UserID");
|
||||
private static final SelectStatement<BannedUserIPs> getByIP = new SelectStatement<>(table, "SELECT * FROM BannedUserIPs WHERE IP = ? ORDER BY Timestamp DESC");
|
||||
private static final Statement banIP = table.insert(Table.PRIMARY);
|
||||
|
||||
@Getter
|
||||
@Field(keys = {Table.PRIMARY})
|
||||
private final int userID;
|
||||
@Getter
|
||||
@Field(def = "CURRENT_TIMESTAMP")
|
||||
private final Timestamp timestamp;
|
||||
@Field(keys = {Table.PRIMARY})
|
||||
private final String ip;
|
||||
|
||||
public static List<BannedUserIPs> get(int userID) {
|
||||
return getByID.listSelect(userID);
|
||||
}
|
||||
|
||||
public static List<BannedUserIPs> get(String ip) {
|
||||
return getByIP.listSelect(ip);
|
||||
}
|
||||
|
||||
public static void banIP(int userID, String ip){
|
||||
banIP.update(userID, ip);
|
||||
}
|
||||
}
|
@ -26,17 +26,41 @@ import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class Event {
|
||||
|
||||
private static final Table<Event> table = new Table<>(Event.class);
|
||||
|
||||
private static final SelectStatement<Event> byCurrent = new SelectStatement<>(table, "SELECT * FROM Event WHERE Start < now() AND End > now()");
|
||||
private static final SelectStatement<Event> byId = table.select(Table.PRIMARY);
|
||||
private static final SelectStatement<Event> byName = table.select("eventName");
|
||||
private static final SelectStatement<Event> byComing = new SelectStatement<>(table, "SELECT * FROM Event WHERE Start > now()");
|
||||
|
||||
private static Event current = null;
|
||||
|
||||
public static Event get(){
|
||||
if(current != null && current.now())
|
||||
return current;
|
||||
|
||||
current = byCurrent.select();
|
||||
return current;
|
||||
}
|
||||
|
||||
public static Event get(int eventID){
|
||||
return byId.select(eventID);
|
||||
}
|
||||
|
||||
public static Event get(String eventName) {
|
||||
return byName.select(eventName);
|
||||
}
|
||||
|
||||
public static List<Event> getComing() {
|
||||
return byComing.listSelect();
|
||||
}
|
||||
|
||||
@Getter
|
||||
@Field(keys = {Table.PRIMARY}, autoincrement = true)
|
||||
private final int eventID;
|
||||
@ -72,4 +96,14 @@ public class Event {
|
||||
public SchematicType getSchematicType() {
|
||||
return schemType;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public String getSchemType() {
|
||||
return schemType.toDB();
|
||||
}
|
||||
|
||||
private boolean now() {
|
||||
Instant now = Instant.now();
|
||||
return now.isAfter(start.toInstant()) && now.isBefore(end.toInstant());
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,8 @@ import de.steamwar.sql.internal.Table;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class Fight {
|
||||
@ -55,6 +57,9 @@ public class Fight {
|
||||
@Field
|
||||
private final String wincondition;
|
||||
|
||||
private final List<FightPlayer> bluePlayers = new ArrayList<>();
|
||||
private final List<FightPlayer> redPlayers = new ArrayList<>();
|
||||
|
||||
public static int create(String gamemode, String server, Timestamp starttime, int duration, int blueleader, int redleader, Integer blueschem, Integer redschem, int win, String wincondition){
|
||||
return insert.insertGetKey(gamemode, server, starttime, duration, blueleader, redleader, blueschem, redschem, win, wincondition);
|
||||
}
|
||||
|
@ -20,20 +20,29 @@
|
||||
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.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class FightPlayer {
|
||||
|
||||
private static final Table<FightPlayer> table = new Table<>(FightPlayer.class);
|
||||
private static final Statement create = table.insertAll();
|
||||
private static final SelectStatement<FightPlayer> batchGet = new SelectStatement<>(table, "SELECT * FROM FightPlayer WHERE FightID IN ?");
|
||||
|
||||
@Getter
|
||||
@Field(keys = {Table.PRIMARY})
|
||||
private final int fightID;
|
||||
@Getter
|
||||
@Field(keys = {Table.PRIMARY})
|
||||
private final int userID;
|
||||
@Getter
|
||||
@Field
|
||||
private final int team;
|
||||
@Field
|
||||
@ -46,4 +55,11 @@ public class FightPlayer {
|
||||
public static void create(int fightID, int userID, boolean blue, String kit, int kills, boolean isOut) {
|
||||
create.update(fightID, userID, blue ? 1 : 2, kit, kills, isOut);
|
||||
}
|
||||
|
||||
public static List<FightPlayer> batchGet(Integer[] fightIds) {
|
||||
if(fightIds.length == 0)
|
||||
return Collections.emptyList();
|
||||
|
||||
return batchGet.listSelect((Object) fightIds);
|
||||
}
|
||||
}
|
||||
|
77
src/de/steamwar/sql/PollAnswer.java
Normale Datei
77
src/de/steamwar/sql/PollAnswer.java
Normale Datei
@ -0,0 +1,77 @@
|
||||
/*
|
||||
* This file is a part of the SteamWar software.
|
||||
*
|
||||
* Copyright (C) 2023 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 lombok.Setter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class PollAnswer {
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private static String currentPoll;
|
||||
|
||||
private static final Table<PollAnswer> table = new Table<>(PollAnswer.class);
|
||||
|
||||
private static final SelectStatement<PollAnswer> get = table.select(Table.PRIMARY);
|
||||
private static final Statement getResults = new Statement("SELECT Count(UserID) AS Times, Answer FROM PollAnswer WHERE Question = ? GROUP BY Answer ORDER BY Times ASC");
|
||||
private static final Statement insert = table.insertAll();
|
||||
|
||||
@Field(keys = {Table.PRIMARY})
|
||||
private final int userID;
|
||||
@Field(keys = {Table.PRIMARY})
|
||||
private final String question;
|
||||
@Field(def = "0")
|
||||
private int answer;
|
||||
|
||||
public static PollAnswer get(int userID) {
|
||||
PollAnswer answer = get.select(userID, currentPoll);
|
||||
if(answer == null)
|
||||
return new PollAnswer(userID, currentPoll, 0);
|
||||
return answer;
|
||||
}
|
||||
|
||||
public static Map<Integer, Integer> getCurrentResults() {
|
||||
return getResults.select(rs -> {
|
||||
Map<Integer, Integer> retMap = new HashMap<>();
|
||||
while (rs.next())
|
||||
retMap.put(rs.getInt("Answer")-1, rs.getInt("Times"));
|
||||
return retMap;
|
||||
}, currentPoll);
|
||||
}
|
||||
|
||||
public boolean hasAnswered(){
|
||||
return answer != 0;
|
||||
}
|
||||
|
||||
public void setAnswer(int answer){
|
||||
this.answer = answer;
|
||||
insert.update(userID, question, answer);
|
||||
}
|
||||
}
|
45
src/de/steamwar/sql/Session.java
Normale Datei
45
src/de/steamwar/sql/Session.java
Normale Datei
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* This file is a part of the SteamWar software.
|
||||
*
|
||||
* Copyright (C) 2023 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;
|
||||
}
|
@ -25,14 +25,23 @@ 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<Integer, Team> teamCache = new HashMap<>();
|
||||
|
||||
public static void clear() {
|
||||
teamCache.clear();
|
||||
}
|
||||
|
||||
private static final Table<Team> table = new Table<>(Team.class);
|
||||
private static final SelectStatement<Team> select = table.select(Table.PRIMARY);
|
||||
private static final SelectStatement<Team> byId = table.select(Table.PRIMARY);
|
||||
private static final SelectStatement<Team> byName = new SelectStatement<>(table, "SELECT * FROM Team WHERE (lower(TeamName) = ? OR lower(TeamKuerzel) = ?) AND NOT TeamDeleted");
|
||||
|
||||
@Field(keys = {Table.PRIMARY})
|
||||
@Getter
|
||||
@ -46,13 +55,22 @@ public class Team {
|
||||
@Field(def = "'8'")
|
||||
@Getter
|
||||
private final String teamColor;
|
||||
|
||||
private static final Team pub = new Team(0, "PUB", "Öffentlich", "8");
|
||||
@Field(nullable = true)
|
||||
private String address;
|
||||
@Field(def = "'25565'")
|
||||
private int port;
|
||||
@Field(def = "0")
|
||||
private boolean teamDeleted;
|
||||
|
||||
public static Team get(int id) {
|
||||
if(id == 0)
|
||||
return pub;
|
||||
return select.select(id);
|
||||
return teamCache.computeIfAbsent(id, byId::select);
|
||||
//TODOs: BungeeCore flush caches
|
||||
//TODOs: Team public removal test
|
||||
//TODOs: ArraySelect test
|
||||
}
|
||||
|
||||
public static Team get(String name){
|
||||
return byName.select(name, name);
|
||||
}
|
||||
|
||||
public List<Integer> getMembers(){
|
||||
|
@ -21,6 +21,7 @@ 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;
|
||||
|
||||
@ -34,6 +35,9 @@ public class TeamTeilnahme {
|
||||
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;
|
||||
@ -44,6 +48,18 @@ public class TeamTeilnahme {
|
||||
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.get(tt.teamId)).collect(Collectors.toSet()); // suboptimal performance (O(n) database queries)
|
||||
}
|
||||
|
@ -1,21 +1,21 @@
|
||||
/*
|
||||
This file is a part of the SteamWar software.
|
||||
|
||||
Copyright (C) 2020 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/>.
|
||||
*/
|
||||
/*
|
||||
* This file is a part of the SteamWar software.
|
||||
*
|
||||
* Copyright (C) 2023 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;
|
||||
|
||||
@ -24,22 +24,35 @@ import lombok.Getter;
|
||||
|
||||
@AllArgsConstructor
|
||||
public enum UserGroup {
|
||||
Admin("§4", "§e", true, true, true),
|
||||
Developer("§3", "§f", true, true, true),
|
||||
Moderator("§c", "§f", true, true, true),
|
||||
Supporter("§9", "§f", false, true, true),
|
||||
Builder("§2", "§f", false, true, false),
|
||||
YouTuber("§5", "§f", false, false, false),
|
||||
Member("§7", "§7", false, false, false);
|
||||
Admin("§4", "§e", "Admin", true, true, true, true),
|
||||
Developer("§3", "§f", "Dev", true, true, true, true),
|
||||
Moderator("§c", "§f", "Mod", true, true, true, true),
|
||||
Supporter("§9", "§f", "Sup", false, true, true, true),
|
||||
Builder("§2", "§f", "Arch", false, true, false, true),
|
||||
YouTuber("§5", "§f", "YT", false, false, false, true),
|
||||
Member("§7", "§7", "", false, false, false, false);
|
||||
|
||||
@Getter
|
||||
private final String colorCode;
|
||||
@Getter
|
||||
private final String chatColorCode;
|
||||
@Getter
|
||||
private final boolean adminGroup;
|
||||
@Getter
|
||||
private final boolean teamGroup;
|
||||
@Getter
|
||||
private final boolean checkSchematics;
|
||||
@Getter
|
||||
private final String colorCode;
|
||||
@Getter
|
||||
private final String chatColorCode;
|
||||
@Getter
|
||||
private final String chatPrefix;
|
||||
@Getter
|
||||
private final boolean adminGroup;
|
||||
@Getter
|
||||
private final boolean teamGroup;
|
||||
@Getter
|
||||
private final boolean checkSchematics;
|
||||
@Getter
|
||||
private final boolean privilegedMods;
|
||||
|
||||
public static UserGroup getUsergroup(String name) {
|
||||
for(UserGroup group : values()) {
|
||||
if(group.name().equalsIgnoreCase(name))
|
||||
return group;
|
||||
}
|
||||
|
||||
throw new IllegalArgumentException(name);
|
||||
}
|
||||
}
|
@ -65,6 +65,7 @@ public final class SqlTypeMapper<T> {
|
||||
new SqlTypeMapper<>(String.class, "TEXT", ResultSet::getString, PreparedStatement::setString);
|
||||
new SqlTypeMapper<>(Timestamp.class, "TIMESTAMP", ResultSet::getTimestamp, PreparedStatement::setTimestamp);
|
||||
new SqlTypeMapper<>(InputStream.class, "BLOB", ResultSet::getBinaryStream, PreparedStatement::setBinaryStream);
|
||||
new SqlTypeMapper<>(Integer[].class, null, (rs, identifier) -> { throw new SecurityException("Arrays cannot be used as type (recursive select)"); }, (st, index, value) -> st.setArray(index, st.getConnection().createArrayOf("INTEGER", value)));
|
||||
}
|
||||
|
||||
private static <T> void primitiveMapper(Class<T> primitive, Class<T> wrapped, String sqlType, SQLReader<T> reader, SQLWriter<T> writer) {
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren