diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/containers/PlayerContainerQuery.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/containers/PlayerContainerQuery.java index bb15249bd..3b26f7776 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/containers/PlayerContainerQuery.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/containers/PlayerContainerQuery.java @@ -16,7 +16,9 @@ */ package com.djrapitops.plan.db.access.queries.containers; +import com.djrapitops.plan.data.container.BaseUser; import com.djrapitops.plan.data.container.Session; +import com.djrapitops.plan.data.store.Key; import com.djrapitops.plan.data.store.containers.PlayerContainer; import com.djrapitops.plan.data.store.keys.PlayerKeys; import com.djrapitops.plan.data.store.keys.SessionKeys; @@ -25,10 +27,7 @@ import com.djrapitops.plan.data.store.mutators.SessionsMutator; import com.djrapitops.plan.data.time.WorldTimes; import com.djrapitops.plan.db.SQLDB; import com.djrapitops.plan.db.access.Query; -import com.djrapitops.plan.db.access.queries.objects.GeoInfoQueries; -import com.djrapitops.plan.db.access.queries.objects.NicknameQueries; -import com.djrapitops.plan.db.access.queries.objects.PingQueries; -import com.djrapitops.plan.db.access.queries.objects.WorldTimesQueries; +import com.djrapitops.plan.db.access.queries.objects.*; import java.util.HashMap; import java.util.List; @@ -54,7 +53,12 @@ public class PlayerContainerQuery implements Query { PlayerContainer container = new PlayerContainer(); container.putRawData(PlayerKeys.UUID, uuid); - container.putAll(db.getUsersTable().getUserInformation(uuid)); + Key baseUserKey = new Key<>(BaseUser.class, "BASE_USER"); + container.putSupplier(baseUserKey, () -> db.query(BaseUserQueries.fetchCommonUserInformationOfPlayer(uuid)).orElse(null)); + container.putSupplier(PlayerKeys.REGISTERED, () -> container.getValue(baseUserKey).map(BaseUser::getRegistered).orElse(null)); + container.putSupplier(PlayerKeys.NAME, () -> container.getValue(baseUserKey).map(BaseUser::getName).orElse(null)); + container.putSupplier(PlayerKeys.KICK_COUNT, () -> container.getValue(baseUserKey).map(BaseUser::getTimesKicked).orElse(null)); + container.putCachingSupplier(PlayerKeys.GEO_INFO, () -> db.query(GeoInfoQueries.fetchPlayerGeoInformation(uuid))); container.putCachingSupplier(PlayerKeys.PING, () -> db.query(PingQueries.fetchPingDataOfPlayer(uuid))); container.putCachingSupplier(PlayerKeys.NICKNAMES, () -> db.query(NicknameQueries.fetchNicknameDataOfPlayer(uuid))); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/BaseUserQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/BaseUserQueries.java index 5d59e4f9d..72b8a3602 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/BaseUserQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/BaseUserQueries.java @@ -83,6 +83,30 @@ public class BaseUserQueries { }; } + public static Query> fetchCommonUserInformationOfPlayer(UUID playerUUID) { + String sql = Select.all(UsersTable.TABLE_NAME).where(UsersTable.USER_UUID + "=?").toString(); + + return new QueryStatement>(sql, 20000) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, playerUUID.toString()); + } + + @Override + public Optional processResults(ResultSet set) throws SQLException { + if (set.next()) { + UUID playerUUID = UUID.fromString(set.getString(UsersTable.USER_UUID)); + String name = set.getString(UsersTable.USER_NAME); + long registered = set.getLong(UsersTable.REGISTERED); + int kicked = set.getInt(UsersTable.TIMES_KICKED); + + return Optional.of(new BaseUser(playerUUID, name, registered, kicked)); + } + return Optional.empty(); + } + }; + } + public static Query> fetchServerBaseUsers(UUID serverUUID) { String sql = "SELECT " + UsersTable.TABLE_NAME + "." + UsersTable.USER_UUID + ", " + diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/UsersTable.java b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/UsersTable.java index 13a381b19..c311619e1 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/UsersTable.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/UsersTable.java @@ -16,10 +16,6 @@ */ package com.djrapitops.plan.db.sql.tables; -import com.djrapitops.plan.data.store.Key; -import com.djrapitops.plan.data.store.containers.DataContainer; -import com.djrapitops.plan.data.store.containers.SupplierDataContainer; -import com.djrapitops.plan.data.store.keys.PlayerKeys; import com.djrapitops.plan.db.DBType; import com.djrapitops.plan.db.SQLDB; import com.djrapitops.plan.db.access.ExecStatement; @@ -201,44 +197,4 @@ public class UsersTable extends Table { } }); } - - public DataContainer getUserInformation(UUID uuid) { - Key key = new Key<>(DataContainer.class, "plan_users_data"); - DataContainer returnValue = new SupplierDataContainer(); - - returnValue.putSupplier(key, () -> getUserInformationDataContainer(uuid)); - returnValue.putRawData(PlayerKeys.UUID, uuid); - returnValue.putSupplier(PlayerKeys.REGISTERED, () -> returnValue.getUnsafe(key).getValue(PlayerKeys.REGISTERED).orElse(null)); - returnValue.putSupplier(PlayerKeys.NAME, () -> returnValue.getUnsafe(key).getValue(PlayerKeys.NAME).orElse(null)); - returnValue.putSupplier(PlayerKeys.KICK_COUNT, () -> returnValue.getUnsafe(key).getValue(PlayerKeys.KICK_COUNT).orElse(null)); - return returnValue; - } - - private DataContainer getUserInformationDataContainer(UUID uuid) { - String sql = "SELECT * FROM " + tableName + " WHERE " + USER_UUID + "=?"; - - return query(new QueryStatement(sql) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setString(1, uuid.toString()); - } - - @Override - public DataContainer processResults(ResultSet set) throws SQLException { - DataContainer container = new SupplierDataContainer(); - - if (set.next()) { - long registered = set.getLong(REGISTERED); - String name = set.getString(USER_NAME); - int timesKicked = set.getInt(TIMES_KICKED); - - container.putRawData(PlayerKeys.REGISTERED, registered); - container.putRawData(PlayerKeys.NAME, name); - container.putRawData(PlayerKeys.KICK_COUNT, timesKicked); - } - - return container; - } - }); - } }