Refactored database access methods

This commit is contained in:
anthorob committed 2021-11-07 00:28:44 -04:00
1 parent 65143eb003
commit 41cb8f4b8f
8 files changed
+52 -159

No files matched your search

@@ -62,9 +62,7 @@ public class MysqlDatabase {
* @param query The SQL query to execute * @param query The SQL query to execute
* @return {@link ResultSet} * @return {@link ResultSet}
*/ */
public ResultSet query(String query) { protected ResultSet query(String query) {
logger.debug("Query: " + query);
Statement stmt; Statement stmt;
try { try {
stmt = connection.createStatement(); stmt = connection.createStatement();
@@ -84,7 +82,7 @@ public class MysqlDatabase {
* @param params The parameters to include in the query * @param params The parameters to include in the query
* @return an integer of how many row were affected * @return an integer of how many row were affected
*/ */
public synchronized int update(String sql, Object... params) { protected synchronized int update(String sql, Object... params) {
return executeUpdate(sql, params); return executeUpdate(sql, params);
} }
@@ -96,7 +94,7 @@ public class MysqlDatabase {
* @param params The parameters to include in the query * @param params The parameters to include in the query
* @return an integer of how many row were affected * @return an integer of how many row were affected
*/ */
public synchronized int insert(String sql, Object... params) { protected synchronized int insert(String sql, Object... params) {
return executeUpdate(sql, params); return executeUpdate(sql, params);
} }
@@ -108,7 +106,7 @@ public class MysqlDatabase {
* @param params The parameters to include in the query * @param params The parameters to include in the query
* @return an integer of how many row were affected * @return an integer of how many row were affected
*/ */
public synchronized int delete(String sql, Object... params) { protected synchronized int delete(String sql, Object... params) {
return executeUpdate(sql, params); return executeUpdate(sql, params);
} }
@@ -139,7 +137,7 @@ public class MysqlDatabase {
* @param params The parameters to include in the query * @param params The parameters to include in the query
* @return a ResultSet object, which can be converted to a model using {@link MysqlDatabase#convertToTableModel(ResultSet)} * @return a ResultSet object, which can be converted to a model using {@link MysqlDatabase#convertToTableModel(ResultSet)}
*/ */
public synchronized ResultSet prepareAndExecute(String sql, Object... params) { protected synchronized ResultSet prepareAndExecute(String sql, Object... params) {
try { try {
PreparedStatement query = connection.prepareStatement(sql); PreparedStatement query = connection.prepareStatement(sql);
@@ -212,7 +210,7 @@ public class MysqlDatabase {
* @throws SQLException * @throws SQLException
*/ */
public void close() throws SQLException { public void close() throws SQLException {
logger.info("Closing database..."); System.out.println("Closing database...");
connection.close(); connection.close();
} }
@@ -250,8 +248,9 @@ public class MysqlDatabase {
* @param rs The ResultSet returned by the SELECT query * @param rs The ResultSet returned by the SELECT query
* @return a {@link MTableModel} with the appropriate column and rows * @return a {@link MTableModel} with the appropriate column and rows
*/ */
public static MTableModel convertToTableModel(ResultSet rs, String tableName) { protected static MTableModel convertToTableModel(ResultSet rs, String tableName) {
MTableModel table = new MTableModel(); MTableModel table = new MTableModel();
table.setName(tableName);
try { try {
ResultSetMetaData metadata = rs.getMetaData(); ResultSetMetaData metadata = rs.getMetaData();
@@ -275,33 +274,4 @@ public class MysqlDatabase {
return table; return table;
} }
/**
* @param rs The ResultSet returned by the SELECT query
* @return a {@link MTableModel} with the appropriate column and rows
*/
public static MTableModel convertToTableModel(ResultSet rs) {
MTableModel table = new MTableModel();
try {
ResultSetMetaData metadata = rs.getMetaData();
for (int i = 1; i < metadata.getColumnCount() + 1; i++) {
table.addColumn(metadata.getColumnName(i));
}
while (rs.next()) {
MRowModel row = new MRowModel();
for (int i = 0; i < metadata.getColumnCount(); i++) {
row.addColumnToRow(rs.getObject(i + 1));
}
table.addRow(row);
}
} catch (SQLException e) {
e.printStackTrace();
}
return table;
}
} }
@@ -5,11 +5,16 @@ package netneutrality.db.controllers;/*
* https://discord.gg/CdFcyQ * https://discord.gg/CdFcyQ
*/ */
import net.dv8tion.jda.api.entities.Guild;
import netneutrality.db.AbstractController; import netneutrality.db.AbstractController;
public class DBGuild extends AbstractController { public class DBGuild extends AbstractController {
public void insertGuildInDB(Guild g) {
if (!database.exists("guilds", "guild_id", g.getId())) {
database.prepareAndExecuteAsync("INSERT INTO guilds VALUES(?, ?, ?)", g.getId(), "0", null).blocking();
}
}
@Override @Override
public String getControllerName() { public String getControllerName() {
@@ -13,6 +13,7 @@ import netneutrality.MusicBot;
import netneutrality.ThreadManager; import netneutrality.ThreadManager;
import netneutrality.db.AbstractController; import netneutrality.db.AbstractController;
import netneutrality.db.DBController; import netneutrality.db.DBController;
import netneutrality.db.models.MTableModel;
import netneutrality.handler.LogHandler; import netneutrality.handler.LogHandler;
import java.sql.ResultSet; import java.sql.ResultSet;
@@ -21,27 +22,9 @@ import java.util.function.Consumer;
public class DBLogging extends AbstractController { public class DBLogging extends AbstractController {
public void logGuild(Guild g) {
ThreadManager.getExecutor("db-action").submit(() -> {
if (!database.exists("guilds", "guild_id", g.getId())) {
database.insert("INSERT INTO guilds VALUES(?, ?, ?)", g.getId(), g.getName(), g.getOwner().getUser().getName());
}
});
}
public void getLoggingChannel(String serverId, Consumer<TextChannel> success) { public void getLoggingChannel(String serverId, Consumer<TextChannel> success) {
database.prepareAndExecuteAsync("SELECT channelId FROM logging WHERE serverId = ?", serverId).async((table) -> {
ThreadManager.getExecutor("db-action").submit(() -> { TextChannel txt = MusicBot.getJDA().getGuildById(serverId).getTextChannelById((String) table.getRow(0).get(0));
TextChannel txt = null;
ResultSet rs = database.prepareAndExecute("SELECT channelId FROM logging WHERE serverId = ?", serverId);
try {
if (rs.next()) {
txt = MusicBot.getJDA().getGuildById(serverId).getTextChannelById(rs.getString(1));
}
} catch (SQLException e) {
e.printStackTrace();
}
success.accept(txt); success.accept(txt);
}); });
@@ -49,26 +32,17 @@ public class DBLogging extends AbstractController {
} }
public void setupLog(String serverId, String channelId) { public void setupLog(String serverId, String channelId) {
database.insert("INSERT INTO logging VALUES(?,?,?)", serverId, channelId, true); database.prepareAndExecuteAsync("INSERT INTO logging VALUES(?,?,?)", serverId, channelId, true).blocking();
} }
public void toggleLog(String serverId, String channelId) { public void toggleLog(String serverId, String channelId) {
database.update("UPDATE logging SET enabled = NOT enabled"); database.prepareAndExecuteAsync("UPDATE logging SET enabled = NOT enabled WHERE serverId = ? AND channelId = ?", serverId, channelId).blocking();
} }
public boolean isLoggingEnabled(String serverId, String channelId) { public boolean isLoggingEnabled(String serverId, String channelId) {
MTableModel table = database.prepareAndExecuteAsync("SELECT enabled FROM logging WHERE serverId = ? AND channelId = ?", serverId, channelId).blocking();
try { return Boolean.parseBoolean((String) table.getRow(0).get(0));
ResultSet rs = database.prepareAndExecute("SELECT enabled FROM logging WHERE serverId = ? AND channelId = ?", serverId, channelId);
if (rs.next()) {
return rs.getBoolean(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return false;
} }
@Override @Override
@@ -36,15 +36,14 @@ public class DBMessage extends AbstractController {
} }
public void log(Guild guild, TextChannel channel, User author, Message message) { public void log(Guild guild, TextChannel channel, User author, Message message) {
String servername = guild.getId(); String serverid = guild.getId();
String channelname = channel.getName(); String channelid = channel.getId();
String username = author.getName(); String userid = author.getId();
String datesent = message.getTimeCreated().format(DateTimeFormatter.ofPattern(Settings.getInstance().DATETIMEFORMAT)); String datesent = message.getTimeCreated().format(DateTimeFormatter.ofPattern(Settings.getInstance().DATETIMEFORMAT));
String messageid = message.getId(); String messageid = message.getId();
String msg = message.getContentRaw().trim(); String msg = message.getContentRaw().trim();
database.prepareAndExecuteAsync("INSERT INTO log_message VALUES(?,?,?,?,?,?,?)", servername, channelname, username, datesent, messageid, msg, null).async(); database.prepareAndExecuteAsync("INSERT INTO log_message VALUES(?,?,?,?,?,?,?)", serverid, channelid, userid, datesent, messageid, msg, null).async();
} }
public void logEdit(String messageId, String newMessage) { public void logEdit(String messageId, String newMessage) {
@@ -53,18 +52,16 @@ public class DBMessage extends AbstractController {
} }
public MMessage getMessage(String messageId) { public MMessage getMessage(String messageId) {
ResultSet rs = database.prepareAndExecute("SELECT * FROM log_message WHERE messageId = ?", messageId); MTableModel table = database.prepareAndExecuteAsync("SELECT * FROM log_message WHERE messageId = ?", messageId).blocking();
MTableModel table = MysqlDatabase.convertToTableModel(rs);
if (table.getNbRows() > 0) { if (table.getNbRows() > 0) {
return new MMessage(table.getRowModel(0)); return new MMessage(table.getRowModel(0));
} }
return null; return null;
} }
public void getMessagesFromUser(String username, String serverName, int max, Consumer<ArrayList<MMessage>> success) { public void getMessagesFromUser(String username, String serverName, int max, Consumer<ArrayList<MMessage>> success) {
database.prepareAndExecuteAsync("SELECT * FROM log_message WHERE userName = ? AND serverName = ? ORDER BY dateSent DESC LIMIT ?", username, serverName, max).async(table -> { database.prepareAndExecuteAsync("SELECT * FROM log_message WHERE userId = ? AND serverId = ? ORDER BY dateSent DESC LIMIT ?", username, serverName, max).async(table -> {
ArrayList<MMessage> messages = new ArrayList<>(); ArrayList<MMessage> messages = new ArrayList<>();
if (table.getNbRows() > 0) { if (table.getNbRows() > 0) {
@@ -82,32 +79,20 @@ public class DBMessage extends AbstractController {
public ArrayList<MMessage> getMessagesFromUser(String username, String serverName, int max) { public ArrayList<MMessage> getMessagesFromUser(String username, String serverName, int max) {
ArrayList<MMessage> messages = new ArrayList<>(); ArrayList<MMessage> messages = new ArrayList<>();
ResultSet rs = database.prepareAndExecute("SELECT * FROM log_message WHERE userName = ? AND serverName = ? ORDER BY dateSent DESC LIMIT ?", username, serverName, max); MTableModel table = database.prepareAndExecuteAsync("SELECT * FROM log_message WHERE userId = ? AND serverId = ? ORDER BY dateSent DESC LIMIT ?", username, serverName, max).blocking();;
MTableModel table = MysqlDatabase.convertToTableModel(rs);
if (table.getNbRows() > 0) { if (table.getNbRows() > 0) {
for (int row = 0; row < max; row++) { for (int row = 0; row < max; row++) {
messages.add(new MMessage(table.getRowModel(row))); messages.add(new MMessage(table.getRowModel(row)));
} }
} }
return messages; return messages;
} }
public String getMessageString(String messageId) { public String getMessageString(String messageId) {
MTableModel table = database.prepareAndExecuteAsync("SELECT message FROM log_message WHERE messageId = ?", messageId).blocking();
try { return (String) table.getRowModel(0).getItem(0);
ResultSet rs = database.prepareAndExecute("SELECT message FROM log_message WHERE messageId = ?", messageId);
if (rs.next()) {
return rs.getString(1);
}
} catch (SQLException e) {
logger.error(e.getMessage());
LogHandler.log(e);
}
return "No message found";
} }
@@ -2,27 +2,16 @@ package netneutrality.db.models;
public class MMessage { public class MMessage {
private String serverName; private final String serverId;
private String channelName; private final String channelName;
private String sender; private final String sender;
private String dateSent; private final String dateSent;
private String messageId; private final String messageId;
private String message; private final String message;
private String editedMessage; private final String editedMessage;
public MMessage(String serverName, String channelName, String sender, String dateSent, String messageId,
String message) {
this.serverName = serverName;
this.channelName = channelName;
this.sender = sender;
this.dateSent = dateSent;
this.messageId = messageId;
this.message = message;
this.editedMessage = "";
}
public MMessage(MRowModel row) { public MMessage(MRowModel row) {
this.serverName = (String) row.getItem(0); this.serverId = (String) row.getItem(0);
this.channelName = (String) row.getItem(1); this.channelName = (String) row.getItem(1);
this.sender = (String) row.getItem(2); this.sender = (String) row.getItem(2);
this.dateSent = (String) row.getItem(3); this.dateSent = (String) row.getItem(3);
@@ -31,75 +20,37 @@ public class MMessage {
this.editedMessage = ""; this.editedMessage = "";
} }
public MMessage(Object serverName, Object channelName, Object sender, Object dateSent, Object messageId, Object message) { public String getServerId() {
this.serverName = (String) serverName; return serverId;
this.channelName = (String) channelName;
this.sender = (String) sender;
this.dateSent = (String) dateSent;
this.messageId = (String) messageId;
this.message = (String) message;
this.editedMessage = "";
}
public String getServerName() {
return serverName;
}
public void setServerName(String serverName) {
this.serverName = serverName;
} }
public String getChannelName() { public String getChannelName() {
return channelName; return channelName;
} }
public void setChannelName(String channelName) {
this.channelName = channelName;
}
public String getSender() { public String getSender() {
return sender; return sender;
} }
public void setSender(String sender) {
this.sender = sender;
}
public String getDateSent() { public String getDateSent() {
return dateSent; return dateSent;
} }
public void setDateSent(String dateSent) {
this.dateSent = dateSent;
}
public String getMessageId() { public String getMessageId() {
return messageId; return messageId;
} }
public void setMessageId(String messageId) {
this.messageId = messageId;
}
public String getMessage() { public String getMessage() {
return message; return message;
} }
public void setMessage(String message) {
this.message = message;
}
public String getEditedMessage() { public String getEditedMessage() {
return editedMessage; return editedMessage;
} }
public void setEditedMessage(String editedMessage) {
this.editedMessage = editedMessage;
}
@Override @Override
public String toString() { public String toString() {
return "MMessage [serverName=" + serverName + ", channelName=" + channelName + ", sender=" + sender return "MMessage [serverName=" + serverId + ", channelName=" + channelName + ", sender=" + sender
+ ", dateSent=" + dateSent + ", messageId=" + messageId + ", message=" + message + ", editedMessage=" + ", dateSent=" + dateSent + ", messageId=" + messageId + ", message=" + message + ", editedMessage="
+ editedMessage + "]"; + editedMessage + "]";
} }
@@ -9,6 +9,7 @@ import netneutrality.db.DBController;
import netneutrality.db.MysqlDatabase; import netneutrality.db.MysqlDatabase;
import netneutrality.db.controllers.DBMessage; import netneutrality.db.controllers.DBMessage;
import netneutrality.db.controllers.DBSettings; import netneutrality.db.controllers.DBSettings;
import netneutrality.db.models.MTableModel;
public class EditHandler extends ListenerAdapter { public class EditHandler extends ListenerAdapter {
@@ -17,7 +18,9 @@ public class EditHandler extends ListenerAdapter {
if (event.getAuthor().isBot()) return; if (event.getAuthor().isBot()) return;
Object logChannel = MysqlDatabase.convertToTableModel(DBController.get().prepareAndExecute("SELECT channelId FROM logging WHERE serverId = ? AND enabled = 1", event.getGuild().getId())).getRowModel(0).getItem(0); MTableModel table = DBController.get().prepareAndExecuteAsync("SELECT channelId FROM logging WHERE serverId = ? AND enabled = 1", event.getGuild().getId()).blocking();
Object logChannel = table.getRowModel(0).getItem(0);
if (logChannel != null) { if (logChannel != null) {
String originalMessage = ((DBMessage) DBController.get("message")).getMessageString(event.getMessage().getId()); String originalMessage = ((DBMessage) DBController.get("message")).getMessageString(event.getMessage().getId());
((DBMessage) DBController.get("message")).logEdit(event.getMessage().getId(), event.getMessage().getContentDisplay()); ((DBMessage) DBController.get("message")).logEdit(event.getMessage().getId(), event.getMessage().getContentDisplay());
@@ -50,6 +50,7 @@ public class NewCommandListener extends ListenerAdapter {
if (msg.startsWith(Settings.getInstance().get("BOT_PREFIX", "$"))) { if (msg.startsWith(Settings.getInstance().get("BOT_PREFIX", "$"))) {
msg = msg.substring(Settings.getInstance().get("BOT_PREFIX", "$").length()); msg = msg.substring(Settings.getInstance().get("BOT_PREFIX", "$").length());
String cmd = msg.split(" ", 2)[0]; String cmd = msg.split(" ", 2)[0];
String[] args = msg.replaceFirst("(" + cmd + ")( )?", "").split(" ");
if (CommandManager.commands.containsKey(cmd) || CommandManager.commandsAlias.containsKey(cmd)) { if (CommandManager.commands.containsKey(cmd) || CommandManager.commandsAlias.containsKey(cmd)) {
@@ -62,7 +63,7 @@ public class NewCommandListener extends ListenerAdapter {
} }
} }
c.execute(event, msg.replaceFirst("(" + cmd + ")( )?", "")); c.execute(event, args);
} }
} }
} else { } else {
@@ -9,13 +9,17 @@ package netneutrality.handler;
import net.dv8tion.jda.api.events.guild.GuildJoinEvent; import net.dv8tion.jda.api.events.guild.GuildJoinEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter; import net.dv8tion.jda.api.hooks.ListenerAdapter;
import netneutrality.db.DBController;
import netneutrality.db.controllers.DBGuild;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public class ServerJoinHandler extends ListenerAdapter { public class ServerJoinHandler extends ListenerAdapter {
@Override @Override
public void onGuildJoin(@NotNull GuildJoinEvent event){ public void onGuildJoin(@NotNull GuildJoinEvent event){
if (!DBController.get().exists("guilds", "guild_id", event.getGuild().getId())) {
((DBGuild) DBController.get("guild")).insertGuildInDB(event.getGuild());
}
} }