How kenzweb/payment-microservices-system works
This is a Go microservices system for authentication, inventory-backed order creation, and asynchronous payment and notification processing. The principal workflow starts with a client calling the HTTP gateway: login requests reach the auth service, while order requests are forwarded to the order service, which coordinates inventory and persists orders. Order events are published through a transactional outbox for payment and notification consumers; payment processing can publish status events. The README documents these broader capabilities, while sampled source chiefly confirms service wiring and gateway authentication. Paths for unsampled subsystems use existing directories.
Main entry points: main.go HTTP gateway · order.go Order service · postgres.go Order repository · payment.go Payment worker
Components 23
API edge
- HTTP gateway
services/gateway/cmd/main.go - Auth handler
services/gateway/internal/handler/auth.go - Order handler
services/gateway/internal/handler/order.go - Auth gRPC client
services/gateway/internal/client/auth.go - Order gRPC client
services/gateway/internal/client/order.go
Order services
- Auth service
services/auth/internal/handler/grpc.go - JWT service
services/auth/internal/service/jwt.go - Order service
services/order/internal/service/order.go - Order gRPC handler
services/order/internal/handler/grpc.go - Inventory gRPC client
services/order/internal/client/inventory.go - Inventory handler
services/inventory/internal/handler/grpc.go - Order repository
services/order/internal/repository/postgres.go - Inventory repository
services/inventory/internal/repository/postgres.go
Event processing
- Outbox relay
services/order/internal/worker/relay.go - Payment worker
services/payment/internal/worker/payment.go - Payment repository
services/payment/internal/repository/postgres.go - Notification worker
services/notification/internal/worker/notification.go
Shared infrastructure
- Kafka bus
- Kafka producer
pkg/kafka/producer.go - Kafka consumer
pkg/kafka/consumer.go - PostgreSQL
- Redis
Other components
- Client
Connections 25
- Client → HTTP gateway: HTTP requests
- HTTP gateway → Auth handler: routes login
- HTTP gateway → Order handler: routes orders
- Auth handler → Auth gRPC client: requests token
- Auth gRPC client → Auth service: gRPC
- Auth service → JWT service: generates token
- Order handler → Order gRPC client: forwards order
- Order gRPC client → Order gRPC handler: gRPC
- Order gRPC handler → Order service: handles request
- Order service → Inventory gRPC client: checks inventory
- Inventory gRPC client → Inventory handler: gRPC
- Inventory handler → Inventory repository: accesses stock
- Order service → Order repository: stores order
- Order repository → PostgreSQL: reads and writes
- Inventory repository → PostgreSQL: reads and writes
- Order repository → Outbox relay: outbox records
- Outbox relay → Kafka producer: publishes events
- Kafka producer → Kafka bus: produces
- Kafka bus → Kafka consumer: dispatches events
- Kafka consumer → Payment worker: order events
- Payment worker → Payment repository: processes payment
- Payment repository → PostgreSQL: reads and writes
- Payment repository → Redis: idempotency state
- Payment worker → Kafka producer: publishes status
- Kafka consumer → Notification worker: order and payment events