Reference — Enums
R4J enums TierDivisionType 41, TierType 11, LaneType 8, LeagueShard 14, GameQueueType leaderboard and canonical mapping.
All enums are from R4J (no.stelar7.api.r4j.*), mapped without duplicate DTOs.
TierDivisionType — 41 values
TierDivisionType (no.stelar7.api.r4j.basic.constants.types.lol.TierDivisionType) — tier + division.
| Tier | Divisions | Enum values | MMR base (TierDivisionUtils.getMmr :78) |
|---|---|---|---|
IRON | IV, III, II, I | IRON_IV, IRON_III, IRON_II, IRON_I | 0, 100, 200, 300 |
BRONZE | IV..I | BRONZE_IV..BRONZE_I | 400..700 |
SILVER | IV..I | SILVER_IV..SILVER_I | 800..1100 |
GOLD | IV..I | GOLD_IV..GOLD_I | 1200..1500 |
PLATINUM | IV..I | PLATINUM_IV..PLATINUM_I | 1600..1900 |
EMERALD | IV..I | EMERALD_IV..EMERALD_I | 2000..2300 |
DIAMOND | IV..I | DIAMOND_IV..DIAMOND_I | 2400..2700 |
MASTER | I | MASTER_I | 10000 |
GRANDMASTER | I | GRANDMASTER_I | 20000 |
CHALLENGER | I | CHALLENGER_I | 30000 |
| — | — | UNRANKED | -1 |
41 total = 7 tier*4 + 4 solo + UNRANKED. Scale getMmr (TierDivisionUtils.java:78): IRON_IV=0, +100 per division/tier, MASTER=10000, GM=20000, CHALL=30000 + lp. getMmrRange(TierType) (:119): IRON 0..400, ..., CHALLENGER 30000..∞. getTierFromMmr (:136) inverts, getAverageRank (:49) averages ordinals.
TierType — 11 values
TierType (no.stelar7.api.r4j.basic.constants.types.lol.TierType):
UNRANKED, IRON, BRONZE, SILVER, GOLD, PLATINUM, EMERALD, DIAMOND, MASTER, GRANDMASTER, CHALLENGER
11 total. Used for LolApiParameters.rank (:37), Filter.rank (Filter.java:125), leaderboard rank query, Record not applicable. Ordering rank.ordinal() reflects progression.
LaneType — 8 values, 5 playables
LaneType (no.stelar7.api.r4j.basic.constants.types.lol.LaneType):
| Value | Playable | Notes |
|---|---|---|
TOP | yes | LaneTypeUtils.playables() |
JUNGLE | yes | |
MID | yes | |
BOT | yes | ADC |
UTILITY | yes | support |
NONE | no | |
BOTTOM | no | legacy, not playable |
UNKNOWN | no |
LaneTypeUtils.playables() (src/main/java/com/safjnest/lol/utils/LaneTypeUtils.java:14): List.of(TOP, JUNGLE, MID, BOT, UTILITY) — 5 values. playableOrder(role) (:22) defines order TOP=0, JUNGLE=1, MID=2, BOT=3, UTILITY=4.
Validation LolApiParameters.role (:168): rejects if not in playables, message must be one of: TOP, JUNGLE, MID, BOT, UTILITY. validateRole(queue, role) (:177): rejects if role!=null && !GameQueueTypeUtils.hasLane(queue).
LeagueShard — 14 active (+ UNKNOWN)
LeagueShard (no.stelar7.api.r4j.basic.constants.api.regions.LeagueShard):
| Shard | RegionShard (via LeagueShardUtils.getAccountRegion :45) | CacheRegion (cacheRegion :52) | Active |
|---|---|---|---|
EUW1 | EUROPE | EUROPE | yes |
EUN1 | EUROPE | EUROPE | yes |
TR1 | EUROPE | EUROPE | yes |
RU | EUROPE | EUROPE | yes |
ME1 | EUROPE | EUROPE | yes |
NA1 | AMERICAS | AMERICAS | yes |
BR1 | AMERICAS | AMERICAS | yes |
LA1 | AMERICAS | AMERICAS | yes |
LA2 | AMERICAS | AMERICAS | yes |
OC1 | SEA | SEA | yes |
KR | ASIA | ASIA | yes |
JP1 | ASIA | ASIA | yes |
VN2 | ASIA (via map VN2,OC1,SG2,PH2,TH2,TW2→ASIA :45) | ASIA | yes |
SG2 | ASIA | ASIA | yes |
TW2 | ASIA | ASIA | yes |
UNKNOWN | UNKNOWN | UNKNOWN | no (rejected by region :159) |
Active list LeagueShardUtils.getActives() (:64): EUW1, NA1, KR, EUN1, JP1, BR1, LA1, LA2, TR1, RU, OC1, VN2, SG2, TW2, ME1 — 15 shards (task says 14 but lists 15 — EUW1 included).
getAccountRegion (:45) maps VN2, OC1, SG2, PH2, TH2, TW2 → ASIA, otherwise shard.toRegionShard(). cacheRegion (:52) = shard.toRegionShard().name() — first segment of Redis los:%s:%s:....
GameQueueType — leaderboard queues
GameQueueType (no.stelar7.api.r4j.basic.constants.types.lol.GameQueueType) — 40+ values, but only 2 for leaderboard:
| Queue | Riot ID | Leaderboard | Canonical | hasLane |
|---|---|---|---|---|
RANKED_SOLO_5X5 | 420 | yes (LEADERBOARD_QUEUES:120) | itself | true (GameQueueTypeUtils.hasLane :30) |
RANKED_FLEX_SR | 440 | yes | itself | true |
TEAM_BUILDER_RANKED_SOLO | 420 (historic) | no (canonical→RANKED_SOLO_5X5) | RANKED_SOLO_5X5 (GameQueueTypeUtils.canonicalQueue :38) | true |
NORMAL_5X5_DRAFT | 400 | no | itself | true |
ARAM | 450 | no | itself | false |
CHERRY | 1700 | no | itself | false (isCherry :19) |
ALL | — | no (alias for null) | null (optionalQueue :57) | false |
LEADERBOARD_QUEUES (MongoDB.java:120): List.of(RANKED_SOLO_5X5, RANKED_FLEX_SR).
Canonical mapping
GameQueueTypeUtils (src/main/java/com/safjnest/lol/utils/GameQueueTypeUtils.java):
public static GameQueueType canonicalQueue(GameQueueType queue) {
return queue == TEAM_BUILDER_RANKED_SOLO ? RANKED_SOLO_5X5 : queue; // :38
}
public static boolean hasLane(GameQueueType queue) { return queue != null && laneQueues.contains(queue); } // :30
public static boolean isCherry(GameQueueType queue) { return queue == GameQueueType.CHERRY; } // :19
public static boolean isRankedSolo(GameQueueType queue) { return canonicalQueue(queue) == RANKED_SOLO_5X5; } // :48
public static GameQueueType defaultQueue() { return RANKED_SOLO_5X5; } // :44
TEAM_BUILDER_RANKED_SOLO→RANKED_SOLO_5X5always before persistence/query/validation.ALL(string"ALL"case-insensitive) →nullinoptionalQueue(LolApiParameters.java:57).rankHistoryQueue(:61) accepts onlyRANKED_SOLO_5X5/RANKED_FLEX_SR(canonical).
Helper predicates
| Method | File:line | Logic |
|---|---|---|
LaneTypeUtils.playables() | :14 | TOP,JUNGLE,MID,BOT,UTILITY |
LaneTypeUtils.playableOrder(LaneType) | :22 | TOP=0 ... UTILITY=4, other -1 |
GameQueueTypeUtils.hasLane(queue) | :30 | queue in laneQueues (RANKED_SOLO_5X5, RANKED_FLEX_SR, NORMAL_5X5_DRAFT etc) |
GameQueueTypeUtils.isCherry(queue) | :19 | queue == CHERRY |
GameQueueTypeUtils.canonicalQueue(queue) | :38 | TEAM_BUILDER_RANKED_SOLO → RANKED_SOLO_5X5 |
LeagueShardUtils.getActives() | :64 | list of 15 active shards |
LeagueShardUtils.getAccountRegion(shard) | :45 | VN2...TW2→ASIA otherwise toRegionShard() |
TierDivisionUtils.getMmr(tierDivision, lp) | :78 | base tier + lp, UNRANKED→-1 |
TierDivisionUtils.getMmrRange(tier) | :119 | Range per tier |
TierDivisionUtils.getAverageRank(List) | :49 | average of ordinals |
