From 9406ffa19110b5dc67765bb865176ed747130930 Mon Sep 17 00:00:00 2001 From: Sammers21 Date: Sun, 16 Jul 2023 02:38:58 +0300 Subject: [PATCH] releaseb fixing the issue with 429 code --- src/io/github/sammers/pla/Main.java | 4 ---- .../sammers/pla/blizzard/Achievements.java | 21 +++++++++++++++++++ .../sammers/pla/blizzard/BlizzardAPI.java | 3 +++ .../sammers/pla/blizzard/WowAPICharacter.java | 21 ++++--------------- 4 files changed, 28 insertions(+), 21 deletions(-) create mode 100644 src/io/github/sammers/pla/blizzard/Achievements.java diff --git a/src/io/github/sammers/pla/Main.java b/src/io/github/sammers/pla/Main.java index 52c9e287..019a08e1 100644 --- a/src/io/github/sammers/pla/Main.java +++ b/src/io/github/sammers/pla/Main.java @@ -3,12 +3,10 @@ import io.github.sammers.pla.blizzard.BlizzardAPI; import io.github.sammers.pla.db.DB; import io.github.sammers.pla.http.Http; -import io.github.sammers.pla.http.JsonConvertable; import io.github.sammers.pla.logic.Ladder; import io.reactivex.Scheduler; import io.reactivex.schedulers.Schedulers; import io.vertx.core.VertxOptions; -import io.vertx.core.json.JsonArray; import io.vertx.core.json.JsonObject; import io.vertx.reactivex.core.Vertx; import io.vertx.reactivex.ext.mongo.MongoClient; @@ -17,12 +15,10 @@ import java.time.format.DateTimeFormatter; import java.util.Locale; -import java.util.Map; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -import static io.github.sammers.pla.logic.Ladder.EU; import static java.time.format.DateTimeFormatter.ISO_DATE_TIME; public class Main { diff --git a/src/io/github/sammers/pla/blizzard/Achievements.java b/src/io/github/sammers/pla/blizzard/Achievements.java new file mode 100644 index 00000000..17700c76 --- /dev/null +++ b/src/io/github/sammers/pla/blizzard/Achievements.java @@ -0,0 +1,21 @@ +package io.github.sammers.pla.blizzard; + +import io.github.sammers.pla.http.JsonConvertable; +import io.vertx.core.json.JsonObject; + +public record Achievements() implements JsonConvertable { + + public static Achievements parse(JsonObject achievements) { + return new Achievements(); + } + + public static Achievements fromJson(JsonObject json) { + return new Achievements(); + } + + @Override + public JsonObject toJson() { + return new JsonObject(); + } + +} diff --git a/src/io/github/sammers/pla/blizzard/BlizzardAPI.java b/src/io/github/sammers/pla/blizzard/BlizzardAPI.java index 59a26643..da6bb6df 100644 --- a/src/io/github/sammers/pla/blizzard/BlizzardAPI.java +++ b/src/io/github/sammers/pla/blizzard/BlizzardAPI.java @@ -125,6 +125,9 @@ Maybe maybeResponse(String namespace, String url) { .flatMapMaybe(resp -> { if (resp.statusCode() == 200) { return Maybe.just(resp.bodyAsJsonObject()); + } else if (resp.statusCode() == 429){ + log.info("429 Retrying " + url + " " + resp.statusMessage()); + return rpsToken().andThen(rpsToken()).andThen(maybeResponse(namespace, url)); } else { return Maybe.error(new IllegalStateException("Error getting " + url + " " + resp.statusCode() + " " + resp.statusMessage() + " " + resp.bodyAsString())); } diff --git a/src/io/github/sammers/pla/blizzard/WowAPICharacter.java b/src/io/github/sammers/pla/blizzard/WowAPICharacter.java index 9097e3eb..e14ccd0b 100644 --- a/src/io/github/sammers/pla/blizzard/WowAPICharacter.java +++ b/src/io/github/sammers/pla/blizzard/WowAPICharacter.java @@ -127,7 +127,7 @@ */ public record WowAPICharacter(long id, String name, String realm, String gender, String fraction, String race, String activeSpec, int level, String clazz, int itemLevel, String region, - List brackets, Long lastUpdatedUTCms, Set pvpTitles, + List brackets, Long lastUpdatedUTCms, Achievements achievements , CharacterMedia media, String talents) implements JsonConvertable { public static WowAPICharacter parse( @@ -147,19 +147,6 @@ public static WowAPICharacter parse( .orElse(""); List list = brackets.stream().map(PvpBracket::parse).toList(); CharacterMedia media = CharacterMedia.parse(characterMedia); - Set pvpTitles = achievements.getJsonArray("achievements").stream() - .map(s -> ((JsonObject)s).getJsonObject("achievement").getString("name")) - .filter(s -> { - boolean r1Glad = s.matches("(\\w+)\\h(Gladiator|Legend)(.*)"); - return s.startsWith("Gladiator") - || s.startsWith("Duelist") - || s.startsWith("Rival") - || s.startsWith("Challenger") - || s.startsWith("Combatant") - || s.startsWith("Legend") - || r1Glad; - }) - .collect(Collectors.toSet()); Long lastUpdatedUTCms = Instant.now().toEpochMilli(); String name = entries.getString("name").substring(0, 1).toUpperCase() + entries.getString("name").substring(1); String realm = entries.getJsonObject("realm").getString("name").substring(0, 1).toUpperCase() + @@ -178,7 +165,7 @@ public static WowAPICharacter parse( region, list, lastUpdatedUTCms, - pvpTitles, + Achievements.parse(achievements), media, talents ); @@ -213,7 +200,7 @@ public static WowAPICharacter fromJson(JsonObject entries) { entries.getString("region"), brcktsFromJson, entries.getLong("lastUpdatedUTCms"), - Optional.ofNullable(entries.getJsonArray("pvpTitles")).map(x -> x.stream().map(o -> (String) o).collect(Collectors.toSet())).orElse(Set.of()), + Achievements.fromJson(entries.getJsonObject("achievements")), CharacterMedia.fromJson(entries.getJsonObject("media")), Optional.ofNullable(entries.getString("talents")).orElse("") ); @@ -235,7 +222,7 @@ public JsonObject toJson() { .put("region", region) .put("lastUpdatedUTCms", lastUpdatedUTCms) .put("brackets", new JsonArray(brackets.stream().map(PvpBracket::toJson).toList())) - .put("pvpTitles", new JsonArray(pvpTitles.stream().toList())) + .put("achievements", achievements.toJson()) .put("media", media.toJson()) .put("talents", talents); }