# ajr2004/nexusbank architecture

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

- Interactive diagram: https://gitdiagram.com/ajr2004/nexusbank
- Repository: https://github.com/ajr2004/nexusbank

## Overview

NexusBank is a Spring microservices banking platform. A customer’s main workflow enters through the API gateway, authenticates through the identity service, then uses banking account and transaction operations or applies for a loan. Loan approval creates an EMI schedule and credits the customer’s banking account; scheduled billing later requests installment debits. The graph also captures identity and service-discovery capabilities documented in the README. Service-layer calls and repository interactions are supported by sampled source; gateway routing and Eureka registration are documented, but their detailed wiring was not sampled.

Main entry points: [`api-gateway/src/main/java/com/nexusbank/api_gateway/ApiGatewayApplication.java`](https://github.com/ajr2004/nexusbank/blob/main/api-gateway/src/main/java/com/nexusbank/api_gateway/ApiGatewayApplication.java) (API gateway), [`loan-service/src/main/java/com/nexusbank/loan_service/service/LoanService.java`](https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/service/LoanService.java) (Loan service), [`banking-service/src/main/java/com/nexusbank/banking_service/service/AccountService.java`](https://github.com/ajr2004/nexusbank/blob/main/banking-service/src/main/java/com/nexusbank/banking_service/service/AccountService.java) (Account service), [`banking-service/src/main/java/com/nexusbank/banking_service/service/TransactionService.java`](https://github.com/ajr2004/nexusbank/blob/main/banking-service/src/main/java/com/nexusbank/banking_service/service/TransactionService.java) (Transaction service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_gateway["Gateway and discovery"]
  node_gateway_app["API gateway"]
  node_gateway_auth["Authentication filter"]
  node_gateway_jwt["Gateway JWT utility<br/>[JwtUtils.java]"]
  node_eureka["Eureka discovery"]
end

subgraph group_identity["Identity and access"]
  node_identity_api["Identity endpoints"]
  node_admin_api["User administration"]
  node_user_service["User service<br/>[UserService.java]"]
  node_identity_jwt["JWT service<br/>[JwtService.java]"]
  node_user_repository["User repository"]
end

subgraph group_banking["Accounts and transactions"]
  node_banking_api["Account endpoints"]
  node_account_service["Account service"]
  node_transaction_service["Transaction service"]
  node_identity_client["Identity client"]
  node_account_repository["Account repository"]
  node_transaction_repository["Transaction repository"]
end

subgraph group_loans["Loans and billing"]
  node_loan_api["Loan endpoints"]
  node_admin_loan_api["Loan type admin"]
  node_loan_service["Loan service<br/>[LoanService.java]"]
  node_emi_service["EMI schedule service<br/>[EmiService.java]"]
  node_emi_engine["EMI billing scheduler"]
  node_banking_client["Banking client<br/>[BankingClient.java]"]
  node_loan_identity_client["Loan identity client"]
  node_loan_repository["Loan repository"]
  node_emi_repository["EMI repository<br/>[EmiRepository.java]"]
  node_loan_type_repository["Loan type repository"]
end

node_customer(("Customer"))
node_admin(("Administrator"))
node_mysql[("MySQL")]

node_customer -->|"sends requests"| node_gateway_app
node_admin -->|"sends requests"| node_gateway_app
node_gateway_app -->|"filters requests"| node_gateway_auth
node_gateway_auth -->|"validates tokens"| node_gateway_jwt
node_gateway_app -->|"routes requests"| node_identity_api
node_gateway_app -->|"routes requests"| node_banking_api
node_gateway_app -->|"routes requests"| node_loan_api
node_identity_api -->|"delegates"| node_user_service
node_admin_api -->|"delegates"| node_user_service
node_user_service -->|"reads and writes"| node_user_repository
node_user_service -->|"issues tokens"| node_identity_jwt
node_user_repository -->|"persists users"| node_mysql
node_banking_api -->|"delegates"| node_account_service
node_banking_api -->|"delegates"| node_transaction_service
node_account_service -->|"checks users"| node_identity_client
node_account_service -->|"reads and writes"| node_account_repository
node_account_service -->|"records activity"| node_transaction_repository
node_transaction_service -->|"gets current user"| node_identity_client
node_transaction_service -->|"reads and writes"| node_account_repository
node_transaction_service -->|"reads and writes"| node_transaction_repository
node_account_repository -->|"persists accounts"| node_mysql
node_transaction_repository -->|"persists transactions"| node_mysql
node_loan_api -->|"delegates"| node_loan_service
node_admin_loan_api -->|"delegates"| node_loan_service
node_loan_service -->|"reads and writes"| node_loan_repository
node_loan_service -->|"checks accounts"| node_banking_client
node_loan_service -->|"fetches user"| node_loan_identity_client
node_loan_service -->|"generates schedule"| node_emi_service
node_emi_service -->|"reads and writes"| node_emi_repository
node_emi_engine -->|"loads and updates dues"| node_emi_repository
node_emi_engine -->|"loads loan details"| node_loan_repository
node_emi_engine -->|"requests debit"| node_banking_client
node_banking_client -->|"requests disbursement or debit"| node_account_service
node_loan_repository -->|"persists loans"| node_mysql
node_emi_repository -->|"persists installments"| node_mysql
node_loan_type_repository -->|"persists loan types"| node_mysql
node_gateway_app -.->|"uses discovery"| node_eureka

click node_gateway_app "https://github.com/ajr2004/nexusbank/blob/main/api-gateway/src/main/java/com/nexusbank/api_gateway/ApiGatewayApplication.java"
click node_gateway_auth "https://github.com/ajr2004/nexusbank/blob/main/api-gateway/src/main/java/com/nexusbank/api_gateway/filter/AuthenticationFilter.java"
click node_gateway_jwt "https://github.com/ajr2004/nexusbank/blob/main/api-gateway/src/main/java/com/nexusbank/api_gateway/util/JwtUtils.java"
click node_eureka "https://github.com/ajr2004/nexusbank/blob/main/eureka-server/src/main/java/com/nexusbank/eureka_server/EurekaServerApplication.java"
click node_identity_api "https://github.com/ajr2004/nexusbank/blob/main/identity-service/src/main/java/com/nexusbank/identity_service/controller/UserController.java"
click node_admin_api "https://github.com/ajr2004/nexusbank/blob/main/identity-service/src/main/java/com/nexusbank/identity_service/controller/AdminUserManagementController.java"
click node_user_service "https://github.com/ajr2004/nexusbank/blob/main/identity-service/src/main/java/com/nexusbank/identity_service/service/UserService.java"
click node_identity_jwt "https://github.com/ajr2004/nexusbank/blob/main/identity-service/src/main/java/com/nexusbank/identity_service/security/JwtService.java"
click node_user_repository "https://github.com/ajr2004/nexusbank/blob/main/identity-service/src/main/java/com/nexusbank/identity_service/repository/UserRepository.java"
click node_banking_api "https://github.com/ajr2004/nexusbank/blob/main/banking-service/src/main/java/com/nexusbank/banking_service/controller/AccountController.java"
click node_account_service "https://github.com/ajr2004/nexusbank/blob/main/banking-service/src/main/java/com/nexusbank/banking_service/service/AccountService.java"
click node_transaction_service "https://github.com/ajr2004/nexusbank/blob/main/banking-service/src/main/java/com/nexusbank/banking_service/service/TransactionService.java"
click node_identity_client "https://github.com/ajr2004/nexusbank/blob/main/banking-service/src/main/java/com/nexusbank/banking_service/client/IdentityClient.java"
click node_account_repository "https://github.com/ajr2004/nexusbank/blob/main/banking-service/src/main/java/com/nexusbank/banking_service/repository/AccountRepository.java"
click node_transaction_repository "https://github.com/ajr2004/nexusbank/blob/main/banking-service/src/main/java/com/nexusbank/banking_service/repository/TransactionRepository.java"
click node_loan_api "https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/controller/LoanController.java"
click node_admin_loan_api "https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/controller/AdminLoanTypeController.java"
click node_loan_service "https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/service/LoanService.java"
click node_emi_service "https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/service/EmiService.java"
click node_emi_engine "https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/scheduler/EmiAutomationEngine.java"
click node_banking_client "https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/client/BankingClient.java"
click node_loan_identity_client "https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/client/IdentityClient.java"
click node_loan_repository "https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/repository/LoanRepository.java"
click node_emi_repository "https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/repository/EmiRepository.java"
click node_loan_type_repository "https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/repository/LoanTypeRepository.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_gateway_app,node_gateway_auth,node_gateway_jwt,node_eureka toneBlue
class node_identity_api,node_admin_api,node_user_service,node_identity_jwt,node_user_repository,node_mysql toneAmber
class node_banking_api,node_account_service,node_transaction_service,node_identity_client,node_account_repository,node_transaction_repository toneMint
class node_loan_api,node_admin_loan_api,node_loan_service,node_emi_service,node_emi_engine,node_banking_client,node_loan_identity_client,node_loan_repository,node_emi_repository,node_loan_type_repository toneRose
class node_customer,node_admin toneIndigo
```

## Components

### Gateway and discovery

- [API gateway](https://github.com/ajr2004/nexusbank/blob/main/api-gateway/src/main/java/com/nexusbank/api_gateway/ApiGatewayApplication.java): `api-gateway/src/main/java/com/nexusbank/api_gateway/ApiGatewayApplication.java`
- [Authentication filter](https://github.com/ajr2004/nexusbank/blob/main/api-gateway/src/main/java/com/nexusbank/api_gateway/filter/AuthenticationFilter.java): `api-gateway/src/main/java/com/nexusbank/api_gateway/filter/AuthenticationFilter.java`
- [Gateway JWT utility](https://github.com/ajr2004/nexusbank/blob/main/api-gateway/src/main/java/com/nexusbank/api_gateway/util/JwtUtils.java): `api-gateway/src/main/java/com/nexusbank/api_gateway/util/JwtUtils.java`
- [Eureka discovery](https://github.com/ajr2004/nexusbank/blob/main/eureka-server/src/main/java/com/nexusbank/eureka_server/EurekaServerApplication.java): `eureka-server/src/main/java/com/nexusbank/eureka_server/EurekaServerApplication.java`

### Identity and access

- [Identity endpoints](https://github.com/ajr2004/nexusbank/blob/main/identity-service/src/main/java/com/nexusbank/identity_service/controller/UserController.java): `identity-service/src/main/java/com/nexusbank/identity_service/controller/UserController.java`
- [User administration](https://github.com/ajr2004/nexusbank/blob/main/identity-service/src/main/java/com/nexusbank/identity_service/controller/AdminUserManagementController.java): `identity-service/src/main/java/com/nexusbank/identity_service/controller/AdminUserManagementController.java`
- [User service](https://github.com/ajr2004/nexusbank/blob/main/identity-service/src/main/java/com/nexusbank/identity_service/service/UserService.java): `identity-service/src/main/java/com/nexusbank/identity_service/service/UserService.java`
- [JWT service](https://github.com/ajr2004/nexusbank/blob/main/identity-service/src/main/java/com/nexusbank/identity_service/security/JwtService.java): `identity-service/src/main/java/com/nexusbank/identity_service/security/JwtService.java`
- [User repository](https://github.com/ajr2004/nexusbank/blob/main/identity-service/src/main/java/com/nexusbank/identity_service/repository/UserRepository.java): `identity-service/src/main/java/com/nexusbank/identity_service/repository/UserRepository.java`

### Accounts and transactions

- [Account endpoints](https://github.com/ajr2004/nexusbank/blob/main/banking-service/src/main/java/com/nexusbank/banking_service/controller/AccountController.java): `banking-service/src/main/java/com/nexusbank/banking_service/controller/AccountController.java`
- [Account service](https://github.com/ajr2004/nexusbank/blob/main/banking-service/src/main/java/com/nexusbank/banking_service/service/AccountService.java): `banking-service/src/main/java/com/nexusbank/banking_service/service/AccountService.java`
- [Transaction service](https://github.com/ajr2004/nexusbank/blob/main/banking-service/src/main/java/com/nexusbank/banking_service/service/TransactionService.java): `banking-service/src/main/java/com/nexusbank/banking_service/service/TransactionService.java`
- [Identity client](https://github.com/ajr2004/nexusbank/blob/main/banking-service/src/main/java/com/nexusbank/banking_service/client/IdentityClient.java): `banking-service/src/main/java/com/nexusbank/banking_service/client/IdentityClient.java`
- [Account repository](https://github.com/ajr2004/nexusbank/blob/main/banking-service/src/main/java/com/nexusbank/banking_service/repository/AccountRepository.java): `banking-service/src/main/java/com/nexusbank/banking_service/repository/AccountRepository.java`
- [Transaction repository](https://github.com/ajr2004/nexusbank/blob/main/banking-service/src/main/java/com/nexusbank/banking_service/repository/TransactionRepository.java): `banking-service/src/main/java/com/nexusbank/banking_service/repository/TransactionRepository.java`

### Loans and billing

- [Loan endpoints](https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/controller/LoanController.java): `loan-service/src/main/java/com/nexusbank/loan_service/controller/LoanController.java`
- [Loan type admin](https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/controller/AdminLoanTypeController.java): `loan-service/src/main/java/com/nexusbank/loan_service/controller/AdminLoanTypeController.java`
- [Loan service](https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/service/LoanService.java): `loan-service/src/main/java/com/nexusbank/loan_service/service/LoanService.java`
- [EMI schedule service](https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/service/EmiService.java): `loan-service/src/main/java/com/nexusbank/loan_service/service/EmiService.java`
- [EMI billing scheduler](https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/scheduler/EmiAutomationEngine.java): `loan-service/src/main/java/com/nexusbank/loan_service/scheduler/EmiAutomationEngine.java`
- [Banking client](https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/client/BankingClient.java): `loan-service/src/main/java/com/nexusbank/loan_service/client/BankingClient.java`
- [Loan identity client](https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/client/IdentityClient.java): `loan-service/src/main/java/com/nexusbank/loan_service/client/IdentityClient.java`
- [Loan repository](https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/repository/LoanRepository.java): `loan-service/src/main/java/com/nexusbank/loan_service/repository/LoanRepository.java`
- [EMI repository](https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/repository/EmiRepository.java): `loan-service/src/main/java/com/nexusbank/loan_service/repository/EmiRepository.java`
- [Loan type repository](https://github.com/ajr2004/nexusbank/blob/main/loan-service/src/main/java/com/nexusbank/loan_service/repository/LoanTypeRepository.java): `loan-service/src/main/java/com/nexusbank/loan_service/repository/LoanTypeRepository.java`

### Other components

- **Customer**
- **Administrator**
- **MySQL**

## Connections

- Customer → API gateway: sends requests
- Administrator → API gateway: sends requests
- API gateway → Authentication filter: filters requests
- Authentication filter → Gateway JWT utility: validates tokens
- API gateway → Identity endpoints: routes requests
- API gateway → Account endpoints: routes requests
- API gateway → Loan endpoints: routes requests
- Identity endpoints → User service: delegates
- User administration → User service: delegates
- User service → User repository: reads and writes
- User service → JWT service: issues tokens
- User repository → MySQL: persists users
- Account endpoints → Account service: delegates
- Account endpoints → Transaction service: delegates
- Account service → Identity client: checks users
- Account service → Account repository: reads and writes
- Account service → Transaction repository: records activity
- Transaction service → Identity client: gets current user
- Transaction service → Account repository: reads and writes
- Transaction service → Transaction repository: reads and writes
- Account repository → MySQL: persists accounts
- Transaction repository → MySQL: persists transactions
- Loan endpoints → Loan service: delegates
- Loan type admin → Loan service: delegates
- Loan service → Loan repository: reads and writes
- Loan service → Banking client: checks accounts
- Loan service → Loan identity client: fetches user
- Loan service → EMI schedule service: generates schedule
- EMI schedule service → EMI repository: reads and writes
- EMI billing scheduler → EMI repository: loads and updates dues
- EMI billing scheduler → Loan repository: loads loan details
- EMI billing scheduler → Banking client: requests debit
- Banking client → Account service: requests disbursement or debit
- Loan repository → MySQL: persists loans
- EMI repository → MySQL: persists installments
- Loan type repository → MySQL: persists loan types
- API gateway → Eureka discovery: uses discovery
