Saltar a contenido

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.

Resumen del flujo síncrono: la petición REST entra a transfer, que valida y mueve el saldo en account, y registra el movimiento en movement con 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.