Wallet System

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

Request a walkthrough →Source code and a live walkthrough are available on request.
Wallet System preview

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 →
Café One↗
(03) — ContactOpen to new projects

Let’s buildsomethingremarkable.

FollowGitHub ↗Twitter ↗LinkedIn ↗
ExploreProjectsAboutContactPrivacy
Lagos, Nigeria--:-- WAT