OOKNET                             [ /  search the index  ]  
──────────────────────────────────────────────────────────────────────────────────────
══════════════════════════════════════════════════════════════════════════════════════
OOKNET   [ /  search  ]  
────────────────────────────────────────────────
════════════════════════════════════════════════
 
 
master @ 117 LINES
 
[ HISTORY ]  [ UP ]
 

package indexes

import (
	"database/sql"
	"fmt"
	"path/filepath"

	"ookstats/internal/writer"
)

// GenerateClassScopeIndex generates scope index for a specific class
func GenerateClassScopeIndex(outDir string, seasonID int, classKey string) error {
	scopes := []ClassScopeData{
		{
			Scope: "global",
			Href:  fmt.Sprintf("/api/leaderboard/season/%d/players/class/%s/global/{page}.j
son", seasonID, classKey),
		},
		{
			Scope: "regional",
			Href:  fmt.Sprintf("/api/leaderboard/season/%d/players/class/%s/regional/index.
json", seasonID, classKey),
		},
		{
			Scope: "realm",
			Href:  fmt.Sprintf("/api/leaderboard/season/%d/players/class/%s/realm/index.jso
n", seasonID, classKey),
		},
	}

	index := ClassScopeIndex{
		Data:     scopes,
		Metadata: NewIndexMetadata(len(scopes)),
	}

	outPath := filepath.Join(outDir, "api", "leaderboard", "season", fmt.Sprintf("%d"
, seasonID), "players", "class", classKey, "index.json")
	if err := writer.WriteJSONFile(outPath, index); err != nil {
		return err
	}

	return nil
}

// GenerateClassRegionalIndex generates regional index for a class
func GenerateClassRegionalIndex(outDir string, seasonID int, classKey string) erro
r {
	regions := []RegionData{
		{Region: "us", Href: fmt.Sprintf("/api/leaderboard/season/%d/players/class/%s/re
gional/us/{page}.json", seasonID, classKey)},
		{Region: "eu", Href: fmt.Sprintf("/api/leaderboard/season/%d/players/class/%s/re
gional/eu/{page}.json", seasonID, classKey)},
		{Region: "kr", Href: fmt.Sprintf("/api/leaderboard/season/%d/players/class/%s/re
gional/kr/{page}.json", seasonID, classKey)},
		{Region: "tw", Href: fmt.Sprintf("/api/leaderboard/season/%d/players/class/%s/re
gional/tw/{page}.json", seasonID, classKey)},
	}

	index := RegionsIndex{
		Data:     regions,
		Metadata: NewIndexMetadata(len(regions)),
	}

	outPath := filepath.Join(outDir, "api", "leaderboard", "season", fmt.Sprintf("%d"
, seasonID), "players", "class", classKey, "regional", "index.json")
	if err := writer.WriteJSONFile(outPath, index); err != nil {
		return err
	}

	return nil
}

// GenerateClassRealmRegionIndex generates realm region index for a class
func GenerateClassRealmRegionIndex(outDir string, seasonID int, classKey string) e
rror {
	regions := []RegionData{
		{Region: "us", Href: fmt.Sprintf("/api/leaderboard/season/%d/players/class/%s/re
alm/us/index.json", seasonID, classKey)},
		{Region: "eu", Href: fmt.Sprintf("/api/leaderboard/season/%d/players/class/%s/re
alm/eu/index.json", seasonID, classKey)},
		{Region: "kr", Href: fmt.Sprintf("/api/leaderboard/season/%d/players/class/%s/re
alm/kr/index.json", seasonID, classKey)},
		{Region: "tw", Href: fmt.Sprintf("/api/leaderboard/season/%d/players/class/%s/re
alm/tw/index.json", seasonID, classKey)},
	}

	index := RegionsIndex{
		Data:     regions,
		Metadata: NewIndexMetadata(len(regions)),
	}

	outPath := filepath.Join(outDir, "api", "leaderboard", "season", fmt.Sprintf("%d"
, seasonID), "players", "class", classKey, "realm", "index.json")
	if err := writer.WriteJSONFile(outPath, index); err != nil {
		return err
	}

	return nil
}

// GenerateClassRealmListIndex generates realm list for a class and region
func GenerateClassRealmListIndex(db *sql.DB, outDir string, seasonID int, classKey
, region string) error {
	rows, err := db.Query(`SELECT slug FROM realms WHERE region = ? ORDER BY slug`, r
egion)
	if err != nil {
		return fmt.Errorf("query realms: %w", err)
	}
	defer rows.Close()

	var realms []RegionData
	for rows.Next() {
		var slug string
		if err := rows.Scan(&slug); err != nil {
			return err
		}
		realms = append(realms, RegionData{
			Region: slug,
			Href:   fmt.Sprintf("/api/leaderboard/season/%d/players/class/%s/realm/%s/%s/{p
age}.json", seasonID, classKey, region, slug),
		})
	}

	index := RegionsIndex{
		Data:     realms,
		Metadata: NewIndexMetadata(len(realms)),
	}

	outPath := filepath.Join(outDir, "api", "leaderboard", "season", fmt.Sprintf("%d"
, seasonID), "players", "class", classKey, "realm", region, "index.json")
	if err := writer.WriteJSONFile(outPath, index); err != nil {
		return err
	}

	return nil
}

package indexes

import (
	"database/sql"
	"fmt"
	"path/filepath"

	"ookstats/internal/writer"
)

// GenerateClassScopeIndex generates scope i
ndex for a specific class
func GenerateClassScopeIndex(outDir string, 
seasonID int, classKey string) error {
	scopes := []ClassScopeData{
		{
			Scope: "global",
			Href:  fmt.Sprintf("/api/leaderboard/seas
on/%d/players/class/%s/global/{page}.json", 
seasonID, classKey),
		},
		{
			Scope: "regional",
			Href:  fmt.Sprintf("/api/leaderboard/seas
on/%d/players/class/%s/regional/index.json",
 seasonID, classKey),
		},
		{
			Scope: "realm",
			Href:  fmt.Sprintf("/api/leaderboard/seas
on/%d/players/class/%s/realm/index.json", se
asonID, classKey),
		},
	}

	index := ClassScopeIndex{
		Data:     scopes,
		Metadata: NewIndexMetadata(len(scopes)),
	}

	outPath := filepath.Join(outDir, "api", "le
aderboard", "season", fmt.Sprintf("%d", seas
onID), "players", "class", classKey, "index.
json")
	if err := writer.WriteJSONFile(outPath, ind
ex); err != nil {
		return err
	}

	return nil
}

// GenerateClassRegionalIndex generates regi
onal index for a class
func GenerateClassRegionalIndex(outDir strin
g, seasonID int, classKey string) error {
	regions := []RegionData{
		{Region: "us", Href: fmt.Sprintf("/api/lea
derboard/season/%d/players/class/%s/regional
/us/{page}.json", seasonID, classKey)},
		{Region: "eu", Href: fmt.Sprintf("/api/lea
derboard/season/%d/players/class/%s/regional
/eu/{page}.json", seasonID, classKey)},
		{Region: "kr", Href: fmt.Sprintf("/api/lea
derboard/season/%d/players/class/%s/regional
/kr/{page}.json", seasonID, classKey)},
		{Region: "tw", Href: fmt.Sprintf("/api/lea
derboard/season/%d/players/class/%s/regional
/tw/{page}.json", seasonID, classKey)},
	}

	index := RegionsIndex{
		Data:     regions,
		Metadata: NewIndexMetadata(len(regions)),
	}

	outPath := filepath.Join(outDir, "api", "le
aderboard", "season", fmt.Sprintf("%d", seas
onID), "players", "class", classKey, "region
al", "index.json")
	if err := writer.WriteJSONFile(outPath, ind
ex); err != nil {
		return err
	}

	return nil
}

// GenerateClassRealmRegionIndex generates r
ealm region index for a class
func GenerateClassRealmRegionIndex(outDir st
ring, seasonID int, classKey string) error {
	regions := []RegionData{
		{Region: "us", Href: fmt.Sprintf("/api/lea
derboard/season/%d/players/class/%s/realm/us
/index.json", seasonID, classKey)},
		{Region: "eu", Href: fmt.Sprintf("/api/lea
derboard/season/%d/players/class/%s/realm/eu
/index.json", seasonID, classKey)},
		{Region: "kr", Href: fmt.Sprintf("/api/lea
derboard/season/%d/players/class/%s/realm/kr
/index.json", seasonID, classKey)},
		{Region: "tw", Href: fmt.Sprintf("/api/lea
derboard/season/%d/players/class/%s/realm/tw
/index.json", seasonID, classKey)},
	}

	index := RegionsIndex{
		Data:     regions,
		Metadata: NewIndexMetadata(len(regions)),
	}

	outPath := filepath.Join(outDir, "api", "le
aderboard", "season", fmt.Sprintf("%d", seas
onID), "players", "class", classKey, "realm"
, "index.json")
	if err := writer.WriteJSONFile(outPath, ind
ex); err != nil {
		return err
	}

	return nil
}

// GenerateClassRealmListIndex generates rea
lm list for a class and region
func GenerateClassRealmListIndex(db *sql.DB,
 outDir string, seasonID int, classKey, regi
on string) error {
	rows, err := db.Query(`SELECT slug FROM rea
lms WHERE region = ? ORDER BY slug`, region)
	if err != nil {
		return fmt.Errorf("query realms: %w", err)
	}
	defer rows.Close()

	var realms []RegionData
	for rows.Next() {
		var slug string
		if err := rows.Scan(&slug); err != nil {
			return err
		}
		realms = append(realms, RegionData{
			Region: slug,
			Href:   fmt.Sprintf("/api/leaderboard/sea
son/%d/players/class/%s/realm/%s/%s/{page}.j
son", seasonID, classKey, region, slug),
		})
	}

	index := RegionsIndex{
		Data:     realms,
		Metadata: NewIndexMetadata(len(realms)),
	}

	outPath := filepath.Join(outDir, "api", "le
aderboard", "season", fmt.Sprintf("%d", seas
onID), "players", "class", classKey, "realm"
, region, "index.json")
	if err := writer.WriteJSONFile(outPath, ind
ex); err != nil {
		return err
	}

	return nil
}
 
──────────────────────────────────────────────────────────────────────────────────────
OOKNET
────────────────────────────────────────────────
OOKNET