From 73e41b6c9799cd1dbee7d2c3c91a5853c68338e0 Mon Sep 17 00:00:00 2001 From: Aleksei Date: Sun, 28 Jun 2020 12:07:31 -0400 Subject: [PATCH] Added user blacklisting --- .../dev/salmonllama/fsbot/database/FSDB.java | 6 +- .../controllers/UserBlacklistController.java | 123 ++++++++++++++++++ .../fsbot/database/models/UserBlacklist.java | 70 ++++++++++ 3 files changed, 195 insertions(+), 4 deletions(-) create mode 100644 src/main/java/dev/salmonllama/fsbot/database/controllers/UserBlacklistController.java create mode 100644 src/main/java/dev/salmonllama/fsbot/database/models/UserBlacklist.java diff --git a/src/main/java/dev/salmonllama/fsbot/database/FSDB.java b/src/main/java/dev/salmonllama/fsbot/database/FSDB.java index 91b8023..b940eec 100644 --- a/src/main/java/dev/salmonllama/fsbot/database/FSDB.java +++ b/src/main/java/dev/salmonllama/fsbot/database/FSDB.java @@ -7,10 +7,7 @@ package dev.salmonllama.fsbot.database; import dev.salmonllama.fsbot.config.BotConfig; -import dev.salmonllama.fsbot.database.models.GalleryChannel; -import dev.salmonllama.fsbot.database.models.Outfit; -import dev.salmonllama.fsbot.database.models.ServerBlacklist; -import dev.salmonllama.fsbot.database.models.ServerConfig; +import dev.salmonllama.fsbot.database.models.*; import java.sql.SQLException; import java.util.HashMap; @@ -45,6 +42,7 @@ public class FSDB { get().query(GalleryChannel.schema()); get().query(ServerConfig.schema()); get().query(ServerBlacklist.schema()); + get().query(UserBlacklist.schema()); } catch (SQLException e) { e.printStackTrace(); } diff --git a/src/main/java/dev/salmonllama/fsbot/database/controllers/UserBlacklistController.java b/src/main/java/dev/salmonllama/fsbot/database/controllers/UserBlacklistController.java new file mode 100644 index 0000000..d6dbec3 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/database/controllers/UserBlacklistController.java @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.database.controllers; + +import dev.salmonllama.fsbot.database.FSDB; +import dev.salmonllama.fsbot.database.models.ServerBlacklist; +import dev.salmonllama.fsbot.database.models.UserBlacklist; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.Optional; +import java.util.OptionalDouble; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionException; + +public class UserBlacklistController { + // Need to create, read, and delete. No need for update? + // Exists, insert, get, delete + public static CompletableFuture insert(UserBlacklist bl) { + return CompletableFuture.runAsync(() -> { + try { + insertExec(bl); + } catch (SQLException e) { + throw new CompletionException(e); + } + }); + } + + public static CompletableFuture exists(String id) { + return CompletableFuture.supplyAsync(() -> { + try { + return existsExec(id); + } catch (SQLException e) { + throw new CompletionException(e); + } + }); + } + + public static CompletableFuture exists(UserBlacklist bl) { + return CompletableFuture.supplyAsync(() -> { + try { + return existsExec(bl.getId()); + } catch (SQLException e) { + throw new CompletionException(e); + } + }); + } + + public static CompletableFuture> get(String id) { + return CompletableFuture.supplyAsync(() -> { + try { + return getExec(id); + } catch (SQLException e) { + throw new CompletionException(e); + } + }); + } + + + public static CompletableFuture delete(String id) { + return CompletableFuture.runAsync(() -> { + try { + deleteExec(id); + } catch (SQLException e) { + throw new CompletionException(e); + } + }); + } + + public static CompletableFuture delete(UserBlacklist bl) { + return CompletableFuture.runAsync(() -> { + try { + deleteExec(bl.getId()); + } catch (SQLException e) { + throw new CompletionException(e); + } + }); + } + + private static void insertExec(UserBlacklist bl) throws SQLException { + FSDB.get().insert("INSERT INTO blacklist_users ('id', 'reason', 'added') VALUES (?, ?, ?)", + bl.getId(), + bl.getReason(), + bl.getAdded() + ); + } + + private static boolean existsExec(String id) throws SQLException { + ResultSet rs = FSDB.get().select("SELECT EXISTS(SELECT 1 FROM blacklist_users WHERE id = ?) AS hmm", id); + boolean exists = rs.getBoolean("hmm"); + + FSDB.get().close(rs); + return exists; + } + + private static Optional getExec(String id) throws SQLException { + ResultSet rs = FSDB.get().select("SELECT * FROM blacklist_users WHERE id = ?", id); + + if (rs.next()) { + UserBlacklist bl = mapObject(rs); + FSDB.get().close(rs); + return Optional.of(bl); + } + + FSDB.get().close(rs); + return Optional.empty(); + } + + private static void deleteExec(String id) throws SQLException { + FSDB.get().query("DELETE FROM blacklist_users WHERE id = ?", id); + } + + private static UserBlacklist mapObject(ResultSet rs) throws SQLException { + return new UserBlacklist.UserBlacklistBuilder(rs.getString("id")) + .setReason(rs.getString("reason")) + .setAdded(new Timestamp(rs.getLong("added"))) + .build(); + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/database/models/UserBlacklist.java b/src/main/java/dev/salmonllama/fsbot/database/models/UserBlacklist.java new file mode 100644 index 0000000..1075f80 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/database/models/UserBlacklist.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.database.models; + +import dev.salmonllama.fsbot.database.DatabaseModel; + +import java.sql.Timestamp; + +public class UserBlacklist extends DatabaseModel { + private String id; + private String reason; + private Timestamp added; + + private UserBlacklist(UserBlacklistBuilder builder) { + this.id = builder.id; + this.reason = builder.reason; + this.added = builder.added; + } + + public String getId() { + return id; + } + + public String getReason() { + return reason; + } + + public Timestamp getAdded() { + return added; + } + + public static String schema() { + return "CREATE TABLE IF NOT EXISTS blacklist_users(" + + "id TEXT PRIMARY KEY," + + "reason TEXT," + + "added TEXT)"; + } + + public static class UserBlacklistBuilder { + private String id; + private String reason; + private Timestamp added; + + public UserBlacklistBuilder(String id) { + this.id = id; + } + + public UserBlacklistBuilder setId(String id) { + this.id = id; + return this; + } + + public UserBlacklistBuilder setReason(String reason) { + this.reason = reason; + return this; + } + + public UserBlacklistBuilder setAdded(Timestamp added) { + this.added = added; + return this; + } + + public UserBlacklist build() { + return new UserBlacklist(this); + } + } +}