package nautilus.game.arcade; import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.UUID; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.database.DBPool; import mineplex.core.database.RepositoryBase; import mineplex.database.Tables; import mineplex.database.tables.records.GamesRecord; import org.jooq.DSLContext; import org.jooq.Query; import org.jooq.impl.DSL; public class ArcadeRepository extends RepositoryBase { private final String serverName; public ArcadeRepository(Plugin plugin) { super(plugin, DBPool.ACCOUNT); serverName = plugin.getConfig().getString("serverstatus.name"); } @Override protected void initialize() { } @Override protected void update() { } public void saveBasicStats(GameType type, boolean tournament, int duration, Map players) throws SQLException { try (Connection connection = getConnection()) { DSLContext context = DSL.using(connection); GamesRecord record = context.newRecord(Tables.games); record.setDuration(duration); record.setTournament(tournament); record.setType(type.name()); record.setServer(serverName); record.store(); List queryList = new ArrayList<>(players.size()); for (Map.Entry entry : players.entrySet()) { Query query = context .insertInto(Tables.gamePlayers) .set(Tables.gamePlayers.gameId, record.getId()) .set(Tables.gamePlayers.accountId, DSL.select(Tables.accounts.id) .from(Tables.accounts) .where(Tables.accounts.uuid.eq(entry.getKey().toString()))) .set(Tables.gamePlayers.winner, entry.getValue()); queryList.add(query); } context.batch(queryList).execute(); } } public void saveLeaderboardStats(int tournamentId, int gameId, Map players) throws SQLException { try (Connection connection = getConnection()) { DSLContext context = DSL.using(connection); List queryList = new ArrayList<>(players.size()); for (Map.Entry entry : players.entrySet()) { int winIncrement = entry.getValue() ? 1 : 0; Query query = context .insertInto(Tables.tournamentLeaderboard) .set(Tables.tournamentLeaderboard.tournamentId, tournamentId) .set(Tables.tournamentLeaderboard.gameId, gameId) .set(Tables.tournamentLeaderboard.accountId, DSL.select(Tables.accounts.id) .from(Tables.accounts) .where(Tables.accounts.uuid.eq(entry.getKey().toString()))) .set(Tables.tournamentLeaderboard.wins, winIncrement) .set(Tables.tournamentLeaderboard.total, 1) .onDuplicateKeyUpdate() .set(Tables.tournamentLeaderboard.wins, Tables.tournamentLeaderboard.wins.plus(winIncrement)) .set(Tables.tournamentLeaderboard.total, Tables.tournamentLeaderboard.total.plus(1)); queryList.add(query); } context.batch(queryList).execute(); } } }