From a9ae6d450678e7b602b71ee1c0926e9e04a5a4ac Mon Sep 17 00:00:00 2001 From: adevopg Date: Mon, 13 Jul 2026 12:39:08 +0000 Subject: [PATCH] =?UTF-8?q?web-next:=20ruta=20del=20reino=20din=C3=A1mica?= =?UTF-8?q?=20/-realm=20(seg=C3=BAn=20realmlist)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La página del reino pasa de /novawow-realm (fija) a una ruta dinámica app/[locale]/[realm] cuyo slug es -realm, con el nombre tomado de acore_auth.realmlist (LIMIT 1). Ej.: realm «Trinity» → /trinity-realm. realmSlug() normaliza el nombre (minúsculas, sin espacios). Si el slug no coincide con el reino actual → notFound(). Convive con el catch-all [...rest] y las rutas estáticas mantienen prioridad (verificado: /login, /account OK; /foo y /novawow-realm → 404). Co-Authored-By: Claude Opus 4.8 (1M context) --- .../{novawow-realm => [realm]}/page.tsx | 34 ++++++++++++++----- web-next/lib/realm.ts | 5 +++ 2 files changed, 31 insertions(+), 8 deletions(-) rename web-next/app/[locale]/{novawow-realm => [realm]}/page.tsx (63%) diff --git a/web-next/app/[locale]/novawow-realm/page.tsx b/web-next/app/[locale]/[realm]/page.tsx similarity index 63% rename from web-next/app/[locale]/novawow-realm/page.tsx rename to web-next/app/[locale]/[realm]/page.tsx index b354916..302bd34 100644 --- a/web-next/app/[locale]/novawow-realm/page.tsx +++ b/web-next/app/[locale]/[realm]/page.tsx @@ -1,25 +1,43 @@ import type { Metadata } from 'next' import { setRequestLocale } from 'next-intl/server' -import { getRealmName } from '@/lib/realm' +import { notFound } from 'next/navigation' +import { getRealmName, realmSlug } from '@/lib/realm' export const dynamic = 'force-dynamic' -export async function generateMetadata(): Promise { - const realm = await getRealmName() - return { title: `Reino - ${realm}` } +// Ruta dinámica del reino: /-realm, donde viene del nombre del +// reino en acore_auth.realmlist (p. ej. «Trinity» → /trinity-realm). +async function resolveRealm(param: string): Promise { + const name = await getRealmName() + return param === `${realmSlug(name)}-realm` ? name : null } -export default async function NovawowRealmPage({ params }: { params: Promise<{ locale: string }> }) { - const { locale } = await params +export async function generateMetadata({ + params, +}: { + params: Promise<{ realm: string }> +}): Promise { + const { realm } = await params + const name = await resolveRealm(realm) + return name ? { title: `Reino - ${name}` } : {} +} + +export default async function RealmPage({ + params, +}: { + params: Promise<{ locale: string; realm: string }> +}) { + const { locale, realm } = await params setRequestLocale(locale) - const realm = await getRealmName() + const name = await resolveRealm(realm) + if (!name) notFound() return (
-

Reino - {realm.toUpperCase()}

+

Reino - {name.toUpperCase()}

diff --git a/web-next/lib/realm.ts b/web-next/lib/realm.ts index 7b5414f..7393b0b 100644 --- a/web-next/lib/realm.ts +++ b/web-next/lib/realm.ts @@ -12,3 +12,8 @@ export async function getRealmName(): Promise { return 'NovaWoW' } } + +/** Slug del reino para la URL (p. ej. «Nova WoW» → «novawow», «Trinity» → «trinity»). */ +export function realmSlug(name: string): string { + return name.toLowerCase().replace(/[^a-z0-9]/g, '') +}