# shivam-a-coder/wallet architecture

> Architecture diagram of the GitHub repository shivam-a-coder/wallet, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/shivam-a-coder/wallet
- Repository: https://github.com/shivam-a-coder/wallet

## Overview

This is a Spring-based wallet application split into user, wallet, transaction, and notification services. The clearest user journey is creating a user, then retrieving a profile that combines cached or persisted user data with a wallet balance fetched over HTTP. Transaction initiation persists a pending transaction and publishes an event; Kafka consumers and shared payload types support asynchronous service behavior. The README names the services but does not document their full event choreography, so only relationships evidenced by sampled source or the source index are shown.

Main entry points: [`user-service/src/main/java/com/Project/service/UserService.java`](https://github.com/shivam-a-coder/wallet/blob/main/user-service/src/main/java/com/Project/service/UserService.java) (User management), [`transaction-service/src/main/java/com/Project/TransactionService.java`](https://github.com/shivam-a-coder/wallet/blob/main/transaction-service/src/main/java/com/Project/TransactionService.java) (Transaction processing), [`wallet-service/src/main/java/com/Project/WalletKafkaConsumer.java`](https://github.com/shivam-a-coder/wallet/blob/main/wallet-service/src/main/java/com/Project/WalletKafkaConsumer.java) (Wallet event consumer), [`wallet-service/src/main/java/com/Project/repo/WalletRepo.java`](https://github.com/shivam-a-coder/wallet/blob/main/wallet-service/src/main/java/com/Project/repo/WalletRepo.java) (Wallet repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_users["User service"]
  node_user_api["User API"]
  node_user_logic["User management<br/>[UserService.java]"]
  node_user_model["User record<br/>[User.java]"]
  node_user_store["User repository<br/>[UserRepo.java]"]
  node_user_profile["Profile result<br/>[UserProfile.java]"]
end

subgraph group_wallet["Wallet service"]
  node_wallet_api["Wallet API"]
  node_wallet_logic["Balance lookup<br/>[WalletService.java]"]
  node_wallet_consumer["Wallet event consumer"]
  node_wallet_model["Wallet record<br/>[Wallet.java]"]
  node_wallet_store["Wallet repository<br/>[WalletRepo.java]"]
end

subgraph group_transactions["Transaction service"]
  node_transaction_api["Transaction API"]
  node_transaction_logic["Transaction processing"]
  node_transaction_model["Transaction record<br/>[Transaction.java]"]
  node_transaction_store["Transaction repository"]
  node_comp_consumer["Compensation consumer"]
end

subgraph group_notifications["Notification service"]
  node_notification_consumer["Notification consumer"]
end

subgraph group_events["Shared events"]
  node_user_event["User-created payload"]
  node_wallet_event["Wallet-update payload"]
  node_transaction_event["Transaction payload"]
end

node_client(("API client"))
node_kafka["Kafka"]
node_redis[("Redis")]
node_database[("Relational database")]

node_client -->|"calls API"| node_user_api
node_user_api -->|"delegates to"| node_user_logic
node_user_logic -->|"reads and saves"| node_user_store
node_user_logic -->|"reads and caches"| node_redis
node_user_logic -->|"fetches balance"| node_wallet_api
node_user_logic -->|"builds profile"| node_user_profile
node_user_logic -->|"builds payload"| node_user_event
node_user_logic -->|"publishes event"| node_kafka
node_user_store -.->|"persists users"| node_database
node_wallet_api -->|"delegates to"| node_wallet_logic
node_wallet_logic -->|"looks up wallet"| node_wallet_store
node_wallet_store -.->|"persists wallets"| node_database
node_wallet_consumer -->|"updates wallet"| node_wallet_store
node_wallet_consumer -->|"uses record"| node_wallet_model
node_wallet_consumer -.->|"consumes events"| node_kafka
node_transaction_api -.->|"delegates to"| node_transaction_logic
node_transaction_api -->|"accepts request"| node_transaction_model
node_transaction_logic -->|"saves and reads"| node_transaction_store
node_transaction_logic -->|"creates record"| node_transaction_model
node_transaction_logic -->|"publishes transaction"| node_kafka
node_transaction_store -.->|"persists transactions"| node_database
node_comp_consumer -->|"updates records"| node_transaction_store
node_comp_consumer -.->|"consumes events"| node_kafka
node_notification_consumer -.->|"consumes events"| node_kafka
node_user_event -.->|"event schema"| node_kafka
node_wallet_event -.->|"event schema"| node_kafka
node_transaction_event -.->|"event schema"| node_kafka

click node_user_api "https://github.com/shivam-a-coder/wallet/blob/main/user-service/src/main/java/com/Project/UserController.java"
click node_user_logic "https://github.com/shivam-a-coder/wallet/blob/main/user-service/src/main/java/com/Project/service/UserService.java"
click node_user_model "https://github.com/shivam-a-coder/wallet/blob/main/user-service/src/main/java/com/Project/entity/User.java"
click node_user_store "https://github.com/shivam-a-coder/wallet/blob/main/user-service/src/main/java/com/Project/repo/UserRepo.java"
click node_user_profile "https://github.com/shivam-a-coder/wallet/blob/main/user-service/src/main/java/com/Project/Dto/UserProfile.java"
click node_wallet_api "https://github.com/shivam-a-coder/wallet/blob/main/wallet-service/src/main/java/com/Project/WalletController.java"
click node_wallet_logic "https://github.com/shivam-a-coder/wallet/blob/main/wallet-service/src/main/java/com/Project/service/WalletService.java"
click node_wallet_consumer "https://github.com/shivam-a-coder/wallet/blob/main/wallet-service/src/main/java/com/Project/WalletKafkaConsumer.java"
click node_wallet_model "https://github.com/shivam-a-coder/wallet/blob/main/wallet-service/src/main/java/com/Project/entity/Wallet.java"
click node_wallet_store "https://github.com/shivam-a-coder/wallet/blob/main/wallet-service/src/main/java/com/Project/repo/WalletRepo.java"
click node_transaction_api "https://github.com/shivam-a-coder/wallet/blob/main/transaction-service/src/main/java/com/Project/TransactionController.java"
click node_transaction_logic "https://github.com/shivam-a-coder/wallet/blob/main/transaction-service/src/main/java/com/Project/TransactionService.java"
click node_transaction_model "https://github.com/shivam-a-coder/wallet/blob/main/transaction-service/src/main/java/com/Project/entity/Transaction.java"
click node_transaction_store "https://github.com/shivam-a-coder/wallet/blob/main/transaction-service/src/main/java/com/Project/repo/TransactionRepo.java"
click node_comp_consumer "https://github.com/shivam-a-coder/wallet/blob/main/transaction-service/src/main/java/com/Project/TransactionCompConsumer.java"
click node_notification_consumer "https://github.com/shivam-a-coder/wallet/blob/main/notification-service/src/main/java/com/Project/NotificationKafkaConsumer.java"
click node_user_event "https://github.com/shivam-a-coder/wallet/blob/main/common-libs/src/main/java/com/Project/UserCreatedPayload.java"
click node_wallet_event "https://github.com/shivam-a-coder/wallet/blob/main/common-libs/src/main/java/com/Project/WalletUpdatePayload.java"
click node_transaction_event "https://github.com/shivam-a-coder/wallet/blob/main/common-libs/src/main/java/com/Project/TransactionPayload.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_user_api,node_user_logic,node_user_model,node_user_store,node_user_profile,node_client toneBlue
class node_wallet_api,node_wallet_logic,node_wallet_consumer,node_wallet_model,node_wallet_store,node_redis,node_database toneAmber
class node_transaction_api,node_transaction_logic,node_transaction_model,node_transaction_store,node_comp_consumer toneMint
class node_notification_consumer toneRose
class node_user_event,node_wallet_event,node_transaction_event,node_kafka toneIndigo
```

## Components

### User service

- [User API](https://github.com/shivam-a-coder/wallet/blob/main/user-service/src/main/java/com/Project/UserController.java): `user-service/src/main/java/com/Project/UserController.java`
- [User management](https://github.com/shivam-a-coder/wallet/blob/main/user-service/src/main/java/com/Project/service/UserService.java): `user-service/src/main/java/com/Project/service/UserService.java`
- [User record](https://github.com/shivam-a-coder/wallet/blob/main/user-service/src/main/java/com/Project/entity/User.java): `user-service/src/main/java/com/Project/entity/User.java`
- [User repository](https://github.com/shivam-a-coder/wallet/blob/main/user-service/src/main/java/com/Project/repo/UserRepo.java): `user-service/src/main/java/com/Project/repo/UserRepo.java`
- [Profile result](https://github.com/shivam-a-coder/wallet/blob/main/user-service/src/main/java/com/Project/Dto/UserProfile.java): `user-service/src/main/java/com/Project/Dto/UserProfile.java`

### Wallet service

- [Wallet API](https://github.com/shivam-a-coder/wallet/blob/main/wallet-service/src/main/java/com/Project/WalletController.java): `wallet-service/src/main/java/com/Project/WalletController.java`
- [Balance lookup](https://github.com/shivam-a-coder/wallet/blob/main/wallet-service/src/main/java/com/Project/service/WalletService.java): `wallet-service/src/main/java/com/Project/service/WalletService.java`
- [Wallet event consumer](https://github.com/shivam-a-coder/wallet/blob/main/wallet-service/src/main/java/com/Project/WalletKafkaConsumer.java): `wallet-service/src/main/java/com/Project/WalletKafkaConsumer.java`
- [Wallet record](https://github.com/shivam-a-coder/wallet/blob/main/wallet-service/src/main/java/com/Project/entity/Wallet.java): `wallet-service/src/main/java/com/Project/entity/Wallet.java`
- [Wallet repository](https://github.com/shivam-a-coder/wallet/blob/main/wallet-service/src/main/java/com/Project/repo/WalletRepo.java): `wallet-service/src/main/java/com/Project/repo/WalletRepo.java`

### Transaction service

- [Transaction API](https://github.com/shivam-a-coder/wallet/blob/main/transaction-service/src/main/java/com/Project/TransactionController.java): `transaction-service/src/main/java/com/Project/TransactionController.java`
- [Transaction processing](https://github.com/shivam-a-coder/wallet/blob/main/transaction-service/src/main/java/com/Project/TransactionService.java): `transaction-service/src/main/java/com/Project/TransactionService.java`
- [Transaction record](https://github.com/shivam-a-coder/wallet/blob/main/transaction-service/src/main/java/com/Project/entity/Transaction.java): `transaction-service/src/main/java/com/Project/entity/Transaction.java`
- [Transaction repository](https://github.com/shivam-a-coder/wallet/blob/main/transaction-service/src/main/java/com/Project/repo/TransactionRepo.java): `transaction-service/src/main/java/com/Project/repo/TransactionRepo.java`
- [Compensation consumer](https://github.com/shivam-a-coder/wallet/blob/main/transaction-service/src/main/java/com/Project/TransactionCompConsumer.java): `transaction-service/src/main/java/com/Project/TransactionCompConsumer.java`

### Notification service

- [Notification consumer](https://github.com/shivam-a-coder/wallet/blob/main/notification-service/src/main/java/com/Project/NotificationKafkaConsumer.java): `notification-service/src/main/java/com/Project/NotificationKafkaConsumer.java`

### Shared events

- [User-created payload](https://github.com/shivam-a-coder/wallet/blob/main/common-libs/src/main/java/com/Project/UserCreatedPayload.java): `common-libs/src/main/java/com/Project/UserCreatedPayload.java`
- [Wallet-update payload](https://github.com/shivam-a-coder/wallet/blob/main/common-libs/src/main/java/com/Project/WalletUpdatePayload.java): `common-libs/src/main/java/com/Project/WalletUpdatePayload.java`
- [Transaction payload](https://github.com/shivam-a-coder/wallet/blob/main/common-libs/src/main/java/com/Project/TransactionPayload.java): `common-libs/src/main/java/com/Project/TransactionPayload.java`

### Other components

- **API client**
- **Kafka**
- **Redis**
- **Relational database**

## Connections

- API client → User API: calls API (evidence: `README.md`)
- User API → User management: delegates to (evidence: `user-service/src/main/java/com/Project/UserController.java`)
- User management → User repository: reads and saves (evidence: `user-service/src/main/java/com/Project/service/UserService.java`)
- User management → Redis: reads and caches (evidence: `user-service/src/main/java/com/Project/service/UserService.java`)
- User management → Wallet API: fetches balance (evidence: `user-service/src/main/java/com/Project/service/UserService.java`)
- User management → Profile result: builds profile (evidence: `user-service/src/main/java/com/Project/service/UserService.java`)
- User management → User-created payload: builds payload (evidence: `user-service/src/main/java/com/Project/service/UserService.java`)
- User management → Kafka: publishes event (evidence: `user-service/src/main/java/com/Project/service/UserService.java`)
- User repository → Relational database: persists users
- Wallet API → Balance lookup: delegates to (evidence: `wallet-service/src/main/java/com/Project/WalletController.java`)
- Balance lookup → Wallet repository: looks up wallet (evidence: `wallet-service/src/main/java/com/Project/service/WalletService.java`)
- Wallet repository → Relational database: persists wallets
- Wallet event consumer → Wallet repository: updates wallet (evidence: `wallet-service/src/main/java/com/Project/WalletKafkaConsumer.java`)
- Wallet event consumer → Wallet record: uses record (evidence: `wallet-service/src/main/java/com/Project/WalletKafkaConsumer.java`)
- Wallet event consumer → Kafka: consumes events
- Transaction API → Transaction processing: delegates to
- Transaction API → Transaction record: accepts request (evidence: `transaction-service/src/main/java/com/Project/TransactionController.java`)
- Transaction processing → Transaction repository: saves and reads (evidence: `transaction-service/src/main/java/com/Project/TransactionService.java`)
- Transaction processing → Transaction record: creates record (evidence: `transaction-service/src/main/java/com/Project/TransactionService.java`)
- Transaction processing → Kafka: publishes transaction (evidence: `transaction-service/src/main/java/com/Project/TransactionService.java`)
- Transaction repository → Relational database: persists transactions
- Compensation consumer → Transaction repository: updates records (evidence: `transaction-service/src/main/java/com/Project/TransactionCompConsumer.java`)
- Compensation consumer → Kafka: consumes events
- Notification consumer → Kafka: consumes events
- User-created payload → Kafka: event schema
- Wallet-update payload → Kafka: event schema
- Transaction payload → Kafka: event schema
