From acd2225c4940cb17e746cc6e4351cf08b536cad4 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Fri, 1 Feb 2019 12:13:20 +0200 Subject: [PATCH] Refactored UserInfoTable#registerUserInfo to a transaction: - Removed RegisterProcessor - Refactored UserInfoTable#isRegistered (both) to a query - Removed UserInfoTable#isRegisteredOnThisServer - Removed UserInfoTable#getServerUserInfo - not used - Made login nickname processing non critical --- .../bukkit/PlayerOnlineListener.java | 19 ++--- .../db/access/queries/DataStoreQueries.java | 21 +++++ .../db/access/queries/PlayerFetchQueries.java | 22 +++++- .../events/PlayerRegisterTransaction.java | 4 +- .../PlayerServerRegisterTransaction.java | 46 +++++++++++ .../plan/db/sql/tables/UserInfoTable.java | 51 ------------- .../databases/operation/CheckOperations.java | 3 - .../databases/operation/SaveOperations.java | 3 - .../databases/sql/operation/SQLCheckOps.java | 5 -- .../databases/sql/operation/SQLSaveOps.java | 5 -- .../processors/player/PlayerProcessors.java | 5 -- .../processors/player/RegisterProcessor.java | 76 ------------------- .../com/djrapitops/plan/db/CommonDBTest.java | 50 +++++------- .../sponge/SpongePlayerListener.java | 19 ++--- 14 files changed, 128 insertions(+), 201 deletions(-) create mode 100644 Plan/common/src/main/java/com/djrapitops/plan/db/access/transactions/events/PlayerServerRegisterTransaction.java delete mode 100644 Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/RegisterProcessor.java diff --git a/Plan/bukkit/src/main/java/com/djrapitops/plan/system/listeners/bukkit/PlayerOnlineListener.java b/Plan/bukkit/src/main/java/com/djrapitops/plan/system/listeners/bukkit/PlayerOnlineListener.java index 5c6274cc6..4ff22cbb8 100644 --- a/Plan/bukkit/src/main/java/com/djrapitops/plan/system/listeners/bukkit/PlayerOnlineListener.java +++ b/Plan/bukkit/src/main/java/com/djrapitops/plan/system/listeners/bukkit/PlayerOnlineListener.java @@ -17,7 +17,9 @@ package com.djrapitops.plan.system.listeners.bukkit; import com.djrapitops.plan.data.container.Session; +import com.djrapitops.plan.db.Database; import com.djrapitops.plan.db.access.transactions.events.GeoInfoStoreTransaction; +import com.djrapitops.plan.db.access.transactions.events.PlayerServerRegisterTransaction; import com.djrapitops.plan.db.access.transactions.events.WorldNameStoreTransaction; import com.djrapitops.plan.system.cache.GeolocationCache; import com.djrapitops.plan.system.cache.SessionCache; @@ -138,6 +140,7 @@ public class PlayerOnlineListener implements Listener { Player player = event.getPlayer(); UUID uuid = player.getUniqueId(); + UUID serverUUID = serverInfo.getServerUUID(); long time = System.currentTimeMillis(); AFKListener.AFK_TRACKER.performedAction(uuid, time); @@ -145,7 +148,8 @@ public class PlayerOnlineListener implements Listener { String world = player.getWorld().getName(); String gm = player.getGameMode().name(); - dbSystem.getDatabase().executeTransaction(new WorldNameStoreTransaction(serverInfo.getServerUUID(), world)); + Database database = dbSystem.getDatabase(); + database.executeTransaction(new WorldNameStoreTransaction(serverUUID, world)); InetAddress address = player.getAddress().getAddress(); @@ -154,18 +158,15 @@ public class PlayerOnlineListener implements Listener { boolean gatheringGeolocations = config.isTrue(DataGatheringSettings.GEOLOCATIONS); if (gatheringGeolocations) { - dbSystem.getDatabase().executeTransaction( + database.executeTransaction( new GeoInfoStoreTransaction(uuid, address, time, geolocationCache::getCountry) ); } - processing.submitCritical(() -> sessionCache.cacheSession(uuid, new Session(uuid, serverInfo.getServerUUID(), time, world, gm))); - runnableFactory.create("Player Register: " + uuid, - processors.player().registerProcessor(uuid, player::getFirstPlayed, playerName, - processors.player().nameProcessor(uuid, displayName), - processors.info().playerPageUpdateProcessor(uuid) - ) - ).runTaskAsynchronously(); + database.executeTransaction(new PlayerServerRegisterTransaction(uuid, player::getFirstPlayed, playerName, serverUUID)); + processing.submitCritical(() -> sessionCache.cacheSession(uuid, new Session(uuid, serverUUID, time, world, gm))); + processing.submitNonCritical(processors.player().nameProcessor(uuid, displayName)); + processing.submitNonCritical(processors.info().playerPageUpdateProcessor(uuid)); } @EventHandler(priority = EventPriority.MONITOR) diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/DataStoreQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/DataStoreQueries.java index 0cd5df75b..606c33b08 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/DataStoreQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/DataStoreQueries.java @@ -218,4 +218,25 @@ public class DataStoreQueries { } }; } + + /** + * Store UserInfo about a player on a server in the database. + * + * @param playerUUID UUID of the player. + * @param registered Time the player registered on the server. + * @param serverUUID UUID of the Plan server. + * @return Executable, use inside a {@link com.djrapitops.plan.db.access.transactions.Transaction} + */ + public static Executable registerUserInfo(UUID playerUUID, long registered, UUID serverUUID) { + return new ExecStatement(UserInfoTable.INSERT_STATEMENT) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, playerUUID.toString()); + statement.setLong(2, registered); + statement.setString(3, serverUUID.toString()); + statement.setBoolean(4, false); // Banned + statement.setBoolean(5, false); // Operator + } + }; + } } \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/PlayerFetchQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/PlayerFetchQueries.java index 6a7fe2212..5415e317b 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/PlayerFetchQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/PlayerFetchQueries.java @@ -135,7 +135,7 @@ 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 + * @return True if the player's BaseUser is found */ public static Query isPlayerRegistered(UUID playerUUID) { String sql = "SELECT COUNT(1) as c FROM " + UsersTable.TABLE_NAME + @@ -147,4 +147,24 @@ public class PlayerFetchQueries { } }; } + + /** + * Check if the player's UserInfo is registered. + * + * @param playerUUID UUID of the player. + * @param serverUUID UUID of the Plan server. + * @return True if the player's UserInfo is found + */ + public static Query isPlayerRegisteredOnServer(UUID playerUUID, UUID serverUUID) { + String sql = "SELECT COUNT(1) as c FROM " + UserInfoTable.TABLE_NAME + + " WHERE " + UserInfoTable.USER_UUID + "=?" + + " AND " + UserInfoTable.SERVER_UUID + "=?"; + return new HasMoreThanZeroQueryStatement(sql) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, playerUUID.toString()); + statement.setString(2, serverUUID.toString()); + } + }; + } } \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/access/transactions/events/PlayerRegisterTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/transactions/events/PlayerRegisterTransaction.java index a691efcab..320e7da61 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/access/transactions/events/PlayerRegisterTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/transactions/events/PlayerRegisterTransaction.java @@ -30,8 +30,8 @@ import java.util.function.LongSupplier; */ public class PlayerRegisterTransaction extends Transaction { - private final UUID playerUUID; - private final LongSupplier registered; + protected final UUID playerUUID; + protected final LongSupplier registered; private final String playerName; public PlayerRegisterTransaction(UUID playerUUID, LongSupplier registered, String playerName) { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/access/transactions/events/PlayerServerRegisterTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/transactions/events/PlayerServerRegisterTransaction.java new file mode 100644 index 000000000..dc4af70e0 --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/transactions/events/PlayerServerRegisterTransaction.java @@ -0,0 +1,46 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.db.access.transactions.events; + +import com.djrapitops.plan.db.access.queries.DataStoreQueries; +import com.djrapitops.plan.db.access.queries.PlayerFetchQueries; + +import java.util.UUID; +import java.util.function.LongSupplier; + +/** + * Transaction for registering player's BaseUser and UserInfo to the database. + * + * @author Rsl1122 + */ +public class PlayerServerRegisterTransaction extends PlayerRegisterTransaction { + + private final UUID serverUUID; + + public PlayerServerRegisterTransaction(UUID playerUUID, LongSupplier registered, String playerName, UUID serverUUID) { + super(playerUUID, registered, playerName); + this.serverUUID = serverUUID; + } + + @Override + protected void performOperations() { + super.performOperations(); + if (!query(PlayerFetchQueries.isPlayerRegisteredOnServer(playerUUID, serverUUID))) { + execute(DataStoreQueries.registerUserInfo(playerUUID, registered.getAsLong(), serverUUID)); + } + } +} \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/UserInfoTable.java b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/UserInfoTable.java index f2cdeaca9..f8729f731 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/UserInfoTable.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/UserInfoTable.java @@ -24,7 +24,6 @@ import com.djrapitops.plan.db.access.QueryStatement; import com.djrapitops.plan.db.patches.UserInfoOptimizationPatch; import com.djrapitops.plan.db.patches.Version10Patch; import com.djrapitops.plan.db.sql.parsing.CreateTableParser; -import com.djrapitops.plan.db.sql.parsing.Select; import com.djrapitops.plan.db.sql.parsing.Sql; import com.djrapitops.plan.db.sql.parsing.Update; @@ -78,43 +77,6 @@ public class UserInfoTable extends Table { .toString(); } - public void registerUserInfo(UUID uuid, long registered) { - execute(new ExecStatement(INSERT_STATEMENT) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setString(1, uuid.toString()); - statement.setLong(2, registered); - statement.setString(3, getServerUUID().toString()); - statement.setBoolean(4, false); - statement.setBoolean(5, false); - } - }); - } - - public boolean isRegistered(UUID uuid, UUID serverUUID) { - String sql = Select.from(TABLE_NAME, "COUNT(" + USER_UUID + ") as c") - .where(USER_UUID + "=?") - .and(SERVER_UUID + "=?") - .toString(); - - return query(new QueryStatement(sql) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setString(1, uuid.toString()); - statement.setString(2, serverUUID.toString()); - } - - @Override - public Boolean processResults(ResultSet set) throws SQLException { - return set.next() && set.getInt("c") >= 1; - } - }); - } - - public boolean isRegistered(UUID uuid) { - return isRegistered(uuid, getServerUUID()); - } - public void updateOpStatus(UUID uuid, boolean op) { String sql = Update.values(TABLE_NAME, OP) .where(USER_UUID + "=?") @@ -177,19 +139,6 @@ public class UserInfoTable extends Table { }); } - /** - * Used for getting info of all users on THIS server. - * - * @return List of UserInfo objects. - */ - public List getServerUserInfo() { - return getServerUserInfo(getServerUUID()); - } - - public boolean isRegisteredOnThisServer(UUID player) { - return isRegistered(player, getServerUUID()); - } - public Set getSavedUUIDs(UUID serverUUID) { String sql = "SELECT " + USER_UUID + " FROM " + TABLE_NAME + " WHERE " + SERVER_UUID + "=?"; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/operation/CheckOperations.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/operation/CheckOperations.java index 5fb3a999c..7ae6cba28 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/operation/CheckOperations.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/operation/CheckOperations.java @@ -21,9 +21,6 @@ import java.util.UUID; @Deprecated public interface CheckOperations { - @Deprecated - boolean isPlayerRegisteredOnThisServer(UUID player); - @Deprecated boolean isServerInDatabase(UUID serverUUID); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/operation/SaveOperations.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/operation/SaveOperations.java index 2edab1461..0192ce43b 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/operation/SaveOperations.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/operation/SaveOperations.java @@ -79,9 +79,6 @@ public interface SaveOperations { @Deprecated void playerDisplayName(UUID uuid, Nickname nickname); - @Deprecated - void registerNewUserOnThisServer(UUID uuid, long registered); - @Deprecated void insertTPSforThisServer(TPS tps); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLCheckOps.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLCheckOps.java index f7ad320da..6861ebd31 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLCheckOps.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLCheckOps.java @@ -27,11 +27,6 @@ public class SQLCheckOps extends SQLOps implements CheckOperations { super(db); } - @Override - public boolean isPlayerRegisteredOnThisServer(UUID player) { - return userInfoTable.isRegisteredOnThisServer(player); - } - @Override public boolean isServerInDatabase(UUID serverUUID) { return serverTable.getServerID(serverUUID).isPresent(); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLSaveOps.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLSaveOps.java index 38496e6f0..76e64e391 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLSaveOps.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLSaveOps.java @@ -152,11 +152,6 @@ public class SQLSaveOps extends SQLOps implements SaveOperations { nicknamesTable.saveUserName(uuid, nickname); } - @Override - public void registerNewUserOnThisServer(UUID uuid, long registered) { - userInfoTable.registerUserInfo(uuid, registered); - } - @Override public void insertTPSforThisServer(TPS tps) { tpsTable.insertTPS(tps); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/PlayerProcessors.java b/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/PlayerProcessors.java index 673362def..c632c7654 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/PlayerProcessors.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/PlayerProcessors.java @@ -30,7 +30,6 @@ import javax.inject.Singleton; import java.util.List; import java.util.UUID; import java.util.function.BooleanSupplier; -import java.util.function.LongSupplier; /** * Factory for creating Runnables related to Player data to run with {@link com.djrapitops.plan.system.processing.Processing}. @@ -82,8 +81,4 @@ public class PlayerProcessors { return new PingInsertProcessor(uuid, serverInfo.get().getServerUUID(), pingList, dbSystem.get().getDatabase()); } - public RegisterProcessor registerProcessor(UUID uuid, LongSupplier registered, String name, Runnable... afterProcess) { - return new RegisterProcessor(uuid, registered, name, processing.get(), dbSystem.get().getDatabase(), afterProcess); - } - } \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/RegisterProcessor.java b/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/RegisterProcessor.java deleted file mode 100644 index 6a70dc63d..000000000 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/RegisterProcessor.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * This file is part of Player Analytics (Plan). - * - * Plan is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License v3 as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Plan is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Plan. If not, see . - */ -package com.djrapitops.plan.system.processing.processors.player; - -import com.djrapitops.plan.db.Database; -import com.djrapitops.plan.db.access.transactions.events.PlayerRegisterTransaction; -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; -import com.djrapitops.plugin.task.AbsRunnable; -import com.djrapitops.plugin.utilities.Verify; - -import java.util.UUID; -import java.util.function.LongSupplier; - -/** - * Registers the user to the database and marks first session if the user has no actions. - * - * @author Rsl1122 - */ -public class RegisterProcessor extends AbsRunnable { - - private final UUID uuid; - private final LongSupplier registered; - private final String name; - private final Runnable[] afterProcess; - - private final Processing processing; - private final Database database; - - RegisterProcessor( - UUID uuid, LongSupplier registered, String name, - Processing processing, Database database, - Runnable... afterProcess - ) { - this.uuid = uuid; - this.registered = registered; - this.name = name; - this.processing = processing; - this.database = database; - this.afterProcess = afterProcess; - } - - @Override - public void run() { - Verify.nullCheck(uuid, () -> new IllegalStateException("UUID was null")); - - CheckOperations check = database.check(); - SaveOperations save = database.save(); - try { - database.executeTransaction(new PlayerRegisterTransaction(uuid, registered, name)); - if (!check.isPlayerRegisteredOnThisServer(uuid)) { - save.registerNewUserOnThisServer(uuid, registered.getAsLong()); - } - } finally { - for (Runnable runnable : afterProcess) { - processing.submit(runnable); - } - cancel(); - } - } -} diff --git a/Plan/common/src/test/java/com/djrapitops/plan/db/CommonDBTest.java b/Plan/common/src/test/java/com/djrapitops/plan/db/CommonDBTest.java index df7a13d47..18cf493c1 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/db/CommonDBTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/db/CommonDBTest.java @@ -33,10 +33,7 @@ import com.djrapitops.plan.db.access.Query; import com.djrapitops.plan.db.access.queries.*; import com.djrapitops.plan.db.access.queries.containers.ContainerFetchQueries; import com.djrapitops.plan.db.access.transactions.*; -import com.djrapitops.plan.db.access.transactions.events.CommandStoreTransaction; -import com.djrapitops.plan.db.access.transactions.events.GeoInfoStoreTransaction; -import com.djrapitops.plan.db.access.transactions.events.PlayerRegisterTransaction; -import com.djrapitops.plan.db.access.transactions.events.WorldNameStoreTransaction; +import com.djrapitops.plan.db.access.transactions.events.*; import com.djrapitops.plan.db.patches.Patch; import com.djrapitops.plan.db.sql.tables.*; import com.djrapitops.plan.system.PlanSystem; @@ -226,7 +223,7 @@ public abstract class CommonDBTest { } private void saveUserOne() { - db.executeTransaction(new PlayerRegisterTransaction(playerUUID, () -> 123456789L, "Test")); + playerIsRegisteredToBothTables(); db.getUsersTable().kicked(playerUUID); } @@ -400,7 +397,7 @@ public abstract class CommonDBTest { @Test public void userInfoTableStoresCorrectUserInformation() { - userRegisterChecksReturnCorrectValues(); + saveUserOne(); List userInfo = db.query(PlayerFetchQueries.playerServerSpecificUserInformation(playerUUID)); List expected = Collections.singletonList(new UserInfo(playerUUID, serverUUID, 223456789L, false, false)); @@ -408,24 +405,9 @@ public abstract class CommonDBTest { assertEquals(expected, userInfo); } - @Test - public void userRegisterChecksReturnCorrectValues() { - UsersTable usersTable = db.getUsersTable(); - assertFalse(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID))); - saveUserOne(); - assertTrue(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID))); - - UserInfoTable userInfoTable = db.getUserInfoTable(); - assertFalse(userInfoTable.isRegistered(playerUUID)); - userInfoTable.registerUserInfo(playerUUID, 223456789L); - assertTrue(userInfoTable.isRegistered(playerUUID)); - - assertEquals(123456789L, (long) db.getUsersTable().getRegisterDates().get(0)); - } - @Test public void userInfoTableUpdatesBanStatus() { - userRegisterChecksReturnCorrectValues(); + saveUserOne(); db.getUserInfoTable().updateBanStatus(playerUUID, true); @@ -437,7 +419,7 @@ public abstract class CommonDBTest { @Test public void userInfoTableUpdatesOperatorStatus() { - userRegisterChecksReturnCorrectValues(); + saveUserOne(); db.getUserInfoTable().updateOpStatus(playerUUID, true); @@ -484,12 +466,10 @@ public abstract class CommonDBTest { saveUserTwo(); UserInfoTable userInfoTable = db.getUserInfoTable(); - UsersTable usersTable = db.getUsersTable(); SessionsTable sessionsTable = db.getSessionsTable(); NicknamesTable nicknamesTable = db.getNicknamesTable(); - db.executeTransaction(new PlayerRegisterTransaction(playerUUID, () -> 223456789L, "Test_name")); - userInfoTable.registerUserInfo(playerUUID, 223456789L); + db.executeTransaction(new PlayerServerRegisterTransaction(playerUUID, () -> 223456789L, "Test_name", serverUUID)); saveTwoWorlds(); Session session = new Session(playerUUID, serverUUID, 12345L, "", ""); @@ -506,7 +486,7 @@ public abstract class CommonDBTest { db.executeTransaction(new RemovePlayerTransaction(playerUUID)); assertFalse(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID))); - assertFalse(userInfoTable.isRegistered(playerUUID)); + assertFalse(db.query(PlayerFetchQueries.isPlayerRegisteredOnServer(playerUUID, serverUUID))); assertTrue(nicknamesTable.getNicknames(playerUUID).isEmpty()); assertTrue(db.query(PlayerFetchQueries.playerGeoInfo(playerUUID)).isEmpty()); assertTrue(sessionsTable.getSessions(playerUUID).isEmpty()); @@ -546,7 +526,6 @@ public abstract class CommonDBTest { saveUserOne(); saveUserTwo(); - userInfoTable.registerUserInfo(playerUUID, 223456789L); saveTwoWorlds(); Session session = new Session(playerUUID, serverUUID, 12345L, "", ""); @@ -778,13 +757,20 @@ public abstract class CommonDBTest { } @Test - public void testRegister() { + public void playerIsRegisteredToUsersTable() { assertFalse(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID))); - assertFalse(db.check().isPlayerRegisteredOnThisServer(playerUUID)); db.executeTransaction(new PlayerRegisterTransaction(playerUUID, () -> 1000L, "name")); - db.save().registerNewUserOnThisServer(playerUUID, 500L); assertTrue(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID))); - assertTrue(db.check().isPlayerRegisteredOnThisServer(playerUUID)); + assertFalse(db.query(PlayerFetchQueries.isPlayerRegisteredOnServer(playerUUID, serverUUID))); + } + + @Test + public void playerIsRegisteredToBothTables() { + assertFalse(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID))); + assertFalse(db.query(PlayerFetchQueries.isPlayerRegisteredOnServer(playerUUID, serverUUID))); + db.executeTransaction(new PlayerServerRegisterTransaction(playerUUID, () -> 1000L, "name", serverUUID)); + assertTrue(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID))); + assertTrue(db.query(PlayerFetchQueries.isPlayerRegisteredOnServer(playerUUID, serverUUID))); } @Test diff --git a/Plan/sponge/src/main/java/com/djrapitops/plan/system/listeners/sponge/SpongePlayerListener.java b/Plan/sponge/src/main/java/com/djrapitops/plan/system/listeners/sponge/SpongePlayerListener.java index d44c2f46c..52699ac19 100644 --- a/Plan/sponge/src/main/java/com/djrapitops/plan/system/listeners/sponge/SpongePlayerListener.java +++ b/Plan/sponge/src/main/java/com/djrapitops/plan/system/listeners/sponge/SpongePlayerListener.java @@ -17,7 +17,9 @@ package com.djrapitops.plan.system.listeners.sponge; import com.djrapitops.plan.data.container.Session; +import com.djrapitops.plan.db.Database; import com.djrapitops.plan.db.access.transactions.events.GeoInfoStoreTransaction; +import com.djrapitops.plan.db.access.transactions.events.PlayerServerRegisterTransaction; import com.djrapitops.plan.db.access.transactions.events.WorldNameStoreTransaction; import com.djrapitops.plan.system.cache.GeolocationCache; import com.djrapitops.plan.system.cache.SessionCache; @@ -142,6 +144,7 @@ public class SpongePlayerListener { Player player = event.getTargetEntity(); UUID uuid = player.getUniqueId(); + UUID serverUUID = serverInfo.getServerUUID(); long time = System.currentTimeMillis(); SpongeAFKListener.AFK_TRACKER.performedAction(uuid, time); @@ -150,7 +153,8 @@ public class SpongePlayerListener { Optional gameMode = player.getGameModeData().get(Keys.GAME_MODE); String gm = gameMode.map(mode -> mode.getName().toUpperCase()).orElse("ADVENTURE"); - dbSystem.getDatabase().executeTransaction(new WorldNameStoreTransaction(serverInfo.getServerUUID(), world)); + Database database = dbSystem.getDatabase(); + database.executeTransaction(new WorldNameStoreTransaction(serverUUID, world)); InetAddress address = player.getConnection().getAddress().getAddress(); @@ -159,18 +163,15 @@ public class SpongePlayerListener { boolean gatheringGeolocations = config.isTrue(DataGatheringSettings.GEOLOCATIONS); if (gatheringGeolocations) { - dbSystem.getDatabase().executeTransaction( + database.executeTransaction( new GeoInfoStoreTransaction(uuid, address, time, geolocationCache::getCountry) ); } - processing.submitCritical(() -> sessionCache.cacheSession(uuid, new Session(uuid, serverInfo.getServerUUID(), time, world, gm))); - runnableFactory.create("Player Register: " + uuid, - processors.player().registerProcessor(uuid, () -> time, playerName, - processors.player().nameProcessor(uuid, displayName), - processors.info().playerPageUpdateProcessor(uuid) - ) - ).runTaskAsynchronously(); + database.executeTransaction(new PlayerServerRegisterTransaction(uuid, () -> time, playerName, serverUUID)); + processing.submitCritical(() -> sessionCache.cacheSession(uuid, new Session(uuid, serverUUID, time, world, gm))); + processing.submitNonCritical(processors.player().nameProcessor(uuid, displayName)); + processing.submitNonCritical(processors.info().playerPageUpdateProcessor(uuid)); } @Listener(order = Order.POST)