Skip to content

Commit 79c201d

Browse files
committed
📝 Imrpove data reading
1 parent a1d6ecc commit 79c201d

1 file changed

Lines changed: 41 additions & 11 deletions

File tree

src/main/java/fr/maxlego08/autoclick/storage/StorageManager.java

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import java.util.*;
2323
import java.util.function.Consumer;
24+
import java.util.function.Function;
2425
import java.util.stream.Collectors;
2526

2627
public class StorageManager {
@@ -182,6 +183,28 @@ private void async(Runnable runnable) {
182183
this.plugin.getServer().getScheduler().runTaskAsynchronously(this.plugin, runnable);
183184
}
184185

186+
/**
187+
* Creates a Session object from a SessionDTO.
188+
*
189+
* @param dto The SessionDTO to convert.
190+
* @return A new Session object.
191+
*/
192+
private Session createSessionFromDTO(SessionDTO dto) {
193+
var session = new Session(dto.getUniqueId(), dto.started_at().getTime(), dto.finished_at().getTime(), dto.getDifferences());
194+
session.setId(dto.id());
195+
return session;
196+
}
197+
198+
/**
199+
* Creates an index map of InvalidSessionDTO by session_id for O(1) lookup.
200+
*
201+
* @param invalidSessions The list of invalid sessions to index.
202+
* @return A map with session_id as key and InvalidSessionDTO as value.
203+
*/
204+
private Map<Long, InvalidSessionDTO> buildInvalidSessionIndex(List<InvalidSessionDTO> invalidSessions) {
205+
return invalidSessions.stream().collect(Collectors.toMap(InvalidSessionDTO::session_id, Function.identity(), (a, b) -> a));
206+
}
207+
185208
/**
186209
* Asynchronously selects all sessions from the database and passes them to a consumer.
187210
* <p>
@@ -200,12 +223,15 @@ public List<ClickSession> getSessions(UUID uniqueId) {
200223
var ids = sessions.stream().map(e -> String.valueOf(e.id())).toList();
201224

202225
var invalidSessions = this.requestHelper.select(Tables.INVALID_SESSIONS, InvalidSessionDTO.class, table -> table.whereIn("session_id", ids));
226+
var invalidSessionIndex = buildInvalidSessionIndex(invalidSessions);
203227

204228
List<ClickSession> clickSessions = new ArrayList<>();
205229
for (SessionDTO session : sessions) {
206-
var clickSession = new Session(session.getUniqueId(), session.started_at().getTime(), session.finished_at().getTime(), session.getDifferences());
207-
clickSession.setId(session.id());
208-
invalidSessions.stream().filter(e -> e.session_id() == clickSession.getId()).findFirst().ifPresent(clickSession::setInvalidSession);
230+
var clickSession = createSessionFromDTO(session);
231+
InvalidSessionDTO invalid = invalidSessionIndex.get(clickSession.getId());
232+
if (invalid != null) {
233+
clickSession.setInvalidSession(invalid);
234+
}
209235
clickSessions.add(clickSession);
210236
}
211237
return clickSessions;
@@ -226,11 +252,14 @@ public void getPlayers(Consumer<List<PlayerInfo>> consumer) {
226252

227253
var sessions = this.requestHelper.selectAll(Tables.SESSIONS, SessionDTO.class);
228254
var invalidSessions = this.requestHelper.selectAll(Tables.INVALID_SESSIONS, InvalidSessionDTO.class);
255+
var invalidSessionIndex = buildInvalidSessionIndex(invalidSessions);
229256

230257
for (SessionDTO session : sessions) {
231-
var clickSession = new Session(session.getUniqueId(), session.started_at().getTime(), session.finished_at().getTime(), session.getDifferences());
232-
clickSession.setId(session.id());
233-
invalidSessions.stream().filter(e -> e.session_id() == clickSession.getId()).findFirst().ifPresent(clickSession::setInvalidSession);
258+
var clickSession = createSessionFromDTO(session);
259+
InvalidSessionDTO invalid = invalidSessionIndex.get(clickSession.getId());
260+
if (invalid != null) {
261+
clickSession.setInvalidSession(invalid);
262+
}
234263
playerSessions.computeIfAbsent(session.getUniqueId(), k -> new ArrayList<>()).add(clickSession);
235264
}
236265

@@ -241,15 +270,16 @@ public void getPlayers(Consumer<List<PlayerInfo>> consumer) {
241270
private void verified(List<InvalidSessionDTO> invalidSessions, Consumer<List<ClickSession>> consumer) {
242271
var ids = invalidSessions.stream().map(e -> String.valueOf(e.session_id())).toList();
243272
var sessions = this.requestHelper.select(Tables.SESSIONS, SessionDTO.class, table -> table.whereIn("id", ids));
273+
var invalidSessionIndex = buildInvalidSessionIndex(invalidSessions);
244274

245275
List<ClickSession> clickSessions = new ArrayList<>();
246276
for (SessionDTO session : sessions) {
247-
var clickSession = new Session(session.getUniqueId(), session.started_at().getTime(), session.finished_at().getTime(), session.getDifferences());
248-
clickSession.setId(session.id());
249-
invalidSessions.stream().filter(e -> e.session_id() == clickSession.getId()).findFirst().ifPresent(e -> {
250-
clickSession.setInvalidSession(e);
277+
var clickSession = createSessionFromDTO(session);
278+
InvalidSessionDTO invalid = invalidSessionIndex.get(clickSession.getId());
279+
if (invalid != null) {
280+
clickSession.setInvalidSession(invalid);
251281
clickSessions.add(clickSession);
252-
});
282+
}
253283
}
254284
consumer.accept(clickSessions.stream().sorted(Comparator.comparingLong(ClickSession::getStartedAt).reversed()).toList());
255285
}

0 commit comments

Comments
 (0)