/* 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 . */ 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.*; 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 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 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 Queue fights = new PriorityQueue<>(); public static EventFight get(int fightID) { return byId.select(fightID); } public static void loadAllComingFights() { fights.clear(); fights.addAll(allComing.listSelect()); } public static List getEvent(int eventID) { return event.listSelect(eventID); } public static Queue getFights() { return fights; } @Getter @Field private final int eventID; @Getter @Field(keys = {Table.PRIMARY}, autoincrement = true) private final int fightID; @Getter @Field private Timestamp startTime; @Getter @Field private final String spielmodus; @Getter @Field private final String map; @Getter @Field private final int teamBlue; @Getter @Field private final int teamRed; @Getter @Field private final int kampfleiter; @Getter @Field(def = "0") private int ergebnis; @Field(nullable = true) private int fight; 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 boolean hasFinished() { return fight != 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); } }