Refactored UsersTable#isRegistered to a query

This commit is contained in:
Rsl1122 2019-02-01 11:32:32 +02:00
parent 966b204ca1
commit 8a15e03096
10 changed files with 41 additions and 51 deletions

View File

@ -18,6 +18,7 @@ package com.djrapitops.plan.command.commands;
import com.djrapitops.plan.api.exceptions.database.DBOpException; import com.djrapitops.plan.api.exceptions.database.DBOpException;
import com.djrapitops.plan.db.access.queries.OptionalFetchQueries; import com.djrapitops.plan.db.access.queries.OptionalFetchQueries;
import com.djrapitops.plan.db.access.queries.PlayerFetchQueries;
import com.djrapitops.plan.system.database.DBSystem; import com.djrapitops.plan.system.database.DBSystem;
import com.djrapitops.plan.system.info.connection.ConnectionSystem; import com.djrapitops.plan.system.info.connection.ConnectionSystem;
import com.djrapitops.plan.system.locale.Locale; import com.djrapitops.plan.system.locale.Locale;
@ -97,19 +98,19 @@ public class InspectCommand extends CommandNode {
private void runInspectTask(String playerName, Sender sender) { private void runInspectTask(String playerName, Sender sender) {
processing.submitNonCritical(() -> { processing.submitNonCritical(() -> {
try { try {
UUID uuid = uuidUtility.getUUIDOf(playerName); UUID playerUUID = uuidUtility.getUUIDOf(playerName);
if (uuid == null) { if (playerUUID == null) {
sender.sendMessage(locale.getString(CommandLang.FAIL_USERNAME_NOT_VALID)); sender.sendMessage(locale.getString(CommandLang.FAIL_USERNAME_NOT_VALID));
return; return;
} }
if (!dbSystem.getDatabase().check().isPlayerRegistered(uuid)) { if (!dbSystem.getDatabase().query(PlayerFetchQueries.isPlayerRegistered(playerUUID))) {
sender.sendMessage(locale.getString(CommandLang.FAIL_USERNAME_NOT_KNOWN)); sender.sendMessage(locale.getString(CommandLang.FAIL_USERNAME_NOT_KNOWN));
return; return;
} }
checkWebUserAndNotify(sender); checkWebUserAndNotify(sender);
processing.submit(processorFactory.inspectCacheRequestProcessor(uuid, sender, playerName, this::sendInspectMsg)); processing.submit(processorFactory.inspectCacheRequestProcessor(playerUUID, sender, playerName, this::sendInspectMsg));
} catch (DBOpException e) { } catch (DBOpException e) {
sender.sendMessage("§eDatabase exception occurred: " + e.getMessage()); sender.sendMessage("§eDatabase exception occurred: " + e.getMessage());
errorHandler.log(L.ERROR, this.getClass(), e); errorHandler.log(L.ERROR, this.getClass(), e);

View File

@ -18,6 +18,7 @@ package com.djrapitops.plan.command.commands.manage;
import com.djrapitops.plan.api.exceptions.database.DBOpException; import com.djrapitops.plan.api.exceptions.database.DBOpException;
import com.djrapitops.plan.db.Database; import com.djrapitops.plan.db.Database;
import com.djrapitops.plan.db.access.queries.PlayerFetchQueries;
import com.djrapitops.plan.db.access.transactions.RemovePlayerTransaction; import com.djrapitops.plan.db.access.transactions.RemovePlayerTransaction;
import com.djrapitops.plan.system.database.DBSystem; import com.djrapitops.plan.system.database.DBSystem;
import com.djrapitops.plan.system.locale.Locale; import com.djrapitops.plan.system.locale.Locale;
@ -95,15 +96,15 @@ public class ManageRemoveCommand extends CommandNode {
private void runRemoveTask(String playerName, Sender sender, String[] args) { private void runRemoveTask(String playerName, Sender sender, String[] args) {
processing.submitCritical(() -> { processing.submitCritical(() -> {
try { try {
UUID uuid = uuidUtility.getUUIDOf(playerName); UUID playerUUID = uuidUtility.getUUIDOf(playerName);
if (uuid == null) { if (playerUUID == null) {
sender.sendMessage(locale.getString(CommandLang.FAIL_USERNAME_NOT_VALID)); sender.sendMessage(locale.getString(CommandLang.FAIL_USERNAME_NOT_VALID));
return; return;
} }
Database db = dbSystem.getDatabase(); Database db = dbSystem.getDatabase();
if (!db.check().isPlayerRegistered(uuid)) { if (!db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID))) {
sender.sendMessage(locale.getString(CommandLang.FAIL_USERNAME_NOT_KNOWN)); sender.sendMessage(locale.getString(CommandLang.FAIL_USERNAME_NOT_KNOWN));
return; return;
} }
@ -119,7 +120,7 @@ public class ManageRemoveCommand extends CommandNode {
sender.sendMessage(locale.getString(ManageLang.PROGRESS_START)); sender.sendMessage(locale.getString(ManageLang.PROGRESS_START));
db.executeTransaction(new RemovePlayerTransaction(uuid)); db.executeTransaction(new RemovePlayerTransaction(playerUUID));
sender.sendMessage(locale.getString(ManageLang.PROGRESS_SUCCESS)); sender.sendMessage(locale.getString(ManageLang.PROGRESS_SUCCESS));
} catch (DBOpException e) { } catch (DBOpException e) {

View File

@ -18,6 +18,7 @@ package com.djrapitops.plan.db.access.queries;
import com.djrapitops.plan.data.container.GeoInfo; import com.djrapitops.plan.data.container.GeoInfo;
import com.djrapitops.plan.data.container.UserInfo; import com.djrapitops.plan.data.container.UserInfo;
import com.djrapitops.plan.db.access.HasMoreThanZeroQueryStatement;
import com.djrapitops.plan.db.access.Query; import com.djrapitops.plan.db.access.Query;
import com.djrapitops.plan.db.access.QueryStatement; import com.djrapitops.plan.db.access.QueryStatement;
import com.djrapitops.plan.db.sql.tables.GeoInfoTable; import com.djrapitops.plan.db.sql.tables.GeoInfoTable;
@ -129,4 +130,21 @@ public class PlayerFetchQueries {
} }
}; };
} }
/**
* Check if the player's BaseUser is registered.
*
* @param playerUUID UUID of the player.
* @return True if the player's BaseUser is found from plan_users
*/
public static Query<Boolean> isPlayerRegistered(UUID playerUUID) {
String sql = "SELECT COUNT(1) as c FROM " + UsersTable.TABLE_NAME +
" WHERE " + UsersTable.USER_UUID + "=?";
return new HasMoreThanZeroQueryStatement(sql) {
@Override
public void prepare(PreparedStatement statement) throws SQLException {
statement.setString(1, playerUUID.toString());
}
};
}
} }

View File

@ -135,24 +135,6 @@ public class UsersTable extends Table {
}); });
} }
public boolean isRegistered(UUID uuid) {
String sql = Select.from(tableName, "COUNT(" + ID + ") as c")
.where(USER_UUID + "=?")
.toString();
return query(new QueryStatement<Boolean>(sql) {
@Override
public void prepare(PreparedStatement statement) throws SQLException {
statement.setString(1, uuid.toString());
}
@Override
public Boolean processResults(ResultSet set) throws SQLException {
return set.next() && set.getInt("c") >= 1;
}
});
}
/** /**
* Register a new user (UUID) to the database. * Register a new user (UUID) to the database.
* *

View File

@ -20,11 +20,6 @@ import java.util.UUID;
@Deprecated @Deprecated
public interface CheckOperations { public interface CheckOperations {
@Deprecated
boolean isPlayerRegistered(UUID player);
@Deprecated
boolean isPlayerRegistered(UUID player, UUID server);
@Deprecated @Deprecated
boolean isPlayerRegisteredOnThisServer(UUID player); boolean isPlayerRegisteredOnThisServer(UUID player);

View File

@ -27,16 +27,6 @@ public class SQLCheckOps extends SQLOps implements CheckOperations {
super(db); super(db);
} }
@Override
public boolean isPlayerRegistered(UUID player) {
return usersTable.isRegistered(player);
}
@Override
public boolean isPlayerRegistered(UUID player, UUID server) {
return userInfoTable.isRegistered(player, server);
}
@Override @Override
public boolean isPlayerRegisteredOnThisServer(UUID player) { public boolean isPlayerRegisteredOnThisServer(UUID player) {
return userInfoTable.isRegisteredOnThisServer(player); return userInfoTable.isRegisteredOnThisServer(player);

View File

@ -17,6 +17,7 @@
package com.djrapitops.plan.system.processing.processors.player; package com.djrapitops.plan.system.processing.processors.player;
import com.djrapitops.plan.db.Database; import com.djrapitops.plan.db.Database;
import com.djrapitops.plan.db.access.queries.PlayerFetchQueries;
import com.djrapitops.plan.system.processing.CriticalRunnable; import com.djrapitops.plan.system.processing.CriticalRunnable;
import com.djrapitops.plan.system.processing.Processing; import com.djrapitops.plan.system.processing.Processing;
@ -54,7 +55,7 @@ public class ProxyRegisterProcessor implements CriticalRunnable {
@Override @Override
public void run() { public void run() {
try { try {
if (database.check().isPlayerRegistered(uuid)) { if (database.query(PlayerFetchQueries.isPlayerRegistered(uuid))) {
return; return;
} }
database.save().registerNewUser(uuid, registered, name); database.save().registerNewUser(uuid, registered, name);

View File

@ -17,6 +17,7 @@
package com.djrapitops.plan.system.processing.processors.player; package com.djrapitops.plan.system.processing.processors.player;
import com.djrapitops.plan.db.Database; import com.djrapitops.plan.db.Database;
import com.djrapitops.plan.db.access.queries.PlayerFetchQueries;
import com.djrapitops.plan.system.database.databases.operation.CheckOperations; import com.djrapitops.plan.system.database.databases.operation.CheckOperations;
import com.djrapitops.plan.system.database.databases.operation.SaveOperations; import com.djrapitops.plan.system.database.databases.operation.SaveOperations;
import com.djrapitops.plan.system.processing.Processing; import com.djrapitops.plan.system.processing.Processing;
@ -61,7 +62,7 @@ public class RegisterProcessor extends AbsRunnable {
CheckOperations check = database.check(); CheckOperations check = database.check();
SaveOperations save = database.save(); SaveOperations save = database.save();
try { try {
if (!check.isPlayerRegistered(uuid)) { if (!database.query(PlayerFetchQueries.isPlayerRegistered(uuid))) {
save.registerNewUser(uuid, registered.getAsLong(), name); save.registerNewUser(uuid, registered.getAsLong(), name);
} }
if (!check.isPlayerRegisteredOnThisServer(uuid)) { if (!check.isPlayerRegisteredOnThisServer(uuid)) {

View File

@ -20,6 +20,7 @@ import com.djrapitops.plan.api.exceptions.WebUserAuthException;
import com.djrapitops.plan.api.exceptions.connection.NoServersException; import com.djrapitops.plan.api.exceptions.connection.NoServersException;
import com.djrapitops.plan.api.exceptions.connection.WebException; import com.djrapitops.plan.api.exceptions.connection.WebException;
import com.djrapitops.plan.data.WebUser; import com.djrapitops.plan.data.WebUser;
import com.djrapitops.plan.db.access.queries.PlayerFetchQueries;
import com.djrapitops.plan.system.database.DBSystem; import com.djrapitops.plan.system.database.DBSystem;
import com.djrapitops.plan.system.info.InfoSystem; import com.djrapitops.plan.system.info.InfoSystem;
import com.djrapitops.plan.system.webserver.Request; import com.djrapitops.plan.system.webserver.Request;
@ -78,7 +79,7 @@ public class PlayerPageHandler implements PageHandler {
} }
try { try {
// TODO Move this Database dependency to PlayerPage generation in PageFactory instead. // TODO Move this Database dependency to PlayerPage generation in PageFactory instead.
if (dbSystem.getDatabase().check().isPlayerRegistered(uuid)) { if (dbSystem.getDatabase().query(PlayerFetchQueries.isPlayerRegistered(uuid))) {
if (raw) { if (raw) {
return ResponseCache.loadResponse(PageId.RAW_PLAYER.of(uuid), () -> responseFactory.rawPlayerPageResponse(uuid)); return ResponseCache.loadResponse(PageId.RAW_PLAYER.of(uuid), () -> responseFactory.rawPlayerPageResponse(uuid));
} }

View File

@ -410,9 +410,9 @@ public abstract class CommonDBTest {
@Test @Test
public void userRegisterChecksReturnCorrectValues() { public void userRegisterChecksReturnCorrectValues() {
UsersTable usersTable = db.getUsersTable(); UsersTable usersTable = db.getUsersTable();
assertFalse(usersTable.isRegistered(playerUUID)); assertFalse(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID)));
saveUserOne(); saveUserOne();
assertTrue(usersTable.isRegistered(playerUUID)); assertTrue(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID)));
UserInfoTable userInfoTable = db.getUserInfoTable(); UserInfoTable userInfoTable = db.getUserInfoTable();
assertFalse(userInfoTable.isRegistered(playerUUID)); assertFalse(userInfoTable.isRegistered(playerUUID));
@ -500,11 +500,11 @@ public abstract class CommonDBTest {
nicknamesTable.saveUserName(playerUUID, new Nickname("TestNick", System.currentTimeMillis(), serverUUID)); nicknamesTable.saveUserName(playerUUID, new Nickname("TestNick", System.currentTimeMillis(), serverUUID));
saveGeoInfo(playerUUID, new GeoInfo("1.2.3.4", "TestLoc", 223456789L, "3")); saveGeoInfo(playerUUID, new GeoInfo("1.2.3.4", "TestLoc", 223456789L, "3"));
assertTrue(usersTable.isRegistered(playerUUID)); assertTrue(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID)));
db.executeTransaction(new RemovePlayerTransaction(playerUUID)); db.executeTransaction(new RemovePlayerTransaction(playerUUID));
assertFalse(usersTable.isRegistered(playerUUID)); assertFalse(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID)));
assertFalse(userInfoTable.isRegistered(playerUUID)); assertFalse(userInfoTable.isRegistered(playerUUID));
assertTrue(nicknamesTable.getNicknames(playerUUID).isEmpty()); assertTrue(nicknamesTable.getNicknames(playerUUID).isEmpty());
assertTrue(db.query(PlayerFetchQueries.playerGeoInfo(playerUUID)).isEmpty()); assertTrue(db.query(PlayerFetchQueries.playerGeoInfo(playerUUID)).isEmpty());
@ -558,7 +558,7 @@ public abstract class CommonDBTest {
saveGeoInfo(playerUUID, new GeoInfo("1.2.3.4", "TestLoc", 223456789L, saveGeoInfo(playerUUID, new GeoInfo("1.2.3.4", "TestLoc", 223456789L,
new SHA256Hash("1.2.3.4").create())); new SHA256Hash("1.2.3.4").create()));
assertTrue(usersTable.isRegistered(playerUUID)); assertTrue(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID)));
useCommand("plan"); useCommand("plan");
useCommand("plan"); useCommand("plan");
@ -778,11 +778,11 @@ public abstract class CommonDBTest {
@Test @Test
public void testRegister() { public void testRegister() {
assertFalse(db.check().isPlayerRegistered(playerUUID)); assertFalse(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID)));
assertFalse(db.check().isPlayerRegisteredOnThisServer(playerUUID)); assertFalse(db.check().isPlayerRegisteredOnThisServer(playerUUID));
db.save().registerNewUser(playerUUID, 1000L, "name"); db.save().registerNewUser(playerUUID, 1000L, "name");
db.save().registerNewUserOnThisServer(playerUUID, 500L); db.save().registerNewUserOnThisServer(playerUUID, 500L);
assertTrue(db.check().isPlayerRegistered(playerUUID)); assertTrue(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID)));
assertTrue(db.check().isPlayerRegisteredOnThisServer(playerUUID)); assertTrue(db.check().isPlayerRegisteredOnThisServer(playerUUID));
} }