Wallet System
A money-transfer API built to stay correct under retries, spikes and concurrent requests.

Wallet System is a personal project: a Spring Boot service for creating accounts and moving money between them. The interesting part is everything around the transfer: row locking in a fixed order so concurrent transfers cannot deadlock, idempotency keys so a retried request never debits twice, and an append-only audit log of every attempt.
It also protects itself under load with rate limiting, a cap on in-flight transfers and a circuit breaker that fails fast instead of piling up timeouts.
I built the service and its integration tests.
The challenge
Moving money is the one operation where a retry, a timeout or two requests at the same instant must never produce the wrong balance.
What I did
Each transfer locks both accounts with PESSIMISTIC_WRITE in sorted order, runs at READ_COMMITTED and is backed by a database check against negative balances. A transaction reference acts as an idempotency key with a pending-to-success state machine, so the same request returns the original result and a changed payload is rejected. Timestamps come from the database clock, every event goes to an append-only audit log, and rate limiting, an in-flight cap and a circuit breaker protect the service under load.
The result
A small, well-tested service where retries are safe, concurrent transfers stay consistent and every attempt is auditable, with the endpoints documented through OpenAPI.
My part
- Backend engineering
- API design
- Integration testing
Hiring? Let's talk.
I build fast, polished products like this one. Reach me the quickest way, no form needed.
Prefer a form? Send a message →