Este proyecto es el backend de una plataforma para la creación, gestión y seguimiento de torneos de videojuegos online. Ofrece una API RESTful completa.
Las funcionalidades clave incluyen:
- Gestión Integral de Usuarios: Registro, inicio de sesión (JWT) y perfiles de usuario.
- Creación y Administración de Torneos: Funcionalidad para organizar y gestionar diversos tipos de torneos.
- Sistema de Emparejamiento Automatizado: Generación de emparejamientos de partidos de forma eficiente.
- Gestión de Partidos y Resultados: Reporte, actualización y seguimiento de resultados de cada encuentro.
- Sistema de Clasificación Dinámico: Cálculo y actualización de rankings en tiempo real para torneos.
- Comunicación en Tiempo Real: Un chat básico integrado para la interacción entre jugadores y participantes del torneo (sin WebSockets, basado en solicitudes HTTP).
- Seguridad Robustez: Implementación de Spring Security y tokens JWT para autenticación y autorización segura.
- Preparado para Despliegue: Configuraciones que facilitan el despliegue en entornos de producción.
- Lenguaje: Java 17
- Framework: Spring Boot 3.5.0 (Spring Web MVC)
- Control de Dependencias: Apache Maven 3.9
- Seguridad: Spring Security con JSON Web Tokens (JWT) (com.auth0:java-jwt 4.4.0)
- Base de Datos: PostgreSQL (org.postgresql:postgresql)
- Persistencia: Spring Data JPA / Hibernate
- Validación: Spring Boot Starter Validation
- Utilidades: Lombok (lombok:1.18.32)
- Documentación de APIs: SpringDoc OpenAPI con Swagger UI (org.springdoc:springdoc-openapi-starter-webmvc-ui 2.8.9)
- Contenedorización: Docker y Docker Compose
Estas instrucciones te guiarán para poner el proyecto en funcionamiento en tu máquina local para desarrollo y pruebas.
Asegúrate de tener instalado lo siguiente:
- Git: Para clonar el repositorio.
- Java Development Kit (JDK) 17:
- Apache Maven 3.8+:
- Docker Desktop: Incluye Docker Engine y Docker Compose (recomendado para una configuración rápida de la base de datos y la aplicación).
- PostgreSQL (Opcional, si no usas Docker para la DB): PostgreSQL 16 o compatible.
Abre tu terminal y ejecuta:
Abre tu terminal y ejecuta:
git clone git@github.com:msxd26/GameHub.git
cd GameHubPuedes configurar la base de datos de dos maneras:
La forma más rápida de levantar la base de datos es usando Docker Compose, ya que la configuración está predefinida en los archivos del proyecto.
Asegúrate de que Docker Desktop esté en ejecución.
Desde el directorio raíz del proyecto (GameHub), ejecuta:
docker-compose up -d dbEste comando levantará solo el contenedor de PostgreSQL (gamehub_db_container) y lo mantendrá en segundo plano. La base de datos GameHub se creará automáticamente con el usuario postgres y contraseña 1234.
Si prefieres usar una instalación local de PostgreSQL:
- Abre un cliente de PostgreSQL (ej.
psql, pgAdmin) y crea una nueva base de datos.
CREATE DATABASE "GameHub";- Asegúrate de que el usuario
postgrescon la contraseña1234tenga acceso a esta base de datos. Si tu configuración es diferente, deberás modificar el archivosrc/main/resources/application.properties:
spring.datasource.url=jdbc:postgresql://localhost:5432/GameHub
spring.datasource.username=tu_usuario_pg
spring.datasource.password=tu_contraseña_pgNota sobre tablas: Spring Data JPA, con spring.jpa.hibernate.ddl-auto=update, creará y actualizará automáticamente el esquema de la base de datos (tablas, relaciones) basándose en las entidades de Java cuando la aplicación se inicie por primera vez.
Tienes dos opciones principales para ejecutar el backend:
Esta es la forma recomendada, ya que levanta tanto la base de datos (si no está ya corriendo con docker-compose up -d db) como la aplicación en contenedores aislados.
- Asegúrate de que Docker Desktop esté en ejecución.
- Desde el directorio raíz del proyecto (
GameHub), ejecuta:
docker-compose up --buildEste comando construirá la imagen de Docker de tu aplicación y levantará ambos contenedores (gamehub_db_container y gamehub_app_container). La aplicación estará disponible en http://localhost:8080.
Si ya tienes la base de datos ejecutándose (ya sea localmente o con docker-compose up -d db):
- Asegúrate de que tu
application.propertiesesté configurado para conectar a tu instancia de PostgreSQL. - Desde el directorio raíz del proyecto (
GameHub), ejecuta:
mvn spring-boot:runEsto compilará y ejecutará la aplicación Spring Boot. Estará disponible en http://localhost:8080.
Para facilitar las pruebas de la API y el acceso a funcionalidades de administrador, la aplicación crea un usuario administrador por defecto al iniciar si no existe uno. ¡ADVERTENCIA: Estas credenciales son solo para entornos de desarrollo/prueba y NO deben usarse en producción!
- Usuario Administrador:
- Username:
admin_gamehub - Email:
admin@gamehub.com - Contraseña:
adminpass
- Username:
Puedes usar estas credenciales para iniciar sesión a través del endpoint /api/auth/login y obtener un token JWT con el rol ADMIN.
La API estará disponible en http://localhost:8080/api/ una vez que la aplicación esté en funcionamiento.
Autenticación (JWT) La mayoría de los endpoints requieren autenticación mediante un token JWT.
Registro: Envía una solicitud POST a /api/auth/register con username, email y password.
Login: Envía una solicitud POST a /api/auth/login con username y password. La respuesta incluirá el token JWT.
Uso del Token: Incluye el token JWT en el encabezado Authorization de tus solicitudes protegidas, con el formato Bearer <tu_token_jwt>.
Documentación de la API (Swagger UI) Una vez que la aplicación esté ejecutándose, puedes acceder a la documentación interactiva de la API a través de Swagger UI:
URL: http://localhost:8080/swagger-ui.html
Aquí podrás ver todos los endpoints, sus descripciones, modelos de solicitud/respuesta y probarlos directamente.
Colección de Postman Hemos proporcionado una colección de Postman para facilitar las pruebas de la API.
Abre Postman.
Ve a File > Import (o el botón "Import" en la interfaz).
Selecciona los archivos .json que se encuentran en la carpeta postman/ de este repositorio:
GameHub.postman_collection.json
GameHub - Local Development.postman_environment.json
Una vez importados, selecciona el entorno GameHub - Local Development en la esquina superior derecha de Postman para que las URLs de las solicitudes ({{baseUrl}}) se configuren correctamente.
🧪 Ejecutar Pruebas
Para ejecutar las pruebas unitarias y de integración del proyecto, usa el siguiente comando Maven desde el directorio raíz del proyecto:
mvn test🤝 Contribución
Si deseas contribuir a este proyecto, por favor sigue estos pasos:
Haz un "fork" del repositorio.
Crea una nueva rama (git checkout -b feature/nueva-funcionalidad).
Realiza tus cambios y asegúrate de que las pruebas pasen.
Haz un commit de tus cambios (git commit -m "feat: Descripción de la nueva funcionalidad").
Sube tu rama (git push origin feature/nueva-funcionalidad).
Abre un "Pull Request".
📄 Licencia Este proyecto está bajo la Licencia Apache 2.0. Consulta el archivo LICENSE para más detalles.