web-next: página de jugadores /<slug>-players con datos reales de la BD

Extiende la ruta dinámica [realm] para servir también /<slug>-players (slug
del reino en realmlist). PlayersBoard (server) consulta acore_characters:
- Personajes creados por clase (conteo por clase y facción) + totales.
- Top de muertes con honor (characters.totalKills/todayKills, LIMIT 10).
- Top de logros (nº de logros por personaje vía character_achievement;
  los «puntos» no existen en la BD del servidor, vienen del DBC del cliente).
- Primeros del reino - Nivel 80 (primer personaje por fecha del logro 20 =
  Nivel 80, overall/por clase/por raza; vacío si aún no hay nivel 80).
Imágenes reales del tema (nw-classes/nw-races/nw-icons). lib/players.ts con
los mapas de clase/raza/facción. RealmInfo extraído a su componente. Enlace
JUGADORES de la cabecera ahora dinámico (/<slug>-players), como REINO.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-13 12:53:50 +00:00
parent cae1c224b0
commit 5d724afb8d
6 changed files with 343 additions and 37 deletions
+5 -3
View File
@@ -7,8 +7,10 @@ export async function Header() {
const loggedIn = Boolean(session.username)
// Django muestra bnet_email si existe, si no el username.
const accountLabel = session.bnetEmail || session.username || ''
// Enlace al reino según el nombre en realmlist (p. ej. /trinity-realm).
const realmHref = `/${realmSlug(await getRealmName())}-realm`
// Enlaces al reino/jugadores según el nombre en realmlist (p. ej. /trinity-realm, /trinity-players).
const slug = realmSlug(await getRealmName())
const realmHref = `/${slug}-realm`
const playersHref = `/${slug}-players`
return <SiteHeader loggedIn={loggedIn} accountLabel={accountLabel} realmHref={realmHref} />
return <SiteHeader loggedIn={loggedIn} accountLabel={accountLabel} realmHref={realmHref} playersHref={playersHref} />
}