mirror of
https://github.com/xHyroM/lighteco.git
synced 2024-11-21 22:41:06 +01:00
feat: more storage providers [WIP]
This commit is contained in:
parent
85c876e87f
commit
c4c6671c7c
12 changed files with 169 additions and 19 deletions
|
@ -6,9 +6,7 @@ import org.checkerframework.checker.nullness.qual.NonNull;
|
|||
import java.util.UUID;
|
||||
|
||||
public interface StorageProvider {
|
||||
@NonNull String[] getIdentifiers();
|
||||
|
||||
@NonNull User loadUser(@NonNull UUID uniqueId);
|
||||
@NonNull User loadUser(@NonNull UUID uniqueId) throws Exception;
|
||||
// todo: look at this
|
||||
void saveUser(@NonNull User user);
|
||||
}
|
||||
|
|
|
@ -27,4 +27,15 @@ dependencies {
|
|||
|
||||
tasks.shadowJar {
|
||||
relocate("dev.jorel.commandapi", "dev.xhyrom.lighteco.libraries.commandapi")
|
||||
|
||||
// common
|
||||
relocate("eu.okaeri.configs", "dev.xhyrom.lighteco.libraries.okaeri.configs")
|
||||
relocate("eu.okaeri.validator", "dev.xhyrom.lighteco.libraries.okaeri.validator")
|
||||
|
||||
relocate("net.kyori.adventure", "dev.xhyrom.lighteco.libraries.net.kyori.adventure")
|
||||
relocate("net.kyori.examination", "dev.xhyrom.lighteco.libraries.net.kyori.examination")
|
||||
|
||||
relocate("org.yaml.snakeyaml", "dev.xhyrom.lighteco.libraries.org.yaml.snakeyaml")
|
||||
|
||||
relocate("com.zaxxer.hikari", "dev.xhyrom.lighteco.libraries.com.zaxxer.hikari")
|
||||
}
|
|
@ -50,16 +50,13 @@ public class BukkitCommandManager extends AbstractCommandManager {
|
|||
|
||||
String permissionBase = "lighteco.currency." + currency.getIdentifier() + ".command.";
|
||||
|
||||
// Dont expose set, give, take directly - only through main command
|
||||
new CommandAPICommand(currency.getIdentifier())
|
||||
.withPermission("lighteco.currency." + currency.getIdentifier() + ".command")
|
||||
.withSubcommand(new SetCommand(this, currency, permissionBase).build())
|
||||
.withSubcommand(new GiveCommand(this, currency, permissionBase).build())
|
||||
.withSubcommand(new TakeCommand(this, currency, permissionBase).build())
|
||||
.register();
|
||||
// Register main command
|
||||
registerCurrencyCommand(currency);
|
||||
|
||||
// Expose pay as main command
|
||||
new PayCommand(this, currency, permissionBase).build().register();
|
||||
|
||||
// Expose balance as main command
|
||||
for (CommandAPICommand cmd : new BalanceCommand(
|
||||
this,
|
||||
"balance",
|
||||
|
|
|
@ -14,6 +14,8 @@ dependencies {
|
|||
implementation("eu.okaeri:okaeri-configs-yaml-snakeyaml:5.0.0-beta.5")
|
||||
implementation("eu.okaeri:okaeri-configs-validator-okaeri:5.0.0-beta.5")
|
||||
|
||||
implementation("com.zaxxer:HikariCP:5.0.1")
|
||||
|
||||
compileOnly("org.projectlombok:lombok:1.18.28")
|
||||
annotationProcessor("org.projectlombok:lombok:1.18.28")
|
||||
|
||||
|
|
|
@ -16,11 +16,6 @@ public class MemoryStorageProvider implements StorageProvider {
|
|||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull String[] getIdentifiers() {
|
||||
return new String[] {"memory"};
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull User loadUser(@NonNull UUID uniqueId) {
|
||||
this.simulateSlowDatabaseQuery();
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
package dev.xhyrom.lighteco.common.storage.provider.sql;
|
||||
|
||||
import dev.xhyrom.lighteco.api.model.user.User;
|
||||
import dev.xhyrom.lighteco.api.storage.StorageProvider;
|
||||
import dev.xhyrom.lighteco.common.plugin.LightEcoPlugin;
|
||||
import dev.xhyrom.lighteco.common.storage.provider.sql.connection.ConnectionFactory;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.util.UUID;
|
||||
|
||||
public class SqlStorageProvider implements StorageProvider {
|
||||
private final LightEcoPlugin plugin;
|
||||
private final ConnectionFactory connectionFactory;
|
||||
|
||||
public SqlStorageProvider(LightEcoPlugin plugin, ConnectionFactory connectionFactory) {
|
||||
this.plugin = plugin;
|
||||
this.connectionFactory = connectionFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull User loadUser(@NonNull UUID uniqueId) throws Exception {
|
||||
try (Connection c = this.connectionFactory.getConnection()) {
|
||||
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveUser(@NonNull User user) {
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
package dev.xhyrom.lighteco.common.storage.provider.sql.connection;
|
||||
|
||||
import dev.xhyrom.lighteco.common.plugin.LightEcoPlugin;
|
||||
|
||||
import java.sql.Connection;
|
||||
|
||||
public interface ConnectionFactory {
|
||||
void init(LightEcoPlugin plugin);
|
||||
void shutdown() throws Exception;
|
||||
|
||||
Connection getConnection() throws Exception;
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package dev.xhyrom.lighteco.common.storage.provider.sql.connection.file;
|
||||
|
||||
import dev.xhyrom.lighteco.common.storage.provider.sql.connection.ConnectionFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
|
||||
abstract class FileConnectionFactory implements ConnectionFactory {
|
||||
private Connection connection;
|
||||
private final File file;
|
||||
|
||||
public FileConnectionFactory(File file) {
|
||||
this.file = file;
|
||||
}
|
||||
|
||||
protected abstract Connection createConnection(File file) throws SQLException;
|
||||
|
||||
@Override
|
||||
public void shutdown() throws Exception {
|
||||
if (this.connection == null) return;
|
||||
|
||||
this.connection.close();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Connection getConnection() throws SQLException {
|
||||
Connection connection = this.connection;
|
||||
if (connection == null || connection.isClosed()) {
|
||||
connection = createConnection(this.file);
|
||||
this.connection = connection;
|
||||
}
|
||||
|
||||
return connection;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package dev.xhyrom.lighteco.common.storage.provider.sql.connection.file;
|
||||
|
||||
import dev.xhyrom.lighteco.common.plugin.LightEcoPlugin;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Properties;
|
||||
|
||||
public class H2ConnectionFactory extends FileConnectionFactory {
|
||||
private Constructor<?> connectionConstructor;
|
||||
|
||||
public H2ConnectionFactory(File file) {
|
||||
super(file);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(LightEcoPlugin plugin) {
|
||||
//ClassLoader classLoader = plugin
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Connection createConnection(File file) throws SQLException {
|
||||
try {
|
||||
return (Connection) this.connectionConstructor.newInstance(
|
||||
"jdbc:h2:" + file.getAbsolutePath(),
|
||||
new Properties(),
|
||||
null, null, false
|
||||
);
|
||||
} catch (Exception e) {
|
||||
if (e.getCause() instanceof SQLException) {
|
||||
throw (SQLException) e.getCause();
|
||||
}
|
||||
|
||||
throw new SQLException("Failed to create connection", e);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
CREATE TABLE IF NOT EXISTS `{prefix}_users` (
|
||||
`uuid` VARCHAR(36) NOT NULL,
|
||||
`currency_identifier` VARCHAR(255) NOT NULL,
|
||||
`balance` DECIMAL(10, 2) NOT NULL,
|
||||
PRIMARY KEY (`uuid`, `currency_identifier`)
|
||||
) DEFAULT CHARSET = utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `{prefix}_{context}_users` (
|
||||
`uuid` VARCHAR(36) NOT NULL,
|
||||
`currency_identifier` VARCHAR(255) NOT NULL,
|
||||
`balance` DECIMAL(10, 2) NOT NULL,
|
||||
PRIMARY KEY (`uuid`, `currency_identifier`)
|
||||
) DEFAULT CHARSET = utf8mb4;
|
|
@ -0,0 +1,13 @@
|
|||
CREATE TABLE IF NOT EXISTS `{prefix}_users` (
|
||||
`uuid` VARCHAR(36) NOT NULL,
|
||||
`currency_identifier` VARCHAR(255) NOT NULL,
|
||||
`balance` DECIMAL(10, 2) NOT NULL,
|
||||
PRIMARY KEY (`uuid`, `currency_identifier`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `{prefix}_{context}_users` (
|
||||
`uuid` VARCHAR(36) NOT NULL,
|
||||
`currency_identifier` VARCHAR(255) NOT NULL,
|
||||
`balance` DECIMAL(10, 2) NOT NULL,
|
||||
PRIMARY KEY (`uuid`, `currency_identifier`)
|
||||
);
|
Loading…
Reference in a new issue