Una wallet en Kotlin, de un endpoint REST a eventos¶
Esta guía construye desde cero una billetera digital en Kotlin y Spring Boot: un endpoint REST que mueve plata entre dos cuentas contra una base Postgres, con transferencias, validación de saldo y registro de movimientos. Se puede seguir sola, de principio a fin.
Si nunca tocaste Kotlin, tranquilo: vamos explicando cada cosa del lenguaje la primera vez que aparece. Si vienes de Kotlin pero nunca hiciste Spring, igual: cada anotación y cada pieza de infraestructura se explica cuando entra en juego. No asumo que porque lees una cosa ya sabes la otra.
Esto no es un 'hola mundo'
Aunque explicamos todo desde la base, lo que construimos tiene sustancia: dinero con BigDecimal, una transferencia transaccional que no puede dejar saldos rotos, y un desacople real por mensajería. Los conceptos difíciles no se esconden, se explican.
Qué vamos a construir¶
Una wallet, wallet, con tres cosas que hace cualquier billetera:
- Consultar el saldo de una cuenta.
- Transferir plata de una cuenta a otra, validando que haya saldo.
- Dejar registrado cada movimiento.
A vista de pájaro, la wallet es simple: unos clientes entran por HTTP a una aplicación, y esa aplicación lee y escribe en una base Postgres. La arquitectura la ves en detalle en la Fase 0; acá basta la idea. Toda la magia pasa dentro de esa aplicación, y adentro, el registro de cada movimiento arranca de la forma más simple posible: una llamada directa dentro del mismo proceso.

Cómo está organizada¶
Cada fase es una etapa y, en el repo, una rama. Puedes hacer git checkout a cualquiera para seguir desde ahí si te atrasas.
| Fase | Rama | Qué construye |
|---|---|---|
| 0 | fase-0 |
El problema, el andamiaje y Supabase |
| 1 | fase-1 |
El dominio: cuenta, saldo, JPA y Flyway |
| 2 | fase-2 |
Exponer el saldo por REST |
| 3 | fase-3 |
Transferencia con validación de saldo |
| 4 | fase-4 |
Registro de movimientos (llamada directa) |
Puedes entrar por cualquier fase
Cada rama deja el proyecto justo en el estado de esa fase. Si te perdiste en un paso, git checkout fase-2 y sigues desde ahí sin quedarte atrás.
Versiones¶
Kotlin 2.3 · Spring Boot 4.1 · JDK 25 · Spring Data JPA · Flyway · Supabase (PostgreSQL 17).
Confirma versiones en el asistente
En start.spring.io las versiones cambian con el tiempo. Si no ves Spring Boot 4.1, elige la 4.x estable más cercana. El asistente se encarga de que las dependencias sean compatibles entre sí.
Cuando estés listo, revisa Requisitos y setup y arranca por la Fase 0.