diff --git a/src/main/java/net/frozenorb/apiv3/model/User.java b/src/main/java/net/frozenorb/apiv3/model/User.java index 72ac26d..8e2b756 100644 --- a/src/main/java/net/frozenorb/apiv3/model/User.java +++ b/src/main/java/net/frozenorb/apiv3/model/User.java @@ -153,6 +153,23 @@ public final class User { usersCollection.find(new Document("lastUsernameLower", lastUsernameLower.toLowerCase())).first(SyncUtils.vertxWrap(callback)); } + public static void findByIdGrouped(Set search, SingleResultCallback> callback) { + usersCollection.find(new Document("_id", new Document("$in", search))).into(new LinkedList<>(), SyncUtils.vertxWrap((users, error) -> { + if (error != null) { + callback.onResult(null, error); + return; + } + + Map result = new HashMap<>(); + + for (User user : users) { + result.put(user.getId(), user); + } + + callback.onResult(result, null); + })); + } + public static void findOrCreateByIdGrouped(Map search, SingleResultCallback> callback) { usersCollection.find(new Document("_id", new Document("$in", search.keySet()))).into(new LinkedList<>(), SyncUtils.vertxWrap((users, error) -> { if (error != null) { diff --git a/src/main/java/net/frozenorb/apiv3/route/GETDumpsType.java b/src/main/java/net/frozenorb/apiv3/route/GETDumpsType.java index 30684a4..0936078 100644 --- a/src/main/java/net/frozenorb/apiv3/route/GETDumpsType.java +++ b/src/main/java/net/frozenorb/apiv3/route/GETDumpsType.java @@ -179,6 +179,37 @@ public final class GETDumpsType implements Handler { APIv3.respondJson(ctx, 200, grantCache.get(serverGroup.toLowerCase())); return; + case "rankusers": + Rank rank = Rank.findById(ctx.request().getParam("rank")); + + if (rank == null) { + ErrorUtils.respondNotFound(ctx, "Rank", ctx.request().getParam("rank")); + return; + } + + Grant.findByRank(ImmutableSet.of(rank), (grants, grantError) -> { + if (grantError != null) { + ErrorUtils.respondInternalError(ctx, grantError); + return; + } + + Set uuids = new HashSet<>(); + + for (Grant grant : grants) { + if (grant.isActive()) { + uuids.add(grant.getUser()); + } + } + + User.findByIdGrouped(uuids, (users, userError) -> { + if (userError != null) { + ErrorUtils.respondInternalError(ctx, userError); + } else { + APIv3.respondJson(ctx, 200, users.values()); + } + }); + }); + return; case "ipintel": APIv3.respondJson(ctx, 200, ipIntelCache.values()); return;