Repository navigation
Paquetes y clases
El punto de entrada es ApuestasApplication.java, con el main que arranca Spring Boot. El código está en src/main/java/es/ucm/fdi/is1/apuestas/, repartido en 12 paquetes.
Diagramas: la arquitectura por capas, el diagrama de clases y las secuencias de apostar y resolver un partido están en Diagramas UML.
| Paquete | Qué contiene |
|---|---|
usuarios |
Cuentas, roles, registro, inicio de sesión, saldo y recargas, límites personales, sesiones |
equipos |
Competiciones, equipos, jugadores, plantillas y alineación probable |
eventos |
Partidos, catálogo, búsqueda, ficha de equipo, cara a cara y gráfico de evolución |
cuotas |
El algoritmo de cuotas y los tipos de resultado |
apuesta |
Apuestas y selecciones, boleto, resolución, límites de la casa, ranking, estadísticas, cuentas de la casa y baja. Es el paquete central |
mercados |
Mercados a largo plazo y sus candidatos |
ligas |
Ligas privadas con código de invitación |
notificaciones |
Avisos cuando se resuelve una apuesta |
gestion |
Panel del creador: formularios y controladores de alta y edición |
api |
Conexión con football-data.org y sincronización |
config |
Seguridad, reloj y datos iniciales |
web |
Piezas comunes: inicio, formato, colores de escudos, avisos de concurrencia |
Dependencias: apuesta usa eventos, cuotas, mercados, usuarios y notificaciones; ligas usa apuesta. Se evitan los ciclos: cuando un usuario se da de baja, usuarios no llama a ligas, sino que publica un evento (CuentaEliminada) que ligas escucha.
| Sufijo o anotación | Qué es |
|---|---|
@Entity |
Una tabla de la base de datos (Modelo de datos) |
...Repository |
Interfaz para leer y guardar una entidad. Spring escribe el código a partir del nombre de los métodos (findByEmail) o de una @Query
|
...Service |
Reglas del negocio y transacciones |
...Controller |
Atiende las peticiones de unas direcciones |
...Form |
Los campos de un formulario con sus validaciones (@NotBlank, @Size…) |
...Exception |
Un error del negocio con nombre (saldo insuficiente, evento no disponible…). Las de "no encontrado" dan 404 |
record |
Clase solo de datos para pasar información a las plantillas |
enum |
Lista cerrada de valores: estados, deportes, roles |
| Clase | Qué hace |
|---|---|
Usuario (entidad) |
Email, nombre, contraseña cifrada, rol, saldo, última recarga, límites, pausa, si está eliminado y versión (bloqueo optimista). Métodos cargar, abonar, ajustar y la recarga |
Rol |
USUARIO (jugador) o CREADOR
|
UsuarioService |
Registro, recarga gratuita, nombre y contraseña, límites, pausas y anonimizar al dar de baja |
UsuariosController |
/registro, /login y /cuenta
|
UsuarioDetailsService |
Le dice a Spring Security cómo buscar un usuario por email |
RecargaAlEntrarHandler |
Aplica la recarga al iniciar sesión |
IntentosLogin |
Bloqueo de 15 minutos tras 5 contraseñas incorrectas |
Sesiones |
Cierra las sesiones de otros navegadores al cambiar la contraseña o darse de baja |
Contrasenas |
Comprueba el límite de 72 bytes de BCrypt |
CuentaEliminada |
Evento que se publica al dar de baja una cuenta |
RecuperacionService, RecuperacionController, TokenRecuperacion
|
Recuperar la contraseña con un enlace que caduca y sirve una vez |
EnvioCorreo, CorreoRecuperacion
|
Envía el enlace por correo, o lo escribe en la consola si no hay servidor de correo |
| Clase | Qué hace |
|---|---|
Competicion, Equipo, Jugador
|
Entidades. Un equipo tiene deporte, calidad (0–10), forma, escudo y competiciones. Un jugador tiene posición, dorsal, nacionalidad y nota (6,0 al empezar) |
Deporte, Forma, Posicion
|
Enumeraciones. La forma va de −2 ("muy mala racha") a +2 |
EquiposService |
Listado por deporte y competición, con buscador |
PlantillaService |
Añadir, puntuar y quitar jugadores |
Alineacion |
Alineación probable en 4-3-3 con los de mejor nota |
| Clase | Qué hace |
|---|---|
Evento (entidad) |
Partido: competición, local, visitante, fecha, estado, resultado, goles, fase. Decide si admite apuestas |
EstadoEvento |
PROGRAMADO, SUSPENDIDO, FINALIZADO, ANULADO
|
CatalogoService, EventosController
|
Catálogo, búsqueda y página del partido |
FichaEquipoService |
Últimos 10 resultados, racha de 5, balance, clasificación y próximos 5 partidos |
CaraACara, GraficoEvolucion, FichaEquipo
|
Datos de esas páginas; el gráfico se dibuja en SVG |
| Clase | Qué hace |
|---|---|
CalculadoraCuotas |
El Algoritmo de cuotas |
Cuotas, Resultado, Especial
|
Las tres cuotas; LOCAL/EMPATE/VISITANTE; los otros mercados de fútbol |
| Clase | Qué hace |
|---|---|
Apuesta (entidad) |
Usuario, importe, cuota total, estado, lo ya pagado y fecha, con sus selecciones. Sabe resolverse, cancelarse y cambiar de importe |
Seleccion (entidad) |
Un pronóstico con la cuota del momento: evento + resultado, evento + mercado especial, o candidato |
ApuestaService, ApuestaController
|
Apostar, cancelar, cambiar importe, historial, estadísticas |
Boleto, BoletoService, BoletoController
|
El boleto (vive en la sesión) y la confirmación de la combinada |
ResolucionService, ResolucionMercadosService
|
Resultados, suspender, reactivar, anular y dinero apostado |
Limites, LimitesService
|
Límites de la casa: mínimo 1, máximo 500, 10 selecciones; interruptor del juego responsable |
VolumenApuestas |
Dinero apostado por resultado para el ajuste de cuotas (máximo 100 por jugador) |
RankingService, Estadisticas
|
Ranking y estadísticas personales |
CuentasCasaService |
Cuentas de la casa |
AvisosApuestas |
Crea un aviso cuando una apuesta cambia de estado |
BajaService, BajaController
|
Eliminar la cuenta |
| Clase | Qué hace |
|---|---|
Mercado, Candidato, MercadoService
|
Mercados a largo plazo: ABIERTO, CERRADO, RESUELTO, ANULADO
|
Liga, LigaService, LigasController
|
Ligas con código de 6 caracteres, ranking propio, salir y borrar |
Notificacion, NotificacionService
|
Avisos y campana de la cabecera |
| Clase | Qué hace |
|---|---|
GestionController, GestionService
|
Panel /gestion: alta y edición de competiciones, equipos y eventos |
GestionMercadosController, CasaController
|
Mercados y cuentas de la casa |
FootballDataCliente, FuenteDatosDeportivos
|
Llamadas a la API (la interfaz permite cambiarla en las pruebas) |
SincronizacionService, SincronizacionPlantillas, SincronizacionProgramada
|
Sincronización de partidos (cada 30 min) y plantillas (diaria) |
TiemposDeEsperaConfig |
5 s para conectar y 20 s para responder |
SeguridadConfig |
Qué páginas son públicas y cuáles exigen sesión o rol |
RelojConfig |
Reloj en hora de Madrid |
DatosIniciales |
Usuarios de prueba, competiciones, equipos, partidos y mercados de ejemplo (solo en una base de datos vacía) |
UsuarioActualAdvice |
Usuario conectado, saldo, boleto y avisos en todas las páginas |
ConcurrenciaAdvice |
Aviso cuando dos operaciones chocan sobre el mismo saldo |
Esta wiki se genera desde el repositorio: las páginas salen de docs/wiki, las actas de los sprints de docs/scrum/sprints y los diagramas de docs/diseno/uml.md. Lo que se edite aquí directamente se pierde en la siguiente publicación: para cambiar una página, edita su archivo en el repositorio con un pull request.
El proyecto
Cómo funciona
Técnico
Proceso
Sprints
Ayuda