Skip to content

Repository files navigation

YOVI logo

Release — Test, Build, Publish, Deploy Quality Gate Status Security Rating Reliability Rating Maintainability Rating Coverage

Implementación multi-servicio del juego Y desarrollada para la asignatura de Arquitectura del Software en la Universidad de Oviedo.


Enlaces

Aplicación  Documentación


Equipo

Iyán Iglesias Jimena Vázquez Sara Naredo
UO302334 UO301668 UO300563

Tabla de contenidos


Visión general de la arquitectura

El sistema se compone de cuatro servicios independientes. La comunicación entre el frontend y los servicios de usuarios y juego se realiza mediante HTTP/REST, mientras que la comunicación con el servicio de salas se realiza en tiempo real a través de WebSocket (Socket.io).

Servicios

Servicio Tecnología Puerto Responsabilidad
webapp React/Vite/TS 80 SPA frontend
users Node.js/Express 3000 Registro y autenticación de usuarios
rooms Node.js/Socket.io 3001 Gestión de salas y partidas multijugador en tiempo real
gamey Rust/Axum 4000 Motor de juego y servicio de bots

La documentación de arquitectura sigue la plantilla Arc42.


Estructura del proyecto

yovi_es2b/
├── webapp/         # Frontend React + Vite + TypeScript
├── users/          # Servicio de usuarios Node.js + Express
├── rooms/          # Servicio de salas multijugador Node.js + Socket.io
├── gamey/          # Motor de juego y bots en Rust
├── docs/           # Documentación de arquitectura Arc42
└── docker-compose.yml

Prerrequisitos

Asegúrate de tener instalado lo siguiente antes de ejecutar el proyecto:

Herramienta Versión Necesaria para
Docker 24+ Ejecución en contenedores
Docker Compose 2.x Ejecución en contenedores
Node.js 22.x Desarrollo local
npm 10+ Desarrollo local
Rust stable Desarrollo local de gamey
Cargo stable Desarrollo local de gamey

Variables de entorno

Cada servicio se puede configurar mediante variables de entorno. Ajústalas en un archivo .env en la raíz o directamente en docker-compose.yml.

Servicio users

Variable Valor por defecto Descripción
PORT 3000 Puerto en el que escucha el servicio
USERS_DB_URL (ninguno) Cadena de conexión a la base de datos

Servicio rooms

Variable Valor por defecto Descripción
PORT 3001 Puerto en el que escucha el servicio
GAMEY_URL http://localhost:4000 URL del servicio gamey para relay de partidas

Servicio gamey

Variable Valor por defecto Descripción
PORT 4000 Puerto en el que escucha el servicio
RUST_LOG info Nivel de log (debug, info, warn, error)

webapp

Variable Valor por defecto Descripción
VITE_API_BASE_URL http://localhost:3000 URL base del servicio users
VITE_API_URL_ROOMS http://localhost:3001 URL base del servicio rooms
VITE_GAMEY_URL http://localhost:4000 URL base del servicio gamey

Ejecutar el proyecto

Con Docker

Requiere Docker y Docker Compose.

# Construir e iniciar todos los servicios
docker-compose up --build

# Ejecutar en segundo plano
docker-compose up --build -d

# Detener todos los servicios
docker-compose down

Una vez en marcha, los servicios están disponibles en:

Servicio URL
Aplicación web http://localhost
API users http://localhost:3000
Salas multijugador http://localhost:3001
API gamey http://localhost:4000

Sin Docker

Ejecuta cada servicio en una terminal separada.

1. Servicio users

cd users
npm install
npm start
# Disponible en http://localhost:3000

2. Servicio rooms

cd rooms
npm install
npm start
# Disponible en http://localhost:3001

3. Aplicación web

cd webapp
npm install
npm run dev
# Disponible en http://localhost:5173

O arranca ambos a la vez desde el directorio webapp:

cd webapp
npm run start:all

4. Servicio gamey

cd gamey
cargo build
cargo run
# Disponible en http://localhost:4000

Scripts disponibles

webapp

Comando Descripción
npm run dev Inicia el servidor de desarrollo
npm run build Compila para producción
npm test Ejecuta los tests unitarios
npm run test:e2e Ejecuta los tests end-to-end con Playwright
npm run start:all Inicia webapp y el servicio users a la vez

users

Comando Descripción
npm start Inicia el servicio de usuarios
npm test Ejecuta los tests

rooms

Comando Descripción
npm start Inicia el servicio de salas

gamey

Comando Descripción
cargo build Compila la aplicación
cargo test Ejecuta los tests unitarios
cargo run Ejecuta la aplicación
cargo doc Genera la documentación de la API

Tests

El proyecto utiliza distintas estrategias de testing por servicio:

  • webapp — Vitest para tests unitarios, Playwright + Cucumber para tests E2E.
  • users — Jest para tests unitarios e integración.
  • gamey — Framework de testing nativo de Rust (cargo test).

La cobertura de código se monitoriza mediante SonarCloud.

Para ejecutar todos los tests en local:

# webapp
cd webapp && npm test

# users
cd users && npm test

# gamey
cd gamey && cargo test

Documentación

La documentación de arquitectura está escrita en AsciiDoc siguiendo la plantilla Arc42 y se encuentra en el directorio docs/.

Para generarla y visualizarla en local (requiere Asciidoctor):

asciidoctor docs/index.adoc -o docs/output/index.html

Resolución de problemas

Puerto ya en uso

# Encuentra y mata el proceso que usa el puerto (ej. 3000)
lsof -i :3000
kill -9 <PID>

Errores de permisos con Docker en Linux

sudo usermod -aG docker $USER
# Cierra sesión y vuelve a entrar

Gamey no compila (cargo build falla)

Asegúrate de tener la toolchain de Rust actualizada:

rustup update stable

La webapp no alcanza el servicio users

Comprueba que VITE_API_BASE_URL apunta a la dirección real del servicio users. Dentro de Docker, los servicios se comunican por nombre de servicio, no por localhost.

La webapp no alcanza el servicio rooms

Comprueba que VITE_API_URL_ROOMS apunta a la dirección real del servicio rooms. Recuerda que rooms usa WebSocket, por lo que la URL debe ser accesible desde el navegador del cliente, no solo desde dentro de Docker.


About

Yovi es2b

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

Generated from Arquisoft/yovi_0