Backend para almacenar y gestionar partidas de videojuegos, permitiendo a los usuarios registrar sus juegos y llevar un seguimiento detallado de cada partida (rondas jugadas, tiempo invertido, puntuaciones, etc.).
- Tecnologias utilizadas
- Estructura de la base de datos
- Autenticacion
- Endpoints
- Auth
- Usuarios
- Juegos
- Flujo tipico de uso
- Instalacion y ejecucion
- Variables de entorno
- Java 21
- Spring Boot 3.3.5
- Spring Security + JWT
- Spring Data MongoDB
- MongoDB
- Lombok
- Maven
Almacena los datos de los usuarios registrados.
| Campo | Tipo | Descripcion |
|---|---|---|
| id | String | ID autogenerado por MongoDB |
| nombre | String | Nombre del usuario |
| apellidos | String | Apellidos del usuario |
| String | Email (unico, usado para login) | |
| username | String | Nombre de usuario (unico) |
| password | String | Contrasena encriptada |
| rol | String | Rol del usuario (ej. ROLE_USER) |
| fechaNacimiento | LocalDate | Fecha de nacimiento |
| fechaRegistro | LocalDateTime | Fecha y hora de registro |
Almacena los juegos de cada usuario, con sus rondas anidadas.
| Campo | Tipo | Descripcion |
|---|---|---|
| id | String | ID autogenerado por MongoDB |
| userId | String | ID del usuario propietario |
| titulo | String | Titulo del juego |
| plataforma | String | Plataforma (PC, Switch, PS5, etc.) |
| estado | String | Estado: Pendiente, En curso, Completado, Abandonado |
| totalTiempoJugado | Integer | Suma total de tiempo de todas las rondas (minutos) |
| rondaActual | Integer | Numero de la ultima ronda jugada |
| rondas | ListRoundStats | Lista anidada de rondas |
| fechaCreacion | LocalDateTime | Fecha de creacion del registro |
| fechaActualizacion | LocalDateTime | Fecha de ultima modificacion |
| Campo | Tipo | Descripcion |
|---|---|---|
| numeroRonda | Integer | Numero de ronda (1, 2, 3...) |
| tiempoJugado | Integer | Tiempo invertido en esta ronda (minutos) |
| puntuacion | Integer | Puntuacion obtenida |
| nivel | String | Dificultad o nivel jugado |
| completada | Boolean | Indica si completo la ronda |
| fechaCompletada | LocalDateTime | Fecha en que completo la ronda |
La API utiliza JWT (JSON Web Token) para autenticacion.
Flujo de autenticacion:
- El usuario se registra (POST /api/auth/register)
- El usuario inicia sesion (POST /api/auth/login) y recibe un token JWT
- El token debe incluirse en el header Authorization: Bearer {token} para todas las peticiones a endpoints protegidos
- El token expira automaticamente despues de 24 horas
| Metodo | Endpoint | Descripcion | Autenticacion |
|---|---|---|---|
| POST | /api/auth/register | Registrar nuevo usuario | No |
| POST | /api/auth/login | Iniciar sesion (devuelve JWT) | No |
| Metodo | Endpoint | Descripcion | Autenticacion |
|---|---|---|---|
| GET | /api/users/profile | Obtener perfil del usuario autenticado | Si |
| PATCH | /api/users/profile | Actualizar perfil (nombre, apellidos, email, fecha nacimiento) | Si |
| Metodo | Endpoint | Descripcion | Autenticacion |
|---|---|---|---|
| POST | /api/games | Crear un nuevo juego | Si |
| GET | /api/games | Listar todos los juegos del usuario autenticado | Si |
| GET | /api/games/{gameId} | Obtener detalle de un juego especifico (con sus rondas) | Si |
| POST | /api/games/{gameId}/rounds | Anadir una nueva ronda a un juego | Si |
| DELETE | /api/games/{gameId} | Eliminar un juego | Si |
A continuacion se describe el flujo completo que debe seguir un usuario para utilizar la API:
Paso 1: Registro POST /api/auth/register
Paso 2: Inicio de sesion POST /api/auth/login → Obtiene el token JWT
Paso 3: Ver perfil GET /api/users/profile → (requiere token)
Paso 4: Crear un juego POST /api/games → (requiere token)
Paso 5: Listar juegos GET /api/games → (requiere token)
Paso 6: Anadir primera ronda POST /api/games/{gameId}/rounds → (requiere token)
Paso 7: Anadir segunda ronda POST /api/games/{gameId}/rounds → (requiere token)
Paso 8: Ver detalle del juego (con todas sus rondas) GET /api/games/{gameId} → (requiere token)
Paso 9: Actualizar perfil PATCH /api/users/profile → (requiere token)
Paso 10: Eliminar juego DELETE /api/games/{gameId} → (requiere token)
- Java 21 o superior
- MongoDB instalado y corriendo en localhost:27017
- Maven
-
Clonar el repositorio git clone https://github.com/ToniCoding/game-server.git cd game-server
-
Configurar la base de datos en application.properties spring.data.mongodb.uri=mongodb://localhost:27017/gameserver
-
Compilar y ejecutar mvn clean install mvn spring-boot:run
-
La API estara disponible en http://localhost:8080
| Codigo | Significado |
|---|---|
| 200 OK | Peticion exitosa |
| 201 Created | Recurso creado exitosamente |
| 204 No Content | Eliminacion exitosa |
| 400 Bad Request | Datos invalidos o faltantes |
| 401 Unauthorized | Token no proporcionado o invalido |
| 403 Forbidden | No tiene permisos para el recurso |
| 404 Not Found | Recurso no encontrado |