Changelogs

Página de votación de usuario (/vote-points) + enlace en cabecera

13 de julio de 2026 a las 00:06

adevopg · f9609aa

- lib/vote.ts: getVoteSites (home_votesite), registerVote (cooldown 12h30 vía home_votelog, acredita PV en home_api_points, registra el voto). - Route /api/vote (POST {url}, guard sesión). Página /vote-points (VotePanel: abre el sitio + registra el voto, muestra PV/cooldown). Enlace "Votar" en cabecera. - Cierra el ciclo con el admin de sitios de voto. Verificado: /vote-points 200, POST 401 sin sesión; lógica probada: voto -> +PV, segundo voto -> cooldown 12h29m.




Admin: gestión de sitios de voto (home_votesite)

13 de julio de 2026 a las 00:03

adevopg · 934bee2

- lib/admin-votes.ts: listVoteSites / createVoteSite / deleteVoteSite. - Routes /api/admin/votes (POST) y /api/admin/votes/[id] (DELETE), guard isAdmin. - Página /admin/votes (AdminVotesManager: crear/listar/borrar) + enlace en dashboard. - Conecta con la página de votación (/vote-points) ya existente. Verificado: guardas (307/403), CRUD del write layer OK (con env cargado).




Admin: gestión de precios de los servicios de personaje

12 de julio de 2026 a las 23:59

adevopg · 0f71e1f

- lib/admin-prices.ts: PRICE_TABLES (rename/customize/change-race/change-faction/ level-up/transfer -> home_*price), getAllPrices, setPrice (fila única: DELETE+INSERT). - Route /api/admin/prices (POST, guard isAdmin). Página /admin/prices con AdminPricesManager (editar cada precio). Enlace en el dashboard admin. - Catálogo Admin (precios + nombres de servicio). Verificado: /admin/prices redirige sin permiso, API 403; setPrice escribe en BD correctamente (probado con env cargado). Pendiente admin: sitios de voto, gold options, moderación del foro.




Panel admin propio: gestión de noticias

12 de julio de 2026 a las 23:55

adevopg · d5b00a8

- lib/admin.ts: isAdmin(session) por allowlist ADMIN_EMAILS (normalizada) o gmlevel de AzerothCore (account_access, resiliente si no existe). ADMIN_EMAILS/ADMIN_GMLEVEL en .env.local. - lib/admin-news.ts: listNews / createNews / deleteNews (home_noticia). - Routes /api/admin/news (POST, guard isAdmin) y /api/admin/news/[id] (DELETE). - Páginas /admin (dashboard) y /admin/news (protegidas: no-admin -> redirect). AdminNewsManager (cliente: crear + listar + borrar). Verificado: /admin sin permiso redirige, APIs 403; el pipeline crear noticia -> se renderiza en la home (SSR) funciona. Turnstile bloquea el login por curl (correcto). Pendiente admin: precios de servicios, foros, sitios de voto, usuarios.




Foro (escritura): crear tema y responder, con saneado HTML

12 de julio de 2026 a las 23:49

adevopg · 239392b

- lib/forum-sanitize.ts: cleanPostHtml con sanitize-html (misma allowlist que forum/sanitize.py de nh3: formato básico + a/img/tablas, rel nofollow, esquemas http/https/mailto). Verificado XSS-safe (script/onclick/javascript: eliminados). - lib/forum-write.ts: createTopic (tema + primer post), createPost (respuesta + updated_at), forumIsPostable / topicIsReplyable. - Routes /api/forum/topic y /api/forum/reply (guard de sesión; identidad = cuenta de juego: poster=username, poster_id=accountId). Componentes NewTopicForm y ReplyForm (clientes). Se muestran solo si hay sesión; el tema cerrado no admite respuesta. Verificado: escritura 401 sin sesión, saneado correcto. Pendiente: editar/borrar, moderación (fijar/cerrar/mover), búsqueda, editor enriquecido.





SÍGUENOS EN