Files
NightSpire/web-next/lib/db.ts
T
Inna c36b543184 Full-stack Next.js: la home lee MySQL directamente (sin Django)
Pivote a Next.js full-stack (Django saldrá del todo en el cutover). Next accede a
las mismas BD MySQL que Django:

- lib/db.ts: pools mysql2 (django_wow + acore_*), singleton en globalThis, creds
  en web-next/.env.local (gitignored, copiadas del .env de Django).
- lib/home.ts: getNoticias (home_noticia), getServerStatus (home_serverselection +
  online desde acore_characters + TCP check + expansión por gamebuild, incl. Classic).
- app/page.tsx: home SSR que llama a lib/home (ya NO a la API Django). Se elimina
  lib/api.ts.

Verificado: con el servicio Django PARADO, la home de Next sigue sirviendo 200 con
datos reales -> lee MySQL directo, Django fuera del circuito.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 22:23:12 +00:00

31 lines
1.0 KiB
TypeScript

import mysql from 'mysql2/promise'
// Pools de conexión a las mismas BD MySQL que usaba Django (django_wow + acore_*).
// Se guardan en globalThis para no crear pools nuevos en cada hot-reload de dev.
const g = globalThis as unknown as { _nwPools?: Record<string, mysql.Pool> }
g._nwPools ??= {}
export function db(database: string): mysql.Pool {
if (!g._nwPools![database]) {
g._nwPools![database] = mysql.createPool({
host: process.env.DB_HOST || '127.0.0.1',
port: Number(process.env.DB_PORT || 3306),
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database,
waitForConnections: true,
connectionLimit: 5,
namedPlaceholders: true,
})
}
return g._nwPools![database]
}
export const DB = {
default: process.env.DB_NAME_DEFAULT || 'django_wow',
auth: process.env.DB_NAME_AUTH || 'acore_auth',
characters: process.env.DB_NAME_CHARACTERS || 'acore_characters',
world: process.env.DB_NAME_WORLD || 'acore_world',
web: process.env.DB_NAME_WEB || 'acore_web',
}