diff --git a/src/main/java/dev/salmonllama/fsbot/database/controllers/StaticPermissionController.java b/src/main/java/dev/salmonllama/fsbot/database/controllers/StaticPermissionController.java new file mode 100644 index 0000000..d70aefd --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/database/controllers/StaticPermissionController.java @@ -0,0 +1,118 @@ +/* + * 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.StaticPermission; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionException; + +public class StaticPermissionController { + // Need to insert, get all per user, get per keyword, and delete + public static CompletableFuture insert(StaticPermission perm) { + return CompletableFuture.runAsync(() -> { + try { + insertExec(perm); + } catch (SQLException e) { + throw new CompletionException(e); + } + }); + } + + public static CompletableFuture>> getByUser(String userId) { + return CompletableFuture.supplyAsync(() -> { + try { + return getByUserExec(userId); + } catch (SQLException e) { + throw new CompletionException(e); + } + }); + } + + public static CompletableFuture>> getByPermission(String perm) { + return CompletableFuture.supplyAsync(() -> { + try { + return getByPermissionExec(perm); + } catch (SQLException e) { + throw new CompletionException(e); + } + }); + } + + public static CompletableFuture delete(StaticPermission perm) { + return delete(perm.getUserId(), perm.getPermission()); + } + + public static CompletableFuture delete(String userId, String perm) { + return CompletableFuture.runAsync(() -> { + try { + deleteExec(userId, perm); + } catch (SQLException e) { + throw new CompletionException(e); + } + }); + } + + private static void insertExec(StaticPermission perm) throws SQLException { + FSDB.get().insert("INSERT INTO static_permissions (user_id, permission, date_added) VALUES (?, ?, ?)", + perm.getUserId(), + perm.getPermission(), + perm.getAdded() + ); + } + + private static Optional> getByUserExec(String userId) throws SQLException { + ResultSet rs = FSDB.get().select("SELECT * FROM static_permissions WHERE user_id = ?", userId); + + Collection permissions = new ArrayList<>(); + while (rs.next()) { + permissions.add(mapObject(rs)); + } + + FSDB.get().close(rs); + + if (permissions.isEmpty()) { + return Optional.empty(); + } + + return Optional.of(permissions); + } + + private static Optional> getByPermissionExec(String perm) throws SQLException { + ResultSet rs = FSDB.get().select("SELECT * FROM static_permissions WHERE permission = ?", perm); + + Collection users = new ArrayList<>(); + while (rs.next()) { + users.add(mapObject(rs)); + } + + FSDB.get().close(rs); + + if (users.isEmpty()) { + return Optional.empty(); + } + + return Optional.of(users); + } + + private static void deleteExec(String userId, String perm) throws SQLException { + FSDB.get().query("DELETE FROM static_permissions WHERE user_id = ? AND permission = ?", userId, perm); + } + + private static StaticPermission mapObject(ResultSet rs) throws SQLException { + return new StaticPermission.StaticPermissionBuilder(rs.getString("user_id")) + .setPermission(rs.getString("permission")) + .setAdded(new Timestamp(rs.getLong("date_added"))) + .build(); + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/database/models/StaticPermission.java b/src/main/java/dev/salmonllama/fsbot/database/models/StaticPermission.java new file mode 100644 index 0000000..3ddd2ab --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/database/models/StaticPermission.java @@ -0,0 +1,62 @@ +/* + * 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 StaticPermission extends DatabaseModel { + private String userId; + private String permission; + private Timestamp added; + + private StaticPermission(StaticPermissionBuilder builder) { + userId = builder.userId; + permission = builder.permission; + added = builder.added; + } + + public String getUserId() { + return userId; + } + + public String getPermission() { + return permission; + } + + public Timestamp getAdded() { + return added; + } + + public static String schema() { + return "CREATE TABLE IF NOT EXISTS static_permissions (user_id TEXT, permission TEXT, date_added TEXT)"; + } + + public static class StaticPermissionBuilder { + private String userId; + private String permission = null; + private Timestamp added = null; + + public StaticPermissionBuilder(String userId) { + this.userId = userId; + } + + public StaticPermissionBuilder setPermission(String permission) { + this.permission = permission; + return this; + } + + public StaticPermissionBuilder setAdded(Timestamp added) { + this.added = added; + return this; + } + + public StaticPermission build() { + return new StaticPermission(this); + } + } +}