About arc42
arc42, the template for documentation of software and system architecture.
Template Version 8.2 EN. (based upon AsciiDoc version), January 2023
Created, maintained and © by Dr. Peter Hruschka, Dr. Gernot Starke and contributors. See https://arc42.org.
1. Introducción y Objetivos
1.1. Descripción de los requisitos
-
La app tendrá una interfaz web para jugar al juego Y.
-
Se ofrecerán dos funcionalidades de juego:
-
El usuario podrá enfrentarse a otro usuario.
-
El usuario podrá enfrentarse a un bot implementado.
-
El bot tendrá diferentes estrategias, y el usuario podrá elegir cuál de ellas usar (nivel de dificultad).
-
-
-
El tablero tendrá tamaño variable (a elección del usuario, sino el tamaño será el establecido como automático).
-
El usuario podrá registrarse en la aplicación, o inciar sesión si ya tiene cuenta asociada.
-
Cada usuario podrá ver un historial de partidas y sus estadísticas (ganadas/perdidas, número de partidas, etc.).
-
-
Se proporcionará un API externo (documentado) para que los bots puedan usar el sistema.
-
El API permitirá consultar/gestionar info de usuarios y partidas.
-
El API tendrá un método
playque recibe al menosposition(en notación YEN) y devuelve el siguiente movimiento (también en YEN).
-
-
El “motor” del juego estará en un módulo/servicio aparte (implementado en Rust), y la web lo llamará por HTTP mediante JSON (usando YEN).
Casos de uso:
| ID | Caso de uso | Actor | ¿Qué pasa? |
|---|---|---|---|
UC-01 |
Registrarse / iniciar sesión |
Usuario |
El usuario se crea cuenta o entra con su cuenta para poder guardar partidas y ver estadísticas. |
UC-02 |
Crear partida con tamaño de tablero |
Usuario |
El usuario crea una partida eligiendo el tamaño y el modo (vs. otro usuario o vs. bot). |
UC-03 |
Jugar un turno desde la web |
Usuario |
El usuario hace un movimiento y el sistema actualiza el estado de la partida. |
UC-04 |
Jugar contra bot (pedir movimiento) |
Sistema / Usuario |
Si es el turno del bot, se llama al servicio (módulo `gamey') para que sugiera el siguiente movimiento según la estrategia/dificultad escogida. |
UC-05 |
Comprobar si alguien ha ganado |
Sistema |
Después de cada movimiento, se comprueba si la partida está ganada. |
UC-06 |
Ver historial y estadísticas |
Usuario registrado |
El usuario ve el historial partidas anteriores y sus estadisticas guardadas en su cuenta. |
UC-07 |
Consultar/gestionar datos vía API |
Bot |
El bot puede acceder/gestionar información de usuarios y partidas (según los permisos establecidos). |
1.2. Objetivos de calidad
Los objetivos de calidad del sistema se concretan y evaluarán en la sección "10. Atributos de Calidad" siguiendo el modelo ISO/IEC 25010, mediante un árbol de calidad y escenarios. De forma resumida, la arquitectura prioriza:
-
Adecuación funcional: El motor debe garantizar el cumplimiento de reglas y la validación del estado de la partida, evitando acciones inválidas y guiando al usuario durante el juego.
-
Eficiencia de desempeño: Se busca respuesta ágil y sin “lag” en las operaciones principales, con un uso eficiente de recursos y soporte de concurrencia, apoyado en el motor en Rust y el despliegue en contenedores.
-
Compatibilidad / interoperabilidad: La comunicación entre subsistemas y con bots externos debe ser estable, clara y validada, basada en JSON con notación YEN y un API bien documentado.
-
Usabilidad: La web debe ser intuitiva y fácil de aprender, con una interfaz que indique turnos, opciones y restricciones, reduciendo errores del usuario.
-
Fiabilidad / disponibilidad: El sistema debe mantener estabilidad ante fallos habituales y ser observable/monitorizable para detectar caídas o degradaciones.
-
Seguridad: Se controlarán accesos (registro/login y API pública), validación de entradas y medidas de protección de credenciales (por ejemplo, cifrado/hasheado de contraseñas).
-
Mantenibilidad: El diseño modular por microservicios y la separación de responsabilidades deben permitir incorporar nuevas estrategias/reglas o cambios en el API minimizando el impacto en el resto del sistema.
-
Portabilidad: Al basarse en Docker, el sistema debe ser desplegable en distintos entornos con una instalación reproducible.
1.3. Stakeholders
| Stakeholder | Descripción | Expectativas / motivaciones |
|---|---|---|
Jugador (usuario final) |
Persona que entra a la web para jugar al juego Y (contra otra persona o contra el bot). |
Que sea fácil de usar, que cargue rápido, que el juego no dé errores raros, poder elegir tamaño/estrategia y ver su historial y estadísticas. |
Equipo de desarrollo |
Mario Amandi, Marcelo Díez, Andrea Ivanov y Eloy Rubio |
Poder avanzar sin bloqueos, tener una arquitectura modular, poder implementar buenos tests y desplegar el sistema, además de mejorar las habilidades de programación (nuevos lenguajes), desarrollo y trabajo en equipo. |
Profesorado |
Jose E. Labra Gayo, Pablo González, Diego Martín Fernández y Celia Melendi Lavandera |
Que se cumplan los requisitos, que se justifiquen las decisiones arquitectónicas, que haya pruebas de código y que el despliegue sea accesible por web. |
Micrati |
Empresa que decide apostar por el desarrollo del juego y encarga el proyecto. |
Que el producto final sea usable y presentable, que cumpla los requisitos establecidos, que sea fácil de mantener/mejorar y que no tenga fallos. |
2. Restricciones Arquitectónicas
2.1. Restricciones técnicas y estructurales
| Restricción | Descripción |
|---|---|
Frontend desarrollado con Vite y React |
La interfaz gráfica debe implementarse con Vite y/o React. |
Servicio de usuarios desarrollado con Node.js y Express |
El servicio dedicado a la gestión de usaurios debe ser un REST API implementado con Node.js y/o Express. |
Juego desarrollado con Rust |
La lógica clave del juego (crear tablero, manejar movimientos, implementación de bot, etc) tiene que estar desarrollado en Rust y expuesta como servicio web. |
Comunicación por JSON usando notación YEN |
Los mensajes entre los módulos de interfaz ( |
Soporte de tablero de tamaño variable |
El sistema debe soportar un tablero cuyo tamaño sea variable (un tamaño establecido predefinido, y que el usuario pueda escoger otro tamaño diferente). |
Diverentes estrategias de bot (dificultad) |
El bot debe tener más de una estrategia y el usuario debe poder elegirla (relacionado con niveles de dificultad). |
Host en Docker |
El sistema deberá estar "levantado" con Docker en una máquina virtual para la entrega final. |
Documentación con arc42 |
La documentación debe seguir la estructura base de la plantilla arc42. |
Control de versiones |
El proyecto se desarrollará mediante Git, alojándolo en GitHub. |
2.2. Restricciones organizativas y de proceso
| Restricción | Descripción |
|---|---|
Énfasis en calidad y evaluación |
Se valora explícitamente documentación, pruebas, despliegue, repositorio y calidad general. |
Trabajo en equipo y control de cambios |
Al ser un proyecto en grupo, se necesita un flujo de trabajo con control de versiones, revisiones y acuerdos, además de comunicación entre compañeros. |
Gestión de tareas |
Se utilizará la funcionalidad de Github "Github Issues" para asignar y gestionar las tareas de cada miembro del equipo. |
Tiempo y alcance limitados |
El proyecto tiene diferentes entregas a lo largo de su desarrollo (versiones). |
Reuniones de equipo |
Se realizará al lo menos una reunión semanal (sesión de laboratorio). Además, se harán reuniones extras cuando se vea necesario (presenciales o telemáticas) para poner de acuerso diferentes implementaciones. Estas quedarán reflejadas en sus respectivas actas en el apartado "Wiki" del repositorio de GitHub. |
3. Contexto y Alcance
3.1. Contexto de negocio
-
Jugador: Usa el sistema para registrarse/iniciar sesión, jugar (elegir estrategia, contrincante y tamaño de tablero) y consultar resultados.
-
Bot: Consume el API para automatizar partidas y realizar jugadas.
-
Administrador: Supervisa el sistema y su disponibilidad (logs, despliegue, etc.).
-
Repositorios de datos (MongoDB): Almacena todos los datos necesarios relacionados con los usuarios y las partidas de estos.
3.2. Contexto técnico
-
Web Browser (Jugador): Cliente que actua con la interfaz web. Se comunica con el frontend y realiza peticiones al backend para registro/autenticación y gestión de partidas.
-
Servidor (Docker): Aloja los servicios backend y el motor del juego. Contiene:
-
webapp (React/Vite): Contenedor que sirve la aplicación frontend (SPA) como contenido estático al navegador.
-
users (Node/Express): Servicio backend que expone el API REST público. Gestiona usuarios y partidas y actúa como punto de entrada tanto para el navegador como para el bot.
-
gamey (Rust): Servicio interno que encapsula la lógica del juego. Se invoca desde el backend para verificar victoria, calcular sugerencias de movimientos de bot y gestiona el estado del tablero, intercambiando este último usando notación JSON (YEN).
-
MongoDB: Servicio de persistencia donde se almacenan los datos correspondientes de usuarios, partidas y estadísticas.
-
-
Bot Client: Cliente externo que consume el API público enviando posiciones en YEN para obtener el siguiente movimiento.
4. Estrategia de Solución
4.1. Decisiones Tecnológicas
El sistema adopta una arquitectura de microservicios con tres componentes principales:
-
webapp (React + Vite + TypeScript): Interfaz web donde los usuarios juegan
-
users (Node.js + Express): Gestiona usuarios, autenticación y partidas
-
gamey (Rust): Motor del juego con las reglas y lógica del Juego Y
4.1.1. Stack Tecnológico
Frontend (webapp):
-
React + TypeScript para crear una interfaz de usuario moderna y robusta
-
Vite para desarrollo rápido
Backend (users):
-
Node.js + Express por su simplicidad para crear APIs REST
-
Swagger para documentar el API
-
Prometheus para recoger métricas del sistema
Motor de juego (gamey):
-
Rust por su alto rendimiento y seguridad
-
Puede ejecutarse como servidor web o desde línea de comandos
Base de datos:
-
MongoDB por su flexibilidad y fácil integración con JSON
Comunicación:
-
HTTP/REST con JSON
-
Notación YEN para las posiciones del tablero
Despliegue:
-
Azure para alojar la maquina virtual en la que se ejecuta la aplicación
-
Docker para que funcione igual en todos los entornos
4.2. Patrones Arquitectónicos
4.2.1. Frontend: Single Page Application (SPA)
Webapp es una aplicación de página única con React que actualiza dinámicamente el contenido sin recargar la página.
4.2.2. Motor de Juego: Separación entre Dominio e Infraestructura
gamey separa la lógica del juego de los detalles técnicos:
Lógica del juego:
-
core/: Núcleo del juego -
bot/: Diferentes estrategias de bots
Infraestructura:
-
game_server/: Servidor del juego con el servidor -
bot_server/: Conexión del bot con el servidor -
notation/: Conversión entre formatos (YEN, YGN)
4.3. Decisiones Organizativas
Gestión:
-
GitHub Issues para tareas y bugs
-
Kanban para seguimiento visual
-
Pull Requests con revisión obligatoria
-
Rama
masterprotegida
Documentación:
-
Arc42 para la documentación del proyecto
-
Draw.io para realizar los diagramas
-
Wiki para las actas de las reuniones
5. Vista de bloques
5.1. Visión general
Vista general del sistema con tres microservicios independientes: webapp (interfaz), users (gestión de usuarios) y gamey (motor del juego).
6. Vista de ejecución
6.1. Registrar un usuario
Proceso de registrar un usuario.
6.2. Jugar una casilla
Proceso de jugar una casilla.
7. Vista de Despliegue
7.1. Infrastructura Nivel 1
La arquitectura de despliegue se basa en la contenedorización de los servicios, permitiendo un entorno aislado y reproducible tanto en desarrollo como en producción dentro de la infraestructura de Microsoft Azure.
- Motivación
-
Se ha elegido Azure por su capacidad de integración con flujos de CI/CD (GitHub Actions) y su robustez. El uso de Docker garantiza que el software se comporte de la misma manera en el servidor que en los entornos de prueba, evitando el clásico "en mi máquina funciona".
- Características de calidad y/o rendimiento
-
-
Disponibilidad: Azure garantiza un SLA elevado para sus servicios de computación.
-
Observabilidad: La inclusión de Prometheus y Grafana directamente en la infraestructura permite monitorizar el rendimiento y la salud de los servicios en tiempo real.
-
Escalabilidad: Azure ofrece escalado automático, lo que permite ajustar los recursos según la demanda.
-
- Mapeo de los bloques de construcción a la infraestructura
| Bloque de Construcción | Puerto Externo |
|---|---|
webapp |
80 |
users |
3000 |
gamey |
4000 |
prometheus |
9090 |
grafana |
9091 |
7.2. Infrastructura Nivel 2
7.2.1. Servicios de Aplicación
Estos contenedores representan la lógica de negocio y la interfaz de usuario:
-
webapp (Puerto 80): Servidor web (Nginx/Apache) que sirve la aplicación frontend. Se comunica con el backend a través de la URL de API configurada.
-
users (Puerto 3000): Microservicio encargado de la gestión de usuarios y autenticación.
-
gamey (Puerto 4000): Microservicio encargado de la lógica del juego.
7.2.2. Servicios de Monitorización
Infraestructura dedicada a asegurar el correcto funcionamiento del sistema bajo carga:
-
Prometheus (Puerto 9090): Recolecta métricas de los servicios
usersy otros componentes. -
Grafana (Puerto 9091): Visualiza las métricas recolectadas mediante paneles de control (dashboards) configurados mediante volúmenes de aprovisionamiento.
8. Conceptos Transversales (Cross-cutting Concepts)
8.1. Monitorización y Observabilidad
Para garantizar la salud del sistema, se ha implementado una infraestructura de observabilidad transversal:
-
Recolección de métricas: Prometheus actúa como el recolector central, extrayendo datos de rendimiento de los diferentes contenedores.
-
Visualización: Grafana proporciona tableros de control para monitorizar en tiempo real el estado de los servicios, facilitando la detección temprana de fallos.
8.2. Proceso de Desarrollo y Gestión (GitHub Ecosystem)
Para asegurar la calidad del software y la organización del equipo, se utiliza el ecosistema de GitHub de manera integral:
-
Gestión de Tareas (Kanban): Se utiliza GitHub Projects con una metodología Kanban para visualizar el flujo de trabajo (To Do, In Progress, Done…). Esto permite el seguimiento en tiempo real del estado de cada funcionalidad.
-
Seguimiento de Tareas (Issues): Cada nueva funcionalidad, error o mejora se documenta mediante Issues, que sirven como unidad básica de trabajo y permiten la trazabilidad de los requisitos.
-
Flujo de Trabajo (Pull Requests): El código no se integra directamente en la rama principal. Se utilizan Pull Requests (PRs) para la revisión, asegurando que el código cumpla con los estándares antes de ser fusionado.
8.3. Tecnologías
El sistema adopta un enfoque de varios lenguajes, seleccionando la herramienta más adecuada para cada dominio del problema:
-
Backend de Gestión (Node.js/Express): El servicio
usersutiliza un entorno basado en eventos y JavaScript para gestionar la lógica de usuario de forma ágil y escalable. -
Motor de Juego de Alto Rendimiento (Rust): El servicio
gameyestá desarrollado en Rust para garantizar la seguridad de memoria y un alto rendimiento en la lógica del juego, ofreciendo además versatilidad al poder ejecutarse tanto en modo servidor como en modo CLI. -
Frontend Moderno (React + Vite): La interfaz de usuario (
webapp) utiliza React para una gestión eficiente del estado de la UI y Vite como herramienta de construcción rápida.
9. Decisiones de Arquitectura (ADR)
En esta sección se documentan las decisiones arquitectónicas fundamentales que rigen el diseño y desarrollo de Yovi_es4a, detallando su justificación y las alternativas consideradas.
9.1. ADR 1: Uso de MongoDB como Base de Datos
-
Estado: Aceptada.
-
Contexto: Se requiere un sistema de persistencia para almacenar los datos de los usuarios y del juego que sea flexible y compatible con el ecosistema tecnológico actual.
-
Alternativas: Bases de datos relacionales (como MySQL).
-
Justificación: Compatibilidad: MongoDB utiliza formato BSON (variante de JSON), lo que facilita enormemente el flujo de datos con el frontend en React y el uso de TypeScript**.
-
Integración con Rust: La seguridad de tipos permite convertir documentos de la base de datos en
structsde Rust con una sola línea de código, garantizando datos válidos en el motorgamey. -
Facilidad de despliegue: Gracias a Docker, levantar una instancia de MongoDB es inmediato, facilitando la adición de requisitos sin necesidad de migraciones complejas.
-
Idoneidad: Es ideal para estructuras de datos no excesivamente complejas, como las de un juego web.
-
-
Consecuencias: Se espera una mayor flexibilidad y rapidez en el desarrollo al no depender de esquemas rígidos.
9.2. ADR 2: Uso inicial de PlantUML para diagramación
-
Estado: Reemplazada (por ADR 3).
-
Contexto: Necesidad de una herramienta para crear los diagramas técnicos de la documentación arc42.
-
Alternativas: Editores visuales como draw.io.
-
Justificación: Enfoque técnico: Es una herramienta basada en texto ("pseudo-código") recomendada en el ámbito académico.
-
Mantenibilidad: El uso de código facilita la realización de cambios rápidos y el control de versiones.
-
-
Consecuencias: Permite la generación automática de diagramas visuales a partir de relaciones definidas por código, aunque carece de flexibilidad en la disposición visual manual.
9.3. ADR 3: Adopción de draw.io para diagramas
-
Estado: Aceptada.
-
Contexto: Tras evaluar el uso de PlantUML, se identificó la necesidad de una representación más esquemática y visual de los componentes.
-
Alternativas: PlantUML (mantenida como opción de respaldo).
-
Justificación: Intuitividad: Es una herramienta más visual que no requiere aprendizaje previo para su manejo.
-
Control Visual: Permite ubicar los componentes (
webapp,users,gamey) libremente, facilitando la representación de relaciones y jerarquías de forma más clara y esquemática.
-
-
Consecuencias: Aunque requiere algo más de tiempo manual para la creación, resulta más cómoda y comunicativa para el equipo de desarrollo.
10. Requisitos de Calidad
En esta sección se evaluarán los requisitos de calidad del proyecto siguiendo el modelo ISO/IEC 25010, el cuál nos facilita una serie de puntos imprescindibles para cumplir los estándares internacionales de ingeniería del software.
10.1. Quality Tree
Adecuación funcional
-
Completitud funcional: Se cubren los requisitos de jugabilidad implementando las acciones propias del juego Y, competición contra un bot y contra otros usuarios.
-
Corrección funcional: Se contemplan las reglas de juego desde el motor, garantizando una validación precisa del estado de la partida en cada momento. Se guía al usuario a seguir correctamente el desarrollo de partida. SC1
Eficiencia de desempeño
-
Comportamiento en el tiempo: Se garantiza un tiempo de respuesta óptimo al utilizarse Rust en el motor del juego. Además de la implementación de una estrategia cuidada del algoritmo de respuesta.
-
Utilización de recursos: El despliegue mediante contenedores Docker permite una gestión eficiente de la memoria y la CPU para los tres subsistemas (webapp, users, gamey). SC4
-
Capacidad: Se limitan los tamaños de tablero dentro de un rango para que siga siendo jugable dentro de la configuración que el usuario escoja.
Compatibilidad
-
Facilidad para interoperar: El intercambio de información entre subsistemas se realiza estrictamente mediante mensajes JSON siguiendo la notación YEN, asegurando que el API sea compatible tanto con la WebApp como con bots externos.
-
Coexistencia: Los microservicios están clasificados en sus contenedores correspondientes y facilmente se levantan y conectan entre sí en el docker-compose.yml.
Usabilidad
-
Inteligibilidad: Dispone de una interfaz clara e intuitiva diseñada con React para facilitar su uso a todo tipo de usuario. Se busca tener un aspecto actualizado.
-
Capacidad de aprendizaje: El juego sigue reglas sencillas con facilidad de aprendizaje. La dificultad está presente en aprender qué estrategia seguir.
-
Operabilidad: La propia interfaz te guía durante el juego mostrándote de quién es el turno, las casillas disponibles y opciones disponibles. SC2
-
Protección contra errores de usuario: Aquellas acciones que desencadenarían algún fallo, como por ejemplo jugar fuera de tu propio turno, están deshabilitadas, previendo una mala práctica del juego.
-
Participación del usuario: Se dispone de una interfaz interactiva con distintas funciones para que el usuario además de jugar al juego pueda registrar usuario y disponer de sus estadísticas.
-
Accesibilidad: Cualquier persona de habla hispana puede acceder al juego. No tiene soporte de idiomas. SC3
-
Asistencia al usuario: Dispone de una ayuda para entender qué hace cada componente en cada caso, además de tooltips y mensajes descriptivos.
-
Autodescripción: Se busca dejar lo más claro posible el uso de cada herramienta ya sea con un texto descriptivo en botones o dibujos que indiquen claramente su finalidad.
Fiabilidad
-
Madurez: A lo largo de todo el proyecto se utiliza SonarCloud para mantener cierta calidad de código. Se han realizado pruebas unitarias y de integración para garantizar la estabilidad del sistema.
-
Disponibilidad: Se utilizan las herramientas Prometheus y Grafana para monitorizar el estado de los microservicios y detectar posibles caídas o problemas de rendimiento.
Seguridad
-
Confidencialidad: Se implementa un sistema de registro apoyado por una base de datos para almacenar a los usuarios, los cuales se autenticarán para acceder a sus cuentas.
-
Integridad: Se implementa un grado más de seguiridad cifrando las contraseñas de los usuarios, así nosotros tampoco contamos explicitamente con estas. SC5
-
No repudio: Se guarda en la base de datos la interacción del usuario con la aplicación junto con una serie de datos estadísticos, por lo que el correo asociado con la cuenta guarda un registro de actividad.
Mantenibilidad
Portabilidad
-
Adaptabilidad: Al estar basado en Docker, el proyecto es independiente del sistema operativo, lo que facilita su despliegue en diferentes entornos.
-
Instalabilidad: Mediante scripts de npm y comandos de Cargo, se levanta el entorno al completo rápidamente, con todos los componentes ya configurados.
10.2. Quality Scenarios
A continuación se exponen distintos escenarios de uso identificados por un código, por ejemplo SC1. Este código se encontrará en el arbol de calidad en el apartado que lo satisface, si pinchas en él te redirige a requisito de calidad.
| ID | Atributo | Escenario |
|---|---|---|
Adecuación funcional |
Un usuario trata de colocar una ficha en un turno que no es el suyo. El sistema no le permite saltarse el turno. |
|
Usabilidad |
Un nuevo usuario juega por primera vez sin saber las reglas de turnos, la interfaz muestra claramente mediante identificadores visuales cuándo le toca. |
|
Usabilidad |
Una persona que no sabe español accede al juego. No tiene otra opción que jugar en español, lo que dificulta su experiencia de usuario. |
|
Eficiencia de desempeño |
Se quiere jugar una partida rápida, el juego responde rápido a los cambios de ventana y carga de componentes visuales. |
|
Seguridad |
Se accede con una clave no muy segura, se cifran las contraseñas por lo que se añade un grado de seguridad. |
|
Mantenibilidad |
Nos comunican que hay un nuevo requisito en la interfaz y que además se ha añadido una regla, son facilmente indentificables las zonas responsables de cada tarea. |
11. Riesgos y Deudas Técnicas
En esta sección se describen los riesgos encontrados en el desarrollo del proyecto y las soluciones propuestas.
| Riesgo | Descripción | Solución |
|---|---|---|
Mezcla de lengueajes |
Para este proyecto se usa Rust, Node.js y React, añadiendo dificultad extra ya que utilizan lenguajes con los que no estamos familiarizados, además de que el proyecto tiene equipos marcados para sección. |
Estar al tanto revisando el trabajo todos de todos, respondiendo pull request y manteniendo en cada sección una documentación clara y un seguimiento del proyecto exhaustivo. |
Curva de aprendizaje de Rust |
Se trata de un lenguaje complejo con el que levantar un proyecto de cero sin conocer su sintaxis y funcionamiento puede suponer un retraso. |
Documentarse muy bien, tomar ejemplos de otros proyectos y apoyarse en la IA como guía. Se empezó implementando algoritmos con dificultades más leves para ir mejorándolos. |
Tiempos de carga elevados |
El juego utiliza un algoritmo de búsqueda en el que se valoran las mejores opciones recorriendo repetidamente un arbol, lo que puede costar tiempos elevados de carga y hacer que se cuelgue el contenedor. |
Implementar límites de tiempo de respuesta. |
Seguridad en el servicio de usuarios |
Para acceder al juego hay que pasar por una ventana de registro en la que el usuario debe introducir sus datos. |
Se implementan dos medidas, la primera de verificación de integridad, para que el usuario corrobore que tiene acceso al correo que está usando se emplea una verificación en dos pasos. La segunda es que en nuestra base de datos almacenamos codigos hash creados a partir de la contraseña del usuario, por lo que no disponemos de su contraseña real. |
12. Glosario
| Term | Definition |
|---|---|
Arc42 |
Plantilla de arquitectura de software utilizada para estructurar y documentar las decisiones de diseño de este proyecto. |
Docker Compose |
Herramienta utilizada para orquestar la ejecución simultánea de los servicios webapp, users y gamey, definiendo sus redes y puertos en un solo archivo de configuración. |
SPA (Single Page Application) |
Arquitectura del frontend (webapp) construida con React y Vite, donde la aplicación se carga una sola vez y actualiza dinámicamente el contenido sin recargar la página. |
Coordenadas Baricéntricas |
Sistema de coordenadas (x, y, z) utilizado para representar posiciones en el tablero triangular. Cumplen la restricción x + y + z = N - 1, lo que facilita el cálculo de distancias a los lados del triángulo. |
MCTS (Monte Carlo Tree Search) |
Algoritmo probabilístico que decide el mejor movimiento ejecutando miles de partidas aleatorias desde el estado actual para estimar estadísticamente la probabilidad de victoria. |
YEN (Y Exchange Notation) |
Formato de serialización basado en JSON inspirado en FEN. Representa el estado completo de una partida (tablero, turno, jugadores) para su almacenamiento o transmisión. |
