How dev-marker/payments works
This is a six-service payments backend. A client enters through the gateway, which authenticates and routes requests to service APIs; transfers proceed as sagas using wallet holds and capture or release. The wallet maintains the double-entry ledger, while supporting services handle identity, event-driven notifications, and outbound webhooks. The README documents the broader capabilities, including FX, risk review, reconciliation, and observability. Some internals are unsampled, so edges between those subsystems are limited to documented relationships.
Main entry points: wallet/main.go Wallet service · gateway.go API gateway · transfer/main.go Transfer service · saga.go Transfer saga
Components 22
Public access and identity
- API gateway
internal/gateway/gateway.go - Auth service
internal/auth/service.go - Auth database
internal/auth/authdb
Transfers and wallet
- Transfer service
cmd/transfer/main.go - Transfer saga
internal/transfer/saga.go - Risk checks
internal/transfer/risk/risk.go - Transfer store
internal/transfer/store.go - Wallet service
cmd/wallet/main.go - Wallet API
internal/wallet/http.go - Double-entry ledger
internal/wallet/ledger.go - Wallet store
internal/wallet/store.go - FX conversion
internal/fx/convert.go - Reconciliation and reports
internal/wallet/reconcile.go
Events and delivery
- NATS JetStream
internal/platform/natsx/natsx.go - Outbox relay
internal/platform/outbox/relay.go - Notification service
internal/notification/consume.go - Email sender
internal/notification/sender.go - Webhook service
internal/webhook/worker.go - Webhook delivery store
internal/webhook/webhookdb/webhooks.sql.go
Platform services
- Shared platform
internal/platform - Audit log
internal/platform/audit/audit.go
Other components
- API client
Connections 25
- API client → API gateway: sends requests
README.md - API gateway → Auth service: routes requests
README.md - API gateway → Transfer service: routes requests
README.md - API gateway → Wallet service: routes requests
README.md - API gateway → Webhook service: routes requests
README.md - Auth service → Auth database: stores credentials
internal/auth/service.go - Transfer service → Transfer saga: runs transfers
README.md - Transfer saga → Risk checks: screens transfers
README.md - Transfer saga → Wallet service: requests holds
README.md - Transfer saga → Wallet service: requests capture or release
README.md - Transfer service → Transfer store: persists state
internal/transfer/store.go - Wallet service → Wallet API: registers handler
cmd/wallet/main.go - Wallet API → Double-entry ledger: posts entries
- Wallet service → Wallet store: persists ledger
- Wallet service → FX conversion: supports conversion
README.md - Wallet service → Reconciliation and reports: runs reconciliation
README.md - Wallet service → Outbox relay: relays events
cmd/wallet/main.go - Transfer service → Outbox relay: relays events
cmd/transfer/main.go - Outbox relay → NATS JetStream: publishes events
README.md - NATS JetStream → Notification service: delivers events
README.md - Notification service → Email sender: sends email
README.md - NATS JetStream → Webhook service: delivers events
README.md - Webhook service → Webhook delivery store: stores deliveries
internal/webhook/worker.go - Transfer service → Audit log: records review
- Shared platform → API gateway: provides shared middleware
internal/gateway/gateway.go