Reformat Galleries with a builder

This commit is contained in:
Aleksei 2020-07-23 19:40:38 -04:00
parent 7ce2f97acf
commit 7abd82f77a
3 changed files with 78 additions and 44 deletions

View File

@ -29,12 +29,12 @@ public class CreateGalleryCommand extends Command { // TODO: This command needs
@Override public Collection<String> aliases() { return new ArrayList<>(Arrays.asList("creategallery", "addgallery", "newgallery")); }
@Override
public void onCommand(CommandContext ctx) { // TODO: Might need some logic help...
public void onCommand(CommandContext ctx) {
if (ctx.isPrivateMessage()) {
ctx.reply("This command can only be used in a server!"); // TODO: Stop this. Turn this into a preset no-no embed.
return;
}
if (ctx.getArgs().length != 1) {
if (ctx.getArgs().length < 1) {
ctx.reply("Args are incorrect");
return;
}
@ -50,27 +50,25 @@ public class CreateGalleryCommand extends Command { // TODO: This command needs
String tag = ctx.getArgs()[0];
GalleryChannel gallery = new GalleryChannel();
gallery.channelId = channelId;
gallery.tag = tag;
gallery.emoji = ":heartpulse:";
GalleryChannel.GalleryBuilder galleryBuilder = new GalleryChannel.GalleryBuilder();
galleryBuilder.setChannelId(channelId);
galleryBuilder.setTag(tag);
galleryBuilder.setEmoji(":heartpulse:");
ctx.getServer().ifPresent(server -> {
gallery.serverId = server.getIdAsString();
gallery.serverName = server.getName();
galleryBuilder.setServerId(server.getIdAsString());
galleryBuilder.setServerName(server.getName());
});
ctx.getChannel().asServerTextChannel().ifPresent(channel -> gallery.channelName = channel.getName());
GalleryChannel gallery = galleryBuilder.build();
GalleryController.insert(gallery).exceptionally(ExceptionLogger.get()); // TODO: Make a discord exception logger for the thingos
EmbedBuilder embed = new EmbedBuilder()
.setColor(Color.GREEN)
.addField("Success", "Gallery has been created:")
.addField("Channel Name:", gallery.channelName)
.addField("Channel Id:", gallery.channelId)
.addField("Channel Id:", gallery.getChannelId())
.addField("Tag:", tag)
.addField("Emoji:", EmojiManager.getByUnicode(gallery.emoji).toString())
.addField("Emoji:", EmojiManager.getByUnicode(gallery.getEmoji()).toString())
.addField("End:", String.format("This channel is now being tracked under: %s", tag));
ctx.getChannel().sendMessage(embed);
}

View File

@ -57,14 +57,13 @@ public class GalleryController {
}
// TODO: Refactor for proper Java-ing, add GalleryBuilder
private static void insertExec(GalleryChannel gallery) throws SQLException {
FSDB.get().insert("INSERT INTO galleries('server_id', 'server_name', 'channel_id', 'channel_name', 'tag', 'emoji')" +
FSDB.get().insert("INSERT INTO galleries('server_id', 'server_name', 'channel_id', 'tag', 'emoji')" +
"VALUES(?, ?, ?, ?, ?)",
gallery.serverId,
gallery.serverName,
gallery.channelId,
gallery.channelName,
gallery.tag,
gallery.emoji
gallery.getServerId(),
gallery.getChannelId(),
gallery.getChannelId(),
gallery.getTag(),
gallery.getEmoji()
);
}
@ -105,14 +104,12 @@ public class GalleryController {
}
private static GalleryChannel mapObject(ResultSet rs) throws SQLException { // TODO: Builder this
GalleryChannel gallery = new GalleryChannel();
gallery.serverId = rs.getString("server_id");
gallery.serverName = rs.getString("server_name");
gallery.channelId = rs.getString("channel_id");
gallery.channelName = rs.getString("channel_name");
gallery.tag = rs.getString("tag");
gallery.emoji = rs.getString("emoji");
return gallery;
return new GalleryChannel.GalleryBuilder()
.setServerId(rs.getString("server_id"))
.setServerName(rs.getString("server_name"))
.setChannelId(rs.getString("channel_id"))
.setTag(rs.getString("tag"))
.setEmoji(rs.getString("emoji"))
.build();
}
}

View File

@ -8,18 +8,21 @@ package dev.salmonllama.fsbot.database.models;
import dev.salmonllama.fsbot.database.DatabaseModel;
public class GalleryChannel extends DatabaseModel {
public String serverId;
public String serverName;
public String channelId;
public String channelName;
public String tag;
private final String serverId;
private final String serverName;
private final String channelId;
private final String tag;
// Normal emojis will be stored in plain text as :emoji:
// Server emojis will be stored in plain text as <:emoji:emoji-id>
// This can be acquired through CustomEmoji#getMentionTag()
public String emoji;
public GalleryChannel() {
private final String emoji;
public GalleryChannel(GalleryBuilder builder) {
serverId = builder.serverId;
serverName = builder.serverName;
channelId = builder.channelId;
tag = builder.tag;
emoji = builder.emoji;
}
public String getServerId() {
@ -34,9 +37,6 @@ public class GalleryChannel extends DatabaseModel {
return channelId;
}
public String getChannelName() {
return channelName;
}
public String getTag() {
return tag;
@ -50,15 +50,54 @@ public class GalleryChannel extends DatabaseModel {
return "CREATE TABLE IF NOT EXISTS galleries (" +
"server_id TEXT," +
"server_name TEXT," +
"channel_id TEXT," + // TODO: PRIMARY KEY? There can only be one gallery per channel.
"channel_name TEXT," +
"channel_id TEXT," +
"emoji TEXT," +
"tag TEXT)";
}
@Override
public String toString() {
return String.format("Gallery: [server id: %s, server name: %s, channel id: %s, channel name: %s, tag: %s, emoji: %s]",
serverId, serverName, channelId, channelName, tag, emoji);
return String.format("Gallery: [server id: %s, server name: %s, channel id: %s, tag: %s, emoji: %s]",
serverId, serverName, channelId, tag, emoji);
}
public static class GalleryBuilder {
private String serverId;
private String serverName;
private String channelId;
private String tag;
private String emoji;
public GalleryBuilder() {
}
public GalleryBuilder setServerId(String serverId) {
this.serverId = serverId;
return this;
}
public GalleryBuilder setServerName(String serverName) {
this.serverName = serverName;
return this;
}
public GalleryBuilder setChannelId(String channelId) {
this.channelId = channelId;
return this;
}
public GalleryBuilder setTag(String tag) {
this.tag = tag;
return this;
}
public GalleryBuilder setEmoji(String emoji) {
this.emoji = emoji;
return this;
}
public GalleryChannel build() {
return new GalleryChannel(this);
}
}
}