Tech Stack¶
Backend¶
El backend está construido sobre Spring Boot 3 con Java 21 (LTS).
Las versiones de las dependencias las gestiona el spring-boot-starter-parent declarado en el pom.xml, y hereda el
BOM (Bill of Materials) de Spring Boot 3,
que garantiza compatibilidad entre todas las librerías del ecosistema — no se gestionan versiones
individuales por separado.
| Dependencia | Rol |
|---|---|
| Spring Boot 3 | Framework principal del backend |
| Spring Web | API REST — controladores HTTP, serialización JSON |
| Spring Security | Autenticación y autorización — bcrypt, filtros JWT |
| Spring Data JPA | ORM — repositorios, queries, mapeo objeto-relacional |
| PostgreSQL Driver | Conector JDBC para PostgreSQL |
| Lombok | Reducción de boilerplate — @Getter, @Builder, @RequiredArgsConstructor |
| Spring Boot Actuator | Observabilidad — endpoints /health, /metrics para monitorización |
| Spring Cache Abstraction + Caffeine |
Caché en memoria - evita queries repetidas a PostgresSQL |
Por qué Spring Boot 3: Es el estándar absoluto en backends Java enterprise. Aparece en prácticamente todas las ofertas de trabajo Java. La versión 3 requiere Java 17+ y trae soporte nativo para GraalVM, lo que lo hace relevante también en contextos de rendimiento.
Por qué Java 21: Versión LTS activa. Introduce Virtual Threads (Project Loom), que permiten manejar miles de conexiones concurrentes sin el coste de threads del sistema operativo — relevante cuando el backend gestione partidas PvP en tiempo real.
Por qué PostgreSQL: Base de datos relacional con soporte completo de transacciones ACID. La elección sobre NoSQL es deliberada: los datos del juego tienen relaciones claras y el swap atómico de intercambios requiere garantías transaccionales que un modelo documental no ofrece de forma nativa.
Caché con Spring Cache + Caffeine:
Los pools de cartas por pack_types se cachean en memoria con @Cacheable - la query se ejecuta una sola vez y el
resultado viven en RAM. Caffeine es la implementación de caché en memoria más eficiente para JVM. La abstracción de
Spring Cache permite migrar a Redis en el futuro.
Rust generator¶
| Herramienta | Versión | Rol |
|---|---|---|
| Rust | stable | Lenguaje del generador de sobres |
| Cargo | 1.84 | Gestor de dependencias y build tool |
rand crate |
latest compatible | RNG con ChaCha8Rng para pulls reproducibles |
Por qué Rust para el generador:
La apertura de sobres es la pieza más crítica en términos de equidad. ChaCha8Rng con semilla
fija hace cada apertura reproducible y auditable — dado el mismo seed, el resultado es siempre
idéntico, lo que permite verificar que no hay manipulación. El binario se llama desde Java vía
ProcessBuilder, demostrando interoperabilidad entre la JVM y código nativo.
Pendiente¶
Las siguientes tecnologías están planificadas pero aún no implementadas:
| Tecnología | Fase | Rol previsto |
|---|---|---|
| RabbitMQ | Fase 2 | Eventos asíncronos — recompensas de sobres, notificaciones |
| Spring STOMP / WebSocket | Fase 2 | Canal para PvP en tiempo real |
| Redis | Fase 2+ | Reemplazar Caffeine si la caché necesita ser distribuida o persistente |
| Kotlin + Jetpack Compose | Fase 3 | App Android |
| Retrofit 2 | Fase 3 | HTTP client en la app Android |
| React + TypeScript | Fase 3 (opcional) | Cliente web |