Skip to content

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