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.db.access.queries.OptionalFetchQueries;
import com.djrapitops.plan.db.access.queries.PlayerFetchQueries;
import com.djrapitops.plan.system.database.DBSystem;
import com.djrapitops.plan.system.info.connection.ConnectionSystem;
import com.djrapitops.plan.system.locale.Locale;
@ -97,19 +98,19 @@ public class InspectCommand extends CommandNode {
private void runInspectTask(String playerName, Sender sender) {
processing.submitNonCritical(() -> {
try {
UUID uuid = uuidUtility.getUUIDOf(playerName);
if (uuid == null) {
UUID playerUUID = uuidUtility.getUUIDOf(playerName);
if (playerUUID == null) {
sender.sendMessage(locale.getString(CommandLang.FAIL_USERNAME_NOT_VALID));
return;
}
if (!dbSystem.getDatabase().check().isPlayerRegistered(uuid)) {
if (!dbSystem.getDatabase().query(PlayerFetchQueries.isPlayerRegistered(playerUUID))) {
sender.sendMessage(locale.getString(CommandLang.FAIL_USERNAME_NOT_KNOWN));
return;
}
checkWebUserAndNotify(sender);
processing.submit(processorFactory.inspectCacheRequestProcessor(uuid, sender, playerName, this::sendInspectMsg));
processing.submit(processorFactory.inspectCacheRequestProcessor(playerUUID, sender, playerName, this::sendInspectMsg));
} catch (DBOpException e) {
sender.sendMessage("§eDatabase exception occurred: " + e.getMessage());
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.db.Database;
import com.djrapitops.plan.db.access.queries.PlayerFetchQueries;
import com.djrapitops.plan.db.access.transactions.RemovePlayerTransaction;
import com.djrapitops.plan.system.database.DBSystem;
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) {
processing.submitCritical(() -> {
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));
return;
}
Database db = dbSystem.getDatabase();
if (!db.check().isPlayerRegistered(uuid)) {
if (!db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID))) {
sender.sendMessage(locale.getString(CommandLang.FAIL_USERNAME_NOT_KNOWN));
return;
}
@ -119,7 +120,7 @@ public class ManageRemoveCommand extends CommandNode {
sender.sendMessage(locale.getString(ManageLang.PROGRESS_START));
db.executeTransaction(new RemovePlayerTransaction(uuid));
db.executeTransaction(new RemovePlayerTransaction(playerUUID));
sender.sendMessage(locale.getString(ManageLang.PROGRESS_SUCCESS));
} 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.UserInfo;
import com.djrapitops.plan.db.access.HasMoreThanZeroQueryStatement;
import com.djrapitops.plan.db.access.Query;
import com.djrapitops.plan.db.access.QueryStatement;
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.
*

View File

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

View File

@ -27,16 +27,6 @@ public class SQLCheckOps extends SQLOps implements CheckOperations {
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
public boolean isPlayerRegisteredOnThisServer(UUID player) {
return userInfoTable.isRegisteredOnThisServer(player);

View File

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

View File

@ -17,6 +17,7 @@
package com.djrapitops.plan.system.processing.processors.player;
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.SaveOperations;
import com.djrapitops.plan.system.processing.Processing;
@ -61,7 +62,7 @@ public class RegisterProcessor extends AbsRunnable {
CheckOperations check = database.check();
SaveOperations save = database.save();
try {
if (!check.isPlayerRegistered(uuid)) {
if (!database.query(PlayerFetchQueries.isPlayerRegistered(uuid))) {
save.registerNewUser(uuid, registered.getAsLong(), name);
}
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.WebException;
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.info.InfoSystem;
import com.djrapitops.plan.system.webserver.Request;
@ -78,7 +79,7 @@ public class PlayerPageHandler implements PageHandler {
}
try {
// 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) {
return ResponseCache.loadResponse(PageId.RAW_PLAYER.of(uuid), () -> responseFactory.rawPlayerPageResponse(uuid));
}

View File

@ -410,9 +410,9 @@ public abstract class CommonDBTest {
@Test
public void userRegisterChecksReturnCorrectValues() {
UsersTable usersTable = db.getUsersTable();
assertFalse(usersTable.isRegistered(playerUUID));
assertFalse(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID)));
saveUserOne();
assertTrue(usersTable.isRegistered(playerUUID));
assertTrue(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID)));
UserInfoTable userInfoTable = db.getUserInfoTable();
assertFalse(userInfoTable.isRegistered(playerUUID));
@ -500,11 +500,11 @@ public abstract class CommonDBTest {
nicknamesTable.saveUserName(playerUUID, new Nickname("TestNick", System.currentTimeMillis(), serverUUID));
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));
assertFalse(usersTable.isRegistered(playerUUID));
assertFalse(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID)));
assertFalse(userInfoTable.isRegistered(playerUUID));
assertTrue(nicknamesTable.getNicknames(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,
new SHA256Hash("1.2.3.4").create()));
assertTrue(usersTable.isRegistered(playerUUID));
assertTrue(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID)));
useCommand("plan");
useCommand("plan");
@ -778,11 +778,11 @@ public abstract class CommonDBTest {
@Test
public void testRegister() {
assertFalse(db.check().isPlayerRegistered(playerUUID));
assertFalse(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID)));
assertFalse(db.check().isPlayerRegisteredOnThisServer(playerUUID));
db.save().registerNewUser(playerUUID, 1000L, "name");
db.save().registerNewUserOnThisServer(playerUUID, 500L);
assertTrue(db.check().isPlayerRegistered(playerUUID));
assertTrue(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID)));
assertTrue(db.check().isPlayerRegisteredOnThisServer(playerUUID));
}