Refactored OutfitController for futures
This commit is contained in:
parent
d2b64760ce
commit
bcb7c260a4
@ -6,13 +6,11 @@
|
|||||||
package dev.salmonllama.fsbot.commands.developer;
|
package dev.salmonllama.fsbot.commands.developer;
|
||||||
|
|
||||||
import dev.salmonllama.fsbot.database.controllers.OutfitController;
|
import dev.salmonllama.fsbot.database.controllers.OutfitController;
|
||||||
import dev.salmonllama.fsbot.database.models.Outfit;
|
|
||||||
import dev.salmonllama.fsbot.guthix.Command;
|
import dev.salmonllama.fsbot.guthix.Command;
|
||||||
import dev.salmonllama.fsbot.guthix.CommandContext;
|
import dev.salmonllama.fsbot.guthix.CommandContext;
|
||||||
import dev.salmonllama.fsbot.guthix.CommandPermission;
|
import dev.salmonllama.fsbot.guthix.CommandPermission;
|
||||||
import dev.salmonllama.fsbot.guthix.PermissionType;
|
import dev.salmonllama.fsbot.guthix.PermissionType;
|
||||||
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -27,11 +25,8 @@ public class TestCommand extends Command {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCommand(CommandContext ctx) {
|
public void onCommand(CommandContext ctx) {
|
||||||
try {
|
OutfitController.findRandom().thenAccept(outfit -> {
|
||||||
Outfit outfit = OutfitController.findRandom();
|
ctx.reply(outfit.toString());
|
||||||
ctx.reply(outfit.toString());
|
});
|
||||||
} catch (SQLException e) {
|
|
||||||
ctx.reply(e.getSQLState());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,9 +11,82 @@ import dev.salmonllama.fsbot.database.models.Outfit;
|
|||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.CompletionException;
|
||||||
|
|
||||||
public class OutfitController { // TODO: Refactor for closing via FSDB.get(). SQLExceptions should be elevated; thrown in the command for logging.
|
public class OutfitController {
|
||||||
public static void insert(Outfit outfit) {
|
public static CompletableFuture<Void> insert(Outfit outfit) {
|
||||||
|
return CompletableFuture.runAsync(() -> {
|
||||||
|
try {
|
||||||
|
insertExec(outfit);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new CompletionException(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CompletableFuture<Optional<Outfit>> findById(String id) {
|
||||||
|
return CompletableFuture.supplyAsync(() -> {
|
||||||
|
try {
|
||||||
|
return findByIdExec(id);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new CompletionException(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CompletableFuture<Outfit> findRandom() {
|
||||||
|
return CompletableFuture.supplyAsync(() -> {
|
||||||
|
try {
|
||||||
|
return findRandomExec();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new CompletionException(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CompletableFuture<Optional<Outfit>> findRandomByTag(String tag) {
|
||||||
|
return CompletableFuture.supplyAsync(() -> {
|
||||||
|
try {
|
||||||
|
return findRandomByTagExec(tag);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new CompletionException(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CompletableFuture<Optional<Outfit>> findRandomBySubmitter(String submitterId) {
|
||||||
|
return CompletableFuture.supplyAsync(() -> {
|
||||||
|
try {
|
||||||
|
return findRandomBySubmitterExec(submitterId);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new CompletionException(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CompletableFuture<Integer> countOutfits() {
|
||||||
|
return CompletableFuture.supplyAsync(() -> {
|
||||||
|
try {
|
||||||
|
return countOutfitsExec();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new CompletionException(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CompletableFuture<Integer> countOutfitsBySubmitter(String submitterId) {
|
||||||
|
return CompletableFuture.supplyAsync(() -> {
|
||||||
|
try {
|
||||||
|
return countOutfitsBySubmitterExec(submitterId);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new CompletionException(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void insertExec(Outfit outfit) throws SQLException {
|
||||||
if (outfit.created == null) {
|
if (outfit.created == null) {
|
||||||
outfit.created = new Timestamp(System.currentTimeMillis());
|
outfit.created = new Timestamp(System.currentTimeMillis());
|
||||||
}
|
}
|
||||||
@ -22,102 +95,95 @@ public class OutfitController { // TODO: Refactor for closing via FSDB.get(). SQ
|
|||||||
outfit.updated = new Timestamp(System.currentTimeMillis());
|
outfit.updated = new Timestamp(System.currentTimeMillis());
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
FSDB.get().insert(
|
||||||
FSDB.get().insert(
|
"INSERT INTO " +
|
||||||
"INSERT INTO " +
|
"outfits('id', 'link', 'submitter', 'tag', 'created', 'updated', 'deleted', 'featured', 'display_count', 'deletion_hash') " +
|
||||||
"outfits('id', 'link', 'submitter', 'tag', 'created', 'updated', 'deleted', 'featured', 'display_count', 'deletion_hash') " +
|
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
||||||
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
outfit.id,
|
||||||
outfit.id,
|
outfit.link,
|
||||||
outfit.link,
|
outfit.submitter,
|
||||||
outfit.submitter,
|
outfit.tag,
|
||||||
outfit.tag,
|
outfit.created,
|
||||||
outfit.created,
|
outfit.updated,
|
||||||
outfit.updated,
|
outfit.deleted,
|
||||||
outfit.deleted,
|
outfit.featured,
|
||||||
outfit.featured,
|
outfit.displayCount,
|
||||||
outfit.displayCount,
|
outfit.deletionHash
|
||||||
outfit.deletionHash
|
);
|
||||||
);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Outfit findById(String id) throws SQLException {
|
private static Optional<Outfit> findByIdExec(String id) throws SQLException {
|
||||||
Outfit outfit = new Outfit();
|
ResultSet rs = FSDB.get().select("SELECT * FROM outfits WHERE id = ?", id);
|
||||||
try (ResultSet rs = FSDB.get().select("SELECT * FROM outfits WHERE id = ?", id)) {
|
|
||||||
if (rs.next()) {
|
if (rs.next()) {
|
||||||
outfit = mapObject(rs);
|
Outfit outfit = mapObject(rs);
|
||||||
}
|
FSDB.get().close(rs);
|
||||||
rs.getStatement().close();
|
return Optional.of(outfit);
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FSDB.get().close(rs);
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Outfit findRandomExec() throws SQLException {
|
||||||
|
ResultSet rs = FSDB.get().select("SELECT * FROM outfits WHERE deleted = 0 ORDER BY random() LIMIT 1");
|
||||||
|
|
||||||
|
Outfit outfit = new Outfit();
|
||||||
|
if (rs.next()) {
|
||||||
|
outfit = mapObject(rs);
|
||||||
|
}
|
||||||
|
FSDB.get().close(rs);
|
||||||
|
|
||||||
return outfit;
|
return outfit;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Outfit findRandom() throws SQLException {
|
private static Optional<Outfit> findRandomByTagExec(String tag) throws SQLException {
|
||||||
Outfit outfit = new Outfit();
|
ResultSet rs = FSDB.get().select("SELECT * FROM outfits WHERE tag = ? AND deleted = 0 ORDER BY random() LIMIT 1", tag);
|
||||||
try (ResultSet rs = FSDB.get().select("SELECT * FROM outfits WHERE deleted = 0 ORDER BY random() LIMIT 1")) {
|
|
||||||
if (rs.next()) {
|
if (rs.next()) {
|
||||||
outfit = mapObject(rs);
|
Outfit outfit = mapObject(rs);
|
||||||
}
|
FSDB.get().close(rs);
|
||||||
rs.getStatement().close();
|
return Optional.of(outfit);
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
return outfit;
|
|
||||||
|
FSDB.get().close(rs);
|
||||||
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Outfit findRandomByTag(String tag) {
|
private static Optional<Outfit> findRandomBySubmitterExec(String submitterId) throws SQLException {
|
||||||
Outfit outfit = new Outfit();
|
ResultSet rs = FSDB.get().select("SELECT * FROM outfits WHERE submitter = ? AND deleted = 0 ORDER BY random() LIMIT 1", submitterId);
|
||||||
try (ResultSet rs = FSDB.get().select("SELECT * FROM outfits WHERE tag = ? AND deleted = 0 ORDER BY random() LIMIT 1", tag)) {
|
|
||||||
if (rs.next()) {
|
if (rs.next()) {
|
||||||
outfit = mapObject(rs);
|
Outfit outfit = mapObject(rs);
|
||||||
}
|
FSDB.get().close(rs);
|
||||||
rs.getStatement().close();
|
return Optional.of(outfit);
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
return outfit;
|
|
||||||
|
FSDB.get().close(rs);
|
||||||
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Outfit findRandomBySubmitter(String submitterId) {
|
private static int countOutfitsExec() throws SQLException {
|
||||||
Outfit outfit = new Outfit();
|
ResultSet rs = FSDB.get().select("SELECT COUNT(*) AS count FROM outfits WHERE deleted = 0");
|
||||||
try (ResultSet rs = FSDB.get().select("SELECT * FROM outfits WHERE submitter = ? AND deleted = 0 ORDER BY random() LIMIT 1", submitterId)) {
|
|
||||||
if (rs.next()) {
|
|
||||||
outfit = mapObject(rs);
|
|
||||||
}
|
|
||||||
rs.getStatement().close();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return outfit;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int countOutfits() {
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
try (ResultSet rs = FSDB.get().select("SELECT COUNT(*) AS count FROM outfits WHERE deleted = 0")) {
|
if (rs.next()) {
|
||||||
if (rs.next()) {
|
count = rs.getInt("count");
|
||||||
count = rs.getInt("count");
|
|
||||||
}
|
|
||||||
rs.getStatement().close();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
|
FSDB.get().close(rs);
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int countOutfitsBySubmitter(String submitterId) {
|
private static int countOutfitsBySubmitterExec(String submitterId) throws SQLException {
|
||||||
|
ResultSet rs = FSDB.get().select("SELECT COUNT(*) AS count FROM outfits WHERE submitter = ? AND deleted = 0", submitterId);
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
try (ResultSet rs = FSDB.get().select("SELECT COUNT(*) AS count FROM outfits WHERE submitter = ? AND deleted = 0", submitterId)) {
|
if (rs.next()) {
|
||||||
if (rs.next()) {
|
count = rs.getInt("count");
|
||||||
count = rs.getInt("count");
|
|
||||||
}
|
|
||||||
rs.getStatement().close();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
|
FSDB.get().close(rs);
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user