MySQLStorageEngineData.java

package team.aura_dev.auraban.platform.common.storage.engine;

import java.util.Arrays;
import java.util.List;
import lombok.RequiredArgsConstructor;
import team.aura_dev.auraban.platform.common.config.Config;
import team.aura_dev.auraban.platform.common.dependency.RuntimeDependencies;
import team.aura_dev.auraban.platform.common.storage.StorageEngine;
import team.aura_dev.auraban.platform.common.storage.StorageEngineData;
import team.aura_dev.lib.multiplatformcore.dependency.RuntimeDependency;

@RequiredArgsConstructor
public class MySQLStorageEngineData implements StorageEngineData {
  private final Config.Storage.MySQL configData;

  @Override
  public String getName() {
    return "MySQL";
  }

  @Override
  public List<RuntimeDependency> getRequiredRuntimeDependencies() {
    return Arrays.asList(RuntimeDependencies.HIKARI_CP, RuntimeDependencies.MARIADB_CLIENT);
  }

  @Override
  public StorageEngine createInstance() {
    final Config.Storage.MySQL.Credentials crendentials = configData.getCrendentials();
    final Config.Storage.MySQL.PoolSettings poolSettings = configData.getPoolSettings();

    return new MySQLStorageEngine(
        crendentials.getHost(),
        crendentials.getPort(),
        crendentials.getDatabase(),
        crendentials.getUser(),
        crendentials.getPassword(),
        crendentials.getTablePrefix(),
        poolSettings.getConnectionTimeout(),
        poolSettings.getMaximumLifetime(),
        poolSettings.getMaximumPoolSize(),
        poolSettings.getMinimumIdle(),
        poolSettings.getProperties());
  }
}