Skip to content

Commit 3769887

Browse files
committed
Fix Tests
Cache Updater
1 parent 1870954 commit 3769887

File tree

6 files changed

+74
-6
lines changed

6 files changed

+74
-6
lines changed

api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import com.javadiscord.jdi.internal.api.DiscordRequestDispatcher;
88
import com.javadiscord.jdi.internal.api.DiscordResponse;
99
import com.javadiscord.jdi.internal.api.DiscordResponseFuture;
10+
import com.javadiscord.jdi.internal.cache.Cache;
11+
import com.javadiscord.jdi.internal.utils.CacheUpdater;
1012

1113
import com.fasterxml.jackson.core.JsonProcessingException;
1214
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -17,9 +19,11 @@ public class DiscordResponseParser {
1719
private static final ObjectMapper OBJECT_MAPPER =
1820
JsonMapper.builder().addModule(new JavaTimeModule()).build();
1921
private final DiscordRequestDispatcher dispatcher;
22+
private final CacheUpdater cacheUpdater;
2023

21-
public DiscordResponseParser(DiscordRequestDispatcher dispatcher) {
24+
public DiscordResponseParser(DiscordRequestDispatcher dispatcher, Cache cache) {
2225
this.dispatcher = dispatcher;
26+
this.cacheUpdater = new CacheUpdater(cache);
2327
}
2428

2529
public <T> AsyncResponse<List<T>> callAndParseList(Class<T> clazz, DiscordRequest request) {
@@ -31,6 +35,7 @@ public <T> AsyncResponse<List<T>> callAndParseList(Class<T> clazz, DiscordReques
3135
try {
3236
List<T> resultList = parseResponseFromList(clazz, response.body());
3337
asyncResponse.setResult(resultList);
38+
cacheUpdater.updateCache(resultList);
3439
} catch (Exception e) {
3540
asyncResponse.setException(e);
3641
}
@@ -52,6 +57,7 @@ public <T> AsyncResponse<List<T>> callAndParseMap(String key, DiscordRequest req
5257
try {
5358
List<T> resultList = parseResponseFromMap(key, response.body());
5459
asyncResponse.setResult(resultList);
60+
cacheUpdater.updateCache(resultList);
5561
} catch (Exception e) {
5662
asyncResponse.setException(e);
5763
}
@@ -108,6 +114,7 @@ private <T> void success(
108114
result = OBJECT_MAPPER.readValue(response.body(), type);
109115
}
110116
asyncResponse.setResult(result);
117+
cacheUpdater.updateCache(result);
111118
} catch (JsonProcessingException e) {
112119
asyncResponse.setException(e);
113120
}

api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestDispatcher.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
import java.util.concurrent.atomic.AtomicBoolean;
1212
import java.util.stream.Stream;
1313

14-
import com.javadiscord.jdi.RateLimit;
15-
1614
import org.apache.logging.log4j.LogManager;
1715
import org.apache.logging.log4j.Logger;
1816

api/src/main/java/com/javadiscord/jdi/RateLimit.java renamed to api/src/main/java/com/javadiscord/jdi/internal/api/RateLimit.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.javadiscord.jdi;
1+
package com.javadiscord.jdi.internal.api;
22

33
public class RateLimit {
44
private String bucket;
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.javadiscord.jdi.internal.utils;
2+
3+
import java.lang.reflect.Field;
4+
import java.util.List;
5+
6+
import com.javadiscord.jdi.internal.cache.Cache;
7+
8+
import org.apache.logging.log4j.LogManager;
9+
import org.apache.logging.log4j.Logger;
10+
11+
public class CacheUpdater {
12+
13+
private final Cache cache;
14+
15+
private static final Logger LOGGER = LogManager.getLogger(CacheUpdater.class);
16+
17+
public CacheUpdater(Cache cache) {
18+
this.cache = cache;
19+
}
20+
21+
public <T> void updateCache(T result) {
22+
if (result == null) {
23+
return;
24+
}
25+
try {
26+
Field guildIdField = result.getClass().getDeclaredField("guildId");
27+
Field idField = result.getClass().getDeclaredField("id");
28+
29+
long guildId = getLongFromField(guildIdField, result);
30+
long id = getLongFromField(idField, result);
31+
32+
if (cache.getCacheForGuild(guildId) == null) {
33+
LOGGER.trace(
34+
"Failed to cache result of type {} with guildId of {}",
35+
result.getClass().getName(), guildId
36+
);
37+
} else {
38+
cache.getCacheForGuild(guildId).add(id, result);
39+
}
40+
41+
} catch (IllegalAccessException | NoSuchFieldException | NumberFormatException e) {
42+
LOGGER.trace(
43+
"Failed to cache result of type {}, cause: {}",
44+
result.getClass().getName(), e.getMessage()
45+
);
46+
}
47+
}
48+
49+
public <T> void updateCache(List<T> resultList) {
50+
resultList.forEach(this::updateCache);
51+
}
52+
53+
private <T> long getLongFromField(
54+
Field field,
55+
T result
56+
) throws IllegalAccessException, NumberFormatException {
57+
field.setAccessible(true);
58+
if (field.getType() == String.class) {
59+
return Long.parseLong((String) field.get(result));
60+
}
61+
return (long) field.get(result);
62+
}
63+
}

api/src/test/integration/helpers/LiveDiscordHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class LiveDiscordHelper {
1717
private static final CountDownLatch STARTUP_LATCH = new CountDownLatch(1);
1818
private static Guild guild;
1919

20-
private static class TestListener implements EventListener {
20+
public static class TestListener implements EventListener {
2121

2222
@Override
2323
public void onGuildCreate(Guild guild) {

core/src/main/java/com/javadiscord/jdi/core/Guild.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public Guild(GuildModel guild, Cache cache, Discord discord) {
3434
long guildId = guild.id();
3535

3636
DiscordResponseParser discordResponseParser =
37-
new DiscordResponseParser(discord.getDiscordRequestDispatcher());
37+
new DiscordResponseParser(discord.getDiscordRequestDispatcher(), cache);
3838

3939
this.applicationRequest = new ApplicationRequest(discordResponseParser, guildId);
4040
this.applicationRoleConnectionMetaRequest =

0 commit comments

Comments
 (0)