┌─ nix/pkgs/ookstats/src/internal/generator/player_leaderboards.go ──────────┐
│ diff --git a/nix/pkgs/ookstats/src/internal/generator/player_leaderboards.go b/nix │
│ /pkgs/ookstats/src/internal/generator/player_leaderboards.go │
│ index bcd6b1c..7b0b576 100644 │
│ --- a/nix/pkgs/ookstats/src/internal/generator/player_leaderboards.go │
│ +++ b/nix/pkgs/ookstats/src/internal/generator/player_leaderboards.go │
│ @@ -3,6 +3,7 @@ package generator │
│ import ( │
│ "database/sql" │
│ "fmt" │
│ + "ookstats/internal/utils" │
│ "ookstats/internal/wow" │
│ "ookstats/internal/writer" │
│ "os" │
│ @@ -187,39 +188,52 @@ func generateRealmPlayerLeaderboards(db *sql.DB, out, region │
│ string, pageSize in │
│ slugs = append(slugs, s) │
│ } │
│ │
│ - for _, rslug := range slugs { │
│ - dir := filepath.Join(out, "players", "realm", region, rslug) │
│ + groups := groupRealmSlugs(region, slugs) │
│ + if len(groups) == 0 { │
│ + return nil │
│ + } │
│ + │
│ + for _, group := range groups { │
│ + if len(group.Slugs) == 0 { │
│ + continue │
│ + } │
│ + dir := filepath.Join(out, "players", "realm", region, group.Parent) │
│ if err := os.MkdirAll(dir, 0o755); err != nil { │
│ return err │
│ } │
│ │
│ + placeholder := makeSQLPlaceholders(len(group.Slugs)) │
│ + baseArgs := append([]interface{}{seasonID, region}, stringSliceToInterface(grou │
│ p.Slugs)...) │
│ + │
│ var total int │
│ - if err := db.QueryRow(` │
│ + countQuery := fmt.Sprintf(` │
│ SELECT COUNT(*) │
│ FROM players p │
│ JOIN realms r ON p.realm_id = r.id │
│ JOIN player_profiles pp ON p.id = pp.player_id │
│ - WHERE pp.season_id = ? AND r.region = ? AND r.slug = ? AND pp.has_complete_cov │
│ erage = 1 AND pp.combined_best_time IS NOT NULL │
│ - `, seasonID, region, rslug).Scan(&total); err != nil { │
│ + WHERE pp.season_id = ? AND r.region = ? AND r.slug IN (%s) AND pp.has_complete │
│ _coverage = 1 AND pp.combined_best_time IS NOT NULL │
│ + `, placeholder) │
│ + if err := db.QueryRow(countQuery, baseArgs...).Scan(&total); err != nil { │
│ return fmt.Errorf("players total (realm, season %d): %w", seasonID, err) │
│ } │
│ │
│ pages := (total + pageSize - 1) / pageSize │
│ for p := 1; p <= pages; p++ { │
│ offset := (p - 1) * pageSize │
│ - rows, err := db.Query(` │
│ + dataArgs := append(append([]interface{}{}, baseArgs...), pageSize, offset) │
│ + rows, err := db.Query(fmt.Sprintf(` │
│ SELECT p.id, p.name, r.slug, r.name, r.region, │
│ - COALESCE(pd.class_name,''), COALESCE(pd.active_spec_name,''), pp.main_spe │
│ c_id, │
│ - pp.combined_best_time, pp.dungeons_completed, pp.total_runs, │
│ - COALESCE(pp.realm_ranking_bracket, '') │
│ + COALESCE(pd.class_name,''), COALESCE(pd.active_spec_name,''), pp.main_ │
│ spec_id, │
│ + pp.combined_best_time, pp.dungeons_completed, pp.total_runs, │
│ + COALESCE(pp.realm_ranking_bracket, '') │
│ FROM players p │
│ JOIN realms r ON p.realm_id = r.id │
│ JOIN player_profiles pp ON p.id = pp.player_id │
│ LEFT JOIN player_details pd ON p.id = pd.player_id │
│ - WHERE pp.season_id = ? AND r.region = ? AND r.slug = ? AND pp.has_complete_co │
│ verage = 1 AND pp.combined_best_time IS NOT NULL │
│ + WHERE pp.season_id = ? AND r.region = ? AND r.slug IN (%s) AND pp.has_complet │
│ e_coverage = 1 AND pp.combined_best_time IS NOT NULL │
│ ORDER BY pp.combined_best_time ASC, p.name ASC │
│ LIMIT ? OFFSET ? │
│ - `, seasonID, region, rslug, pageSize, offset) │
│ + `, placeholder), dataArgs...) │
│ if err != nil { │
│ return err │
│ } │
│ @@ -229,7 +243,9 @@ func generateRealmPlayerLeaderboards(db *sql.DB, out, region s │
│ tring, pageSize in │
│ return err │
│ } │
│ │
│ - title := strings.ToUpper(region) + "/" + rslug + " Player Rankings" │
│ + applyPercentileBrackets(list, offset, total) │
│ + │
│ + title := strings.ToUpper(region) + "/" + group.Parent + " Player Rankings" │
│ page := buildPlayerLeaderboardPage(list, title, total, pages, p, pageSize) │
│ if err := writer.WriteJSONFile(filepath.Join(dir, fmt.Sprintf("%d.json", p)), │
│ page); err != nil { │
│ return err │
│ @@ -269,8 +285,18 @@ func generateClassPlayerLeaderboards(db *sql.DB, out, classKe │
│ y string, pageSize │
│ } │
│ rrows.Close() │
│ │
│ + seenParents := make(map[string]struct{}) │
│ for _, rslug := range slugs { │
│ - if err := generateClassScope(db, out, "realm", reg, rslug, classKey, pageSize, │
│ seasonID); err != nil { │
│ + parentSlug := effectiveRealmSlug(reg, rslug) │
│ + if parentSlug == "" { │
│ + parentSlug = rslug │
│ + } │
│ + if _, exists := seenParents[parentSlug]; exists { │
│ + continue │
│ + } │
│ + seenParents[parentSlug] = struct{}{} │
│ + │
│ + if err := generateClassScope(db, out, "realm", reg, parentSlug, classKey, page │
│ Size, seasonID); err != nil { │
│ return err │
│ } │
│ } │
│ @@ -286,7 +312,12 @@ func generateClassScope(db *sql.DB, out, scope, region, realm │
│ Slug, classKey stri │
│ } else if scope == "regional" { │
│ dir = filepath.Join(out, "players", "class", classKey, "regional", region) │
│ } else { │
│ - dir = filepath.Join(out, "players", "class", classKey, "realm", region, realmSl │
│ ug) │
│ + effectiveSlug := effectiveRealmSlug(region, realmSlug) │
│ + if effectiveSlug == "" { │
│ + effectiveSlug = realmSlug │
│ + } │
│ + realmSlug = effectiveSlug │
│ + dir = filepath.Join(out, "players", "class", classKey, "realm", region, effecti │
│ veSlug) │
│ } │
│ if err := os.MkdirAll(dir, 0o755); err != nil { │
│ return err │
│ @@ -326,19 +357,26 @@ func generateClassScope(db *sql.DB, out, scope, region, real │
│ mSlug, classKey stri │
│ `, seasonID, region) │
│ } else { │
│ bracketColumn = "pp.realm_ranking_bracket" │
│ - rows, err = db.Query(` │
│ + realmSlugs := realmGroupSlugs(region, realmSlug) │
│ + if len(realmSlugs) == 0 { │
│ + realmSlugs = []string{realmSlug} │
│ + } │
│ + placeholder := makeSQLPlaceholders(len(realmSlugs)) │
│ + args := append([]interface{}{seasonID, region}, stringSliceToInterface(realmSlu │
│ gs)...) │
│ + rows, err = db.Query(fmt.Sprintf(` │
│ SELECT p.id, p.name, r.slug, r.name, r.region, │
│ - COALESCE(pd.class_name,''), COALESCE(pd.active_spec_name,''), pp.main_spec │
│ _id, │
│ - pp.combined_best_time, pp.dungeons_completed, pp.total_runs, │
│ - COALESCE(pp.realm_ranking_bracket, '') │
│ + COALESCE(pd.class_name,''), COALESCE(pd.active_spec_name,''), pp.main_s │
│ pec_id, │
│ + pp.combined_best_time, pp.dungeons_completed, pp.total_runs, │
│ + COALESCE(pp.realm_ranking_bracket, '') │
│ FROM players p │
│ JOIN realms r ON p.realm_id = r.id │
│ JOIN player_profiles pp ON p.id = pp.player_id │
│ LEFT JOIN player_details pd ON p.id = pd.player_id │
│ - WHERE pp.season_id = ? AND r.region = ? AND r.slug = ? AND pp.has_complete_cov │
│ erage = 1 AND pp.combined_best_time IS NOT NULL │
│ + WHERE pp.season_id = ? AND r.region = ? AND r.slug IN (%s) AND pp.has_complete │
│ _coverage = 1 AND pp.combined_best_time IS NOT NULL │
│ ORDER BY pp.combined_best_time ASC, p.name ASC │
│ - `, seasonID, region, realmSlug) │
│ + `, placeholder), args...) │
│ } │
│ + │
│ _ = bracketColumn // unused for now, but documents intent │
│ if err != nil { │
│ return err │
│ @@ -421,6 +459,10 @@ func generateClassScope(db *sql.DB, out, scope, region, realm │
│ Slug, classKey stri │
│ list = append(list, obj) │
│ } │
│ │
│ + if scope == "realm" { │
│ + applyPercentileBrackets(list, offset, total) │
│ + } │
│ + │
│ title := "Global Player Rankings" │
│ if scope == "regional" { │
│ title = strings.ToUpper(region) + " Player Rankings" │
│ @@ -510,3 +552,21 @@ func buildPlayerLeaderboardPage(leaderboard []map[string]any, │
│ title string, tota │
│ }, │
│ } │
│ } │
│ + │
│ +func applyPercentileBrackets(entries []map[string]any, offset int, total int) { │
│ + if total <= 0 { │
│ + return │
│ + } │
│ + for i, entry := range entries { │
│ + rank := offset + i + 1 │
│ + if rank <= 0 { │
│ + continue │
│ + } │
│ + bracket := utils.CalculatePercentileBracket(rank, total) │
│ + if bracket == "" { │
│ + delete(entry, "ranking_percentile") │
│ + } else { │
│ + entry["ranking_percentile"] = bracket │
│ + } │
│ + } │
│ +} │
└────────────────────────────────────────────────────────────────────────────────────┘
┌─ ...erator/player_leaderboards.go ───┐
│ diff --git a/nix/pkgs/ookstats/src/internal/ │
│ generator/player_leaderboards.go b/nix/pkgs/ │
│ ookstats/src/internal/generator/player_leade │
│ rboards.go │
│ index bcd6b1c..7b0b576 100644 │
│ --- a/nix/pkgs/ookstats/src/internal/generat │
│ or/player_leaderboards.go │
│ +++ b/nix/pkgs/ookstats/src/internal/generat │
│ or/player_leaderboards.go │
│ @@ -3,6 +3,7 @@ package generator │
│ import ( │
│ "database/sql" │
│ "fmt" │
│ + "ookstats/internal/utils" │
│ "ookstats/internal/wow" │
│ "ookstats/internal/writer" │
│ "os" │
│ @@ -187,39 +188,52 @@ func generateRealmPlay │
│ erLeaderboards(db *sql.DB, out, region strin │
│ g, pageSize in │
│ slugs = append(slugs, s) │
│ } │
│ │
│ - for _, rslug := range slugs { │
│ - dir := filepath.Join(out, "players", "rea │
│ lm", region, rslug) │
│ + groups := groupRealmSlugs(region, slugs) │
│ + if len(groups) == 0 { │
│ + return nil │
│ + } │
│ + │
│ + for _, group := range groups { │
│ + if len(group.Slugs) == 0 { │
│ + continue │
│ + } │
│ + dir := filepath.Join(out, "players", "rea │
│ lm", region, group.Parent) │
│ if err := os.MkdirAll(dir, 0o755); err != │
│ nil { │
│ return err │
│ } │
│ │
│ + placeholder := makeSQLPlaceholders(len(gr │
│ oup.Slugs)) │
│ + baseArgs := append([]interface{}{seasonID │
│ , region}, stringSliceToInterface(group.Slug │
│ s)...) │
│ + │
│ var total int │
│ - if err := db.QueryRow(` │
│ + countQuery := fmt.Sprintf(` │
│ SELECT COUNT(*) │
│ FROM players p │
│ JOIN realms r ON p.realm_id = r.id │
│ JOIN player_profiles pp ON p.id = pp.pla │
│ yer_id │
│ - WHERE pp.season_id = ? AND r.region = ? │
│ AND r.slug = ? AND pp.has_complete_coverage │
│ = 1 AND pp.combined_best_time IS NOT NULL │
│ - `, seasonID, region, rslug).Scan(&total); │
│ err != nil { │
│ + WHERE pp.season_id = ? AND r.region = ? │
│ AND r.slug IN (%s) AND pp.has_complete_cover │
│ age = 1 AND pp.combined_best_time IS NOT NUL │
│ L │
│ + `, placeholder) │
│ + if err := db.QueryRow(countQuery, baseArg │
│ s...).Scan(&total); err != nil { │
│ return fmt.Errorf("players total (realm, │
│ season %d): %w", seasonID, err) │
│ } │
│ │
│ pages := (total + pageSize - 1) / pageSiz │
│ e │
│ for p := 1; p <= pages; p++ { │
│ offset := (p - 1) * pageSize │
│ - rows, err := db.Query(` │
│ + dataArgs := append(append([]interface{}{ │
│ }, baseArgs...), pageSize, offset) │
│ + rows, err := db.Query(fmt.Sprintf(` │
│ SELECT p.id, p.name, r.slug, r.name, r. │
│ region, │
│ - COALESCE(pd.class_name,''), COALESC │
│ E(pd.active_spec_name,''), pp.main_spec_id, │
│ - pp.combined_best_time, pp.dungeons_ │
│ completed, pp.total_runs, │
│ - COALESCE(pp.realm_ranking_bracket, │
│ '') │
│ + COALESCE(pd.class_name,''), COAL │
│ ESCE(pd.active_spec_name,''), pp.main_spec_i │
│ d, │
│ + pp.combined_best_time, pp.dungeo │
│ ns_completed, pp.total_runs, │
│ + COALESCE(pp.realm_ranking_bracke │
│ t, '') │
│ FROM players p │
│ JOIN realms r ON p.realm_id = r.id │
│ JOIN player_profiles pp ON p.id = pp.pl │
│ ayer_id │
│ LEFT JOIN player_details pd ON p.id = p │
│ d.player_id │
│ - WHERE pp.season_id = ? AND r.region = ? │
│ AND r.slug = ? AND pp.has_complete_coverage │
│ = 1 AND pp.combined_best_time IS NOT NULL │
│ + WHERE pp.season_id = ? AND r.region = ? │
│ AND r.slug IN (%s) AND pp.has_complete_cove │
│ rage = 1 AND pp.combined_best_time IS NOT NU │
│ LL │
│ ORDER BY pp.combined_best_time ASC, p.n │
│ ame ASC │
│ LIMIT ? OFFSET ? │
│ - `, seasonID, region, rslug, pageSize, of │
│ fset) │
│ + `, placeholder), dataArgs...) │
│ if err != nil { │
│ return err │
│ } │
│ @@ -229,7 +243,9 @@ func generateRealmPlayer │
│ Leaderboards(db *sql.DB, out, region string, │
│ pageSize in │
│ return err │
│ } │
│ │
│ - title := strings.ToUpper(region) + "/" + │
│ rslug + " Player Rankings" │
│ + applyPercentileBrackets(list, offset, to │
│ tal) │
│ + │
│ + title := strings.ToUpper(region) + "/" + │
│ group.Parent + " Player Rankings" │
│ page := buildPlayerLeaderboardPage(list, │
│ title, total, pages, p, pageSize) │
│ if err := writer.WriteJSONFile(filepath. │
│ Join(dir, fmt.Sprintf("%d.json", p)), page); │
│ err != nil { │
│ return err │
│ @@ -269,8 +285,18 @@ func generateClassPlaye │
│ rLeaderboards(db *sql.DB, out, classKey stri │
│ ng, pageSize │
│ } │
│ rrows.Close() │
│ │
│ + seenParents := make(map[string]struct{}) │
│ for _, rslug := range slugs { │
│ - if err := generateClassScope(db, out, "r │
│ ealm", reg, rslug, classKey, pageSize, seaso │
│ nID); err != nil { │
│ + parentSlug := effectiveRealmSlug(reg, rs │
│ lug) │
│ + if parentSlug == "" { │
│ + parentSlug = rslug │
│ + } │
│ + if _, exists := seenParents[parentSlug]; │
│ exists { │
│ + continue │
│ + } │
│ + seenParents[parentSlug] = struct{}{} │
│ + │
│ + if err := generateClassScope(db, out, "r │
│ ealm", reg, parentSlug, classKey, pageSize, │
│ seasonID); err != nil { │
│ return err │
│ } │
│ } │
│ @@ -286,7 +312,12 @@ func generateClassScope │
│ (db *sql.DB, out, scope, region, realmSlug, │
│ classKey stri │
│ } else if scope == "regional" { │
│ dir = filepath.Join(out, "players", "clas │
│ s", classKey, "regional", region) │
│ } else { │
│ - dir = filepath.Join(out, "players", "clas │
│ s", classKey, "realm", region, realmSlug) │
│ + effectiveSlug := effectiveRealmSlug(regio │
│ n, realmSlug) │
│ + if effectiveSlug == "" { │
│ + effectiveSlug = realmSlug │
│ + } │
│ + realmSlug = effectiveSlug │
│ + dir = filepath.Join(out, "players", "clas │
│ s", classKey, "realm", region, effectiveSlug │
│ ) │
│ } │
│ if err := os.MkdirAll(dir, 0o755); err != │
│ nil { │
│ return err │
│ @@ -326,19 +357,26 @@ func generateClassScop │
│ e(db *sql.DB, out, scope, region, realmSlug, │
│ classKey stri │
│ `, seasonID, region) │
│ } else { │
│ bracketColumn = "pp.realm_ranking_bracket │
│ " │
│ - rows, err = db.Query(` │
│ + realmSlugs := realmGroupSlugs(region, rea │
│ lmSlug) │
│ + if len(realmSlugs) == 0 { │
│ + realmSlugs = []string{realmSlug} │
│ + } │
│ + placeholder := makeSQLPlaceholders(len(re │
│ almSlugs)) │
│ + args := append([]interface{}{seasonID, re │
│ gion}, stringSliceToInterface(realmSlugs)... │
│ ) │
│ + rows, err = db.Query(fmt.Sprintf(` │
│ SELECT p.id, p.name, r.slug, r.name, r.r │
│ egion, │
│ - COALESCE(pd.class_name,''), COALESCE │
│ (pd.active_spec_name,''), pp.main_spec_id, │
│ - pp.combined_best_time, pp.dungeons_c │
│ ompleted, pp.total_runs, │
│ - COALESCE(pp.realm_ranking_bracket, ' │
│ ') │
│ + COALESCE(pd.class_name,''), COALE │
│ SCE(pd.active_spec_name,''), pp.main_spec_id │
│ , │
│ + pp.combined_best_time, pp.dungeon │
│ s_completed, pp.total_runs, │
│ + COALESCE(pp.realm_ranking_bracket │
│ , '') │
│ FROM players p │
│ JOIN realms r ON p.realm_id = r.id │
│ JOIN player_profiles pp ON p.id = pp.pla │
│ yer_id │
│ LEFT JOIN player_details pd ON p.id = pd │
│ .player_id │
│ - WHERE pp.season_id = ? AND r.region = ? │
│ AND r.slug = ? AND pp.has_complete_coverage │
│ = 1 AND pp.combined_best_time IS NOT NULL │
│ + WHERE pp.season_id = ? AND r.region = ? │
│ AND r.slug IN (%s) AND pp.has_complete_cover │
│ age = 1 AND pp.combined_best_time IS NOT NUL │
│ L │
│ ORDER BY pp.combined_best_time ASC, p.na │
│ me ASC │
│ - `, seasonID, region, realmSlug) │
│ + `, placeholder), args...) │
│ } │
│ + │
│ _ = bracketColumn // unused for now, but d │
│ ocuments intent │
│ if err != nil { │
│ return err │
│ @@ -421,6 +459,10 @@ func generateClassScope │
│ (db *sql.DB, out, scope, region, realmSlug, │
│ classKey stri │
│ list = append(list, obj) │
│ } │
│ │
│ + if scope == "realm" { │
│ + applyPercentileBrackets(list, offset, to │
│ tal) │
│ + } │
│ + │
│ title := "Global Player Rankings" │
│ if scope == "regional" { │
│ title = strings.ToUpper(region) + " Play │
│ er Rankings" │
│ @@ -510,3 +552,21 @@ func buildPlayerLeaderb │
│ oardPage(leaderboard []map[string]any, title │
│ string, tota │
│ }, │
│ } │
│ } │
│ + │
│ +func applyPercentileBrackets(entries []map[ │
│ string]any, offset int, total int) { │
│ + if total <= 0 { │
│ + return │
│ + } │
│ + for i, entry := range entries { │
│ + rank := offset + i + 1 │
│ + if rank <= 0 { │
│ + continue │
│ + } │
│ + bracket := utils.CalculatePercentileBrack │
│ et(rank, total) │
│ + if bracket == "" { │
│ + delete(entry, "ranking_percentile") │
│ + } else { │
│ + entry["ranking_percentile"] = bracket │
│ + } │
│ + } │
│ +} │
└──────────────────────────────────────────────┘
┌─ nix/pkgs/ookstats/src/internal/generator/realm_aliases.go ────────────────┐
│ diff --git a/nix/pkgs/ookstats/src/internal/generator/realm_aliases.go b/nix/pkgs/ │
│ ookstats/src/internal/generator/realm_aliases.go │
│ new file mode 100644 │
│ index 0000000..1bd4ac8 │
│ --- /dev/null │
│ +++ b/nix/pkgs/ookstats/src/internal/generator/realm_aliases.go │
│ @@ -0,0 +1,151 @@ │
│ +package generator │
│ + │
│ +import "strings" │
│ + │
│ +// mergedRealmParents maps child realm slugs to their parent leaderboard realm pe │
│ r region. │
│ +var mergedRealmParents = map[string]map[string]string{ │
│ + "us": { │
│ + "nazgrim": "pagle", │
│ + "galakras": "pagle", │
│ + "raden": "pagle", │
│ + "ra-den": "pagle", │
│ + "lei-shen": "pagle", │
│ + "leishen": "pagle", │
│ + "immerseus": "pagle", │
│ + }, │
│ + "eu": { │
│ + "shekzeer": "mirage-raceway", │
│ + "garalon": "mirage-raceway", │
│ + "norushen": "mirage-raceway", │
│ + "hoptallus": "mirage-raceway", │
│ + "hotallus": "mirage-raceway", │
│ + "ook-ook": "everlook", │
│ + "ookook": "everlook", │
│ + }, │
│ +} │
│ + │
│ +type realmGroup struct { │
│ + Parent string │
│ + Slugs []string │
│ +} │
│ + │
│ +func normalizeSlug(slug string) string { │
│ + return strings.ToLower(strings.TrimSpace(slug)) │
│ +} │
│ + │
│ +func normalizeRegion(region string) string { │
│ + return strings.ToLower(strings.TrimSpace(region)) │
│ +} │
│ + │
│ +// effectiveRealmSlug returns the parent leaderboard slug for a given region/real │
│ m slug. │
│ +func effectiveRealmSlug(region, slug string) string { │
│ + normalizedRegion := normalizeRegion(region) │
│ + normalizedSlug := normalizeSlug(slug) │
│ + if normalizedSlug == "" { │
│ + return "" │
│ + } │
│ + │
│ + if parents, ok := mergedRealmParents[normalizedRegion]; ok { │
│ + if parent, ok := parents[normalizedSlug]; ok { │
│ + return parent │
│ + } │
│ + } │
│ + return normalizedSlug │
│ +} │
│ + │
│ +// realmGroupSlugs returns all realm slugs (parent + children) that belong to the │
│ same leaderboard group. │
│ +func realmGroupSlugs(region, slug string) []string { │
│ + normalizedRegion := normalizeRegion(region) │
│ + parent := effectiveRealmSlug(region, slug) │
│ + if parent == "" { │
│ + if s := normalizeSlug(slug); s != "" { │
│ + return []string{s} │
│ + } │
│ + return nil │
│ + } │
│ + │
│ + unique := make(map[string]struct{}) │
│ + ordered := make([]string, 0, 4) │
│ + add := func(value string) { │
│ + if value == "" { │
│ + return │
│ + } │
│ + if _, exists := unique[value]; exists { │
│ + return │
│ + } │
│ + unique[value] = struct{}{} │
│ + ordered = append(ordered, value) │
│ + } │
│ + │
│ + add(parent) │
│ + if parents, ok := mergedRealmParents[normalizedRegion]; ok { │
│ + for child, p := range parents { │
│ + if p == parent { │
│ + add(child) │
│ + } │
│ + } │
│ + } │
│ + add(normalizeSlug(slug)) │
│ + │
│ + return ordered │
│ +} │
│ + │
│ +// groupRealmSlugs groups a list of realm slugs by their effective leaderboard pa │
│ rent. │
│ +func groupRealmSlugs(region string, slugs []string) []realmGroup { │
│ + normalizedRegion := normalizeRegion(region) │
│ + index := make(map[string]int) │
│ + var groups []realmGroup │
│ + │
│ + for _, slug := range slugs { │
│ + parent := effectiveRealmSlug(normalizedRegion, slug) │
│ + if parent == "" { │
│ + continue │
│ + } │
│ + if idx, ok := index[parent]; ok { │
│ + groups[idx].Slugs = appendUnique(groups[idx].Slugs, normalizeSlug(slug)) │
│ + } else { │
│ + groups = append(groups, realmGroup{ │
│ + Parent: parent, │
│ + Slugs: []string{normalizeSlug(slug)}, │
│ + }) │
│ + index[parent] = len(groups) - 1 │
│ + } │
│ + } │
│ + │
│ + for i := range groups { │
│ + groups[i].Slugs = appendUnique(groups[i].Slugs, groups[i].Parent) │
│ + } │
│ + │
│ + return groups │
│ +} │
│ + │
│ +func appendUnique(list []string, value string) []string { │
│ + if value == "" { │
│ + return list │
│ + } │
│ + for _, existing := range list { │
│ + if existing == value { │
│ + return list │
│ + } │
│ + } │
│ + return append(list, value) │
│ +} │
│ + │
│ +func makeSQLPlaceholders(n int) string { │
│ + if n <= 0 { │
│ + return "" │
│ + } │
│ + parts := make([]string, n) │
│ + for i := range parts { │
│ + parts[i] = "?" │
│ + } │
│ + return strings.Join(parts, ",") │
│ +} │
│ + │
│ +func stringSliceToInterface(values []string) []interface{} { │
│ + out := make([]interface{}, len(values)) │
│ + for i, v := range values { │
│ + out[i] = v │
│ + } │
│ + return out │
│ +} │
└────────────────────────────────────────────────────────────────────────────────────┘
┌─ ...al/generator/realm_aliases.go ───┐
│ diff --git a/nix/pkgs/ookstats/src/internal/ │
│ generator/realm_aliases.go b/nix/pkgs/ooksta │
│ ts/src/internal/generator/realm_aliases.go │
│ new file mode 100644 │
│ index 0000000..1bd4ac8 │
│ --- /dev/null │
│ +++ b/nix/pkgs/ookstats/src/internal/generat │
│ or/realm_aliases.go │
│ @@ -0,0 +1,151 @@ │
│ +package generator │
│ + │
│ +import "strings" │
│ + │
│ +// mergedRealmParents maps child realm slug │
│ s to their parent leaderboard realm per regi │
│ on. │
│ +var mergedRealmParents = map[string]map[str │
│ ing]string{ │
│ + "us": { │
│ + "nazgrim": "pagle", │
│ + "galakras": "pagle", │
│ + "raden": "pagle", │
│ + "ra-den": "pagle", │
│ + "lei-shen": "pagle", │
│ + "leishen": "pagle", │
│ + "immerseus": "pagle", │
│ + }, │
│ + "eu": { │
│ + "shekzeer": "mirage-raceway", │
│ + "garalon": "mirage-raceway", │
│ + "norushen": "mirage-raceway", │
│ + "hoptallus": "mirage-raceway", │
│ + "hotallus": "mirage-raceway", │
│ + "ook-ook": "everlook", │
│ + "ookook": "everlook", │
│ + }, │
│ +} │
│ + │
│ +type realmGroup struct { │
│ + Parent string │
│ + Slugs []string │
│ +} │
│ + │
│ +func normalizeSlug(slug string) string { │
│ + return strings.ToLower(strings.TrimSpace(s │
│ lug)) │
│ +} │
│ + │
│ +func normalizeRegion(region string) string │
│ { │
│ + return strings.ToLower(strings.TrimSpace(r │
│ egion)) │
│ +} │
│ + │
│ +// effectiveRealmSlug returns the parent le │
│ aderboard slug for a given region/realm slug │
│ . │
│ +func effectiveRealmSlug(region, slug string │
│ ) string { │
│ + normalizedRegion := normalizeRegion(region │
│ ) │
│ + normalizedSlug := normalizeSlug(slug) │
│ + if normalizedSlug == "" { │
│ + return "" │
│ + } │
│ + │
│ + if parents, ok := mergedRealmParents[norma │
│ lizedRegion]; ok { │
│ + if parent, ok := parents[normalizedSlug]; │
│ ok { │
│ + return parent │
│ + } │
│ + } │
│ + return normalizedSlug │
│ +} │
│ + │
│ +// realmGroupSlugs returns all realm slugs │
│ (parent + children) that belong to the same │
│ leaderboard group. │
│ +func realmGroupSlugs(region, slug string) [ │
│ ]string { │
│ + normalizedRegion := normalizeRegion(region │
│ ) │
│ + parent := effectiveRealmSlug(region, slug) │
│ + if parent == "" { │
│ + if s := normalizeSlug(slug); s != "" { │
│ + return []string{s} │
│ + } │
│ + return nil │
│ + } │
│ + │
│ + unique := make(map[string]struct{}) │
│ + ordered := make([]string, 0, 4) │
│ + add := func(value string) { │
│ + if value == "" { │
│ + return │
│ + } │
│ + if _, exists := unique[value]; exists { │
│ + return │
│ + } │
│ + unique[value] = struct{}{} │
│ + ordered = append(ordered, value) │
│ + } │
│ + │
│ + add(parent) │
│ + if parents, ok := mergedRealmParents[norma │
│ lizedRegion]; ok { │
│ + for child, p := range parents { │
│ + if p == parent { │
│ + add(child) │
│ + } │
│ + } │
│ + } │
│ + add(normalizeSlug(slug)) │
│ + │
│ + return ordered │
│ +} │
│ + │
│ +// groupRealmSlugs groups a list of realm s │
│ lugs by their effective leaderboard parent. │
│ +func groupRealmSlugs(region string, slugs [ │
│ ]string) []realmGroup { │
│ + normalizedRegion := normalizeRegion(region │
│ ) │
│ + index := make(map[string]int) │
│ + var groups []realmGroup │
│ + │
│ + for _, slug := range slugs { │
│ + parent := effectiveRealmSlug(normalizedRe │
│ gion, slug) │
│ + if parent == "" { │
│ + continue │
│ + } │
│ + if idx, ok := index[parent]; ok { │
│ + groups[idx].Slugs = appendUnique(groups[ │
│ idx].Slugs, normalizeSlug(slug)) │
│ + } else { │
│ + groups = append(groups, realmGroup{ │
│ + Parent: parent, │
│ + Slugs: []string{normalizeSlug(slug)}, │
│ + }) │
│ + index[parent] = len(groups) - 1 │
│ + } │
│ + } │
│ + │
│ + for i := range groups { │
│ + groups[i].Slugs = appendUnique(groups[i]. │
│ Slugs, groups[i].Parent) │
│ + } │
│ + │
│ + return groups │
│ +} │
│ + │
│ +func appendUnique(list []string, value stri │
│ ng) []string { │
│ + if value == "" { │
│ + return list │
│ + } │
│ + for _, existing := range list { │
│ + if existing == value { │
│ + return list │
│ + } │
│ + } │
│ + return append(list, value) │
│ +} │
│ + │
│ +func makeSQLPlaceholders(n int) string { │
│ + if n <= 0 { │
│ + return "" │
│ + } │
│ + parts := make([]string, n) │
│ + for i := range parts { │
│ + parts[i] = "?" │
│ + } │
│ + return strings.Join(parts, ",") │
│ +} │
│ + │
│ +func stringSliceToInterface(values []string │
│ ) []interface{} { │
│ + out := make([]interface{}, len(values)) │
│ + for i, v := range values { │
│ + out[i] = v │
│ + } │
│ + return out │
│ +} │
└──────────────────────────────────────────────┘