Files
NovaWoW/home/views/api.py
T
Inna d612b7916c Fase 1 (isla 2): estado del servidor de la portada en React/TSX
Segunda isla de la home: la tabla de estado (nombre, online, login, hora,
dirección) pasa de plantilla Django a componente React.

- API: home_status_api -> /api/home/status/ (server_name, address, expansion,
  online_characters, status). Reutiliza check_server_status y
  get_online_characters_count de views/pages.
- React: ServerStatus.tsx (fetch + reloj en vivo con setInterval, mismas clases
  CSS). El entry home.tsx ahora monta dos islas: #home-news-app y #home-status-app.
- partials/noticias.html: la <table> de estado se sustituye por el contenedor.

Verificado: check OK, ambos endpoints 200, la home monta las dos islas.

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

40 lines
1.4 KiB
Python

from ._base import *
from .pages import check_server_status, get_online_characters_count
# Endpoints JSON que alimentan las islas React/TSX del frontend (Vite).
# Se montan bajo /api/ (fuera de i18n_patterns). De momento con JsonResponse;
# si crece la superficie de la API se puede introducir DRF.
def home_news_api(request):
"""Últimas noticias para la isla de la portada."""
noticias = Noticia.objects.order_by('-fecha_publicacion')[:50]
data = [
{
"id": n.id,
"titulo": n.titulo,
"fecha": n.fecha_publicacion.isoformat() if n.fecha_publicacion else None,
"contenido": n.contenido,
"enlace": n.enlace or None,
}
for n in noticias
]
return JsonResponse({"noticias": data})
def home_status_api(request):
"""Estado del servidor para la isla de la portada (nombre, online, login, dirección)."""
server = ServerSelection.objects.first()
online = get_online_characters_count()
status = "Online" if (server and check_server_status(server.address, server.port)) else "Offline"
expansion = "WotLK" if (server and server.gamebuild == 12340) else "Cataclysm"
return JsonResponse(
{
"server_name": server.name if server else None,
"address": server.address if server else None,
"expansion": expansion,
"online_characters": online,
"status": status,
}
)