Montar el entorno de desarrollo¶
Esta guía te lleva de una máquina limpia a los tres proyectos —backend, landing y gestor— corriendo en local con hot reload, campaña de prueba cargada y un login funcionando en el gestor. Calculá unos 20-30 minutos si ya tenés el software base instalado.
El Sistema de Premios es un único backend Java que sirve dos frontends: la landing (donde el cliente final escanea su ticket y participa) y el gestor (el panel donde el equipo de Caracol administra la campaña). En desarrollo corrés los tres procesos por separado para tener hot reload; en producción, el backend empaqueta y sirve a los otros dos (ver instalación en servidor).
Orden recomendado
Arrancá siempre por la base de datos y el backend. La landing y el gestor son clientes del backend — sin él levantado, ninguno de los dos tiene con qué hablar.
Prerrequisitos¶
| Necesitás | Versión | Notas |
|---|---|---|
| JDK | 21 | El bytecode del jar apunta a Java 17, así que cualquier JDK ≥17 corre el proceso — pero usá 21 para que coincida con lo que usa el equipo. |
| Maven | cualquiera reciente | Sin wrapper en el repo: mvn tiene que estar en el PATH. |
| SQL Server | 2022 | Con una base vacía llamada SistemaPremios ya creada. |
| Node | 20 | Lo pide el frontend-maven-plugin del build full; usalo también para correr landing y gestor sueltos. |
1. Crear la base de datos¶
Necesitás una base vacía llamada SistemaPremios en tu instancia de SQL Server. Flyway se encarga de crear el esquema entero la primera vez que arranca el backend — vos solo creás el contenedor vacío.
2. Clonar el repo y preparar las variables de entorno¶
El repo trae backend/dev-env.local.ps1 (gitignoreado) con las variables SP_* que el backend necesita en dev. Antes de arrancar nada, cargalas en tu sesión de PowerShell:
Sin SP_GESTOR_PASSWORD el backend no arranca
No es un default silencioso: si esa variable falta, el arranque falla rápido y explícito. Si el script dev-env.local.ps1 no existe todavía en tu clon, armate uno con al menos estas variables (con tus propios valores, nunca los reales de producción):
3. Arrancar el backend con hot reload¶
Parado en backend/:
Esto levanta el backend en http://localhost:8080, corre las migraciones de Flyway y queda escuchando con reinicio automático ante cambios de código (spring-boot-devtools). La config operativa la toma de backend/config/application.yml, el archivo versionado de referencia (ver ADR-029 y el detalle completo de cada variable en Configuración).
Verificá que levantó bien:
Debería responder {"estado":"ok","base_datos":"ok"}.
4. Arrancar la landing¶
En otra terminal:
Queda en http://localhost:5173. El vite.config.ts de la landing ya trae un proxy de /api, /bases y /branding hacia http://localhost:8080, así que no hay CORS que configurar: la landing en dev habla con tu backend local como si fuera same-origin.
5. Arrancar el gestor¶
En una tercera terminal:
Queda en http://localhost:5174, sirviendo bajo la ruta /gestor/ (igual que en producción, donde el jar lo sirve bajo esa misma ruta dentro del mismo puerto).
6. Cargar el seed mínimo¶
Con el backend abajo (Ctrl+C), arrancalo una vez apuntando al seed de ejemplo:
mvn spring-boot:run "-Dspring-boot.run.arguments=--sp.seed.archivo=../docs/seed-minimo.ejemplo.json"
Esto carga una campaña vigente con 6 sorteos (5 semanales + cierre) y una clave de firma. Una vez que veas en el log que el seed corrió, podés volver a arrancar con mvn spring-boot:run normal — el flag solo hace falta la primera vez.
El seed es idempotente respecto al bean
Sin la property sp.seed.archivo, el bean SeedMinimo ni se registra — así que dejar el flag afuera en los arranques siguientes no vuelve a insertar nada de más.
7. Verificar que todo funciona junto¶
- Backend solo:
http://localhost:8080/api/salud→{"estado":"ok","base_datos":"ok"}. - Landing: abrí
http://localhost:5173— debería cargar sin errores de consola relacionados a/api. - Login del gestor: abrí
http://localhost:5174/gestor/(o directamentehttp://localhost:5174/si tu router redirige) e ingresá conSP_GESTOR_USER/SP_GESTOR_PASSWORD— los mismos valores que cargaste en el paso 2. - Campaña vigente: dentro del gestor, la pantalla Panel debería mostrar la campaña "Sorteo Aniversario Caracol" con sus 6 sorteos.
Entorno listo
Si los cuatro puntos de arriba cierran, tenés el entorno de desarrollo completo: backend + landing + gestor + datos de prueba.
Iterar con los tres procesos a la vez¶
Para el día a día dejá las tres terminales abiertas en paralelo:
| Terminal | Comando | Puerto |
|---|---|---|
| Backend | mvn spring-boot:run (en backend/) |
8080 |
| Landing | npm run dev (en landing/) |
5173 |
| Gestor | npm run dev (en gestor/) |
5174 |
Cada una tiene su propio hot reload: tocás un .java y spring-boot:run reinicia el contexto solo; tocás un .tsx en landing o gestor y Vite actualiza el navegador sin recargar la página entera. No hace falta reiniciar nada manualmente salvo que cambies una variable de entorno del backend (esas sí requieren volver a correr . .\dev-env.local.ps1 y reiniciar spring-boot:run).
Para generar vouchers de prueba y probar el circuito de punta a punta sin depender de una impresora de ticket real, seguí con Generar vouchers de prueba (QR).