# ashlyvuba/bank4z architecture

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

- Interactive diagram: https://gitdiagram.com/ashlyvuba/bank4z
- Repository: https://github.com/ashlyvuba/bank4z

## Overview

Bank4Z is a South African digital-banking app with a Flutter client and Spring backend. The principal implemented flow covers registration/login, account creation, JWT-based authentication, and retrieval of account and transaction history. The README also describes fraud detection, event-driven notifications, and a payment-rail integration, but the tree identifies the fraud and notification services as empty/planned; the sampled source does not show transaction initiation or event dispatch. Those capabilities are therefore not represented as wired runtime components.

Main entry points: [`src/main/java/com/bank4z/backend/authservice/AuthService.java`](https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/authservice/AuthService.java) (Auth service), [`src/main/java/com/bank4z/backend/accountservice/AccountController.java`](https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/accountservice/AccountController.java) (Account API), [`src/main/java/com/bank4z/backend/authservice/UserRepository.java`](https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/authservice/UserRepository.java) (User repository), [`src/main/java/com/bank4z/backend/accountservice/AccountService.java`](https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/accountservice/AccountService.java) (Account service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Mobile client"]
  node_mobile_screens["App screens"]
  node_mobile_services["App services"]
end

subgraph group_api["API and security"]
  node_auth_controller["Auth API"]
  node_account_controller["Account API"]
  node_jwt_filter["JWT filter"]
end

subgraph group_identity["Identity"]
  node_jwt_service["JWT service<br/>[JwtService.java]"]
  node_auth_service["Auth service<br/>[AuthService.java]"]
  node_user_details["User details"]
  node_user_repository["User repository"]
end

subgraph group_banking["Accounts and history"]
  node_account_service["Account service"]
  node_account_repository["Account repository"]
  node_transaction_repository["Transaction repository"]
end

node_customer(("Customer"))
node_database[("Relational database")]

node_customer -->|"uses"| node_mobile_screens
node_mobile_services -->|"calls API"| node_auth_controller
node_mobile_services -->|"calls API"| node_account_controller
node_auth_controller -->|"invokes"| node_auth_service
node_account_controller -->|"invokes"| node_account_service
node_account_controller -->|"queries"| node_transaction_repository
node_auth_service -->|"reads and saves"| node_user_repository
node_auth_service -->|"creates account"| node_account_service
node_auth_service -->|"issues tokens"| node_jwt_service
node_jwt_filter -->|"validates token"| node_jwt_service
node_jwt_filter -->|"loads user"| node_user_details
node_user_details -->|"looks up user"| node_user_repository
node_account_service -->|"reads and saves"| node_account_repository
node_user_repository -->|"persists users"| node_database
node_account_repository -->|"persists accounts"| node_database
node_transaction_repository -->|"reads transactions"| node_database

click node_mobile_screens "https://github.com/ashlyvuba/bank4z/tree/main/mobile-app/lib/screens"
click node_mobile_services "https://github.com/ashlyvuba/bank4z/tree/main/mobile-app/lib/services"
click node_auth_controller "https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/authservice/AuthController.java"
click node_account_controller "https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/accountservice/AccountController.java"
click node_jwt_filter "https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/common/security/JwtAuthenticationFilter.java"
click node_jwt_service "https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/common/security/JwtService.java"
click node_auth_service "https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/authservice/AuthService.java"
click node_user_details "https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/authservice/CustomUserDetailsService.java"
click node_user_repository "https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/authservice/UserRepository.java"
click node_account_service "https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/accountservice/AccountService.java"
click node_account_repository "https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/accountservice/AccountRepository.java"
click node_transaction_repository "https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/accountservice/TransactionRepository.java"
click node_database "https://github.com/ashlyvuba/bank4z/blob/main/src/main/resources/db/migration/V1__init_schema.sql"

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_mobile_screens,node_mobile_services toneBlue
class node_auth_controller,node_account_controller,node_jwt_filter,node_database toneAmber
class node_jwt_service,node_auth_service,node_user_details,node_user_repository toneMint
class node_account_service,node_account_repository,node_transaction_repository toneRose
class node_customer toneIndigo
```

## Components

### Mobile client

- [App screens](https://github.com/ashlyvuba/bank4z/tree/main/mobile-app/lib/screens): `mobile-app/lib/screens`
- [App services](https://github.com/ashlyvuba/bank4z/tree/main/mobile-app/lib/services): `mobile-app/lib/services`

### API and security

- [Auth API](https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/authservice/AuthController.java): `src/main/java/com/bank4z/backend/authservice/AuthController.java`
- [Account API](https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/accountservice/AccountController.java): `src/main/java/com/bank4z/backend/accountservice/AccountController.java`
- [JWT filter](https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/common/security/JwtAuthenticationFilter.java): `src/main/java/com/bank4z/backend/common/security/JwtAuthenticationFilter.java`

### Identity

- [JWT service](https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/common/security/JwtService.java): `src/main/java/com/bank4z/backend/common/security/JwtService.java`
- [Auth service](https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/authservice/AuthService.java): `src/main/java/com/bank4z/backend/authservice/AuthService.java`
- [User details](https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/authservice/CustomUserDetailsService.java): `src/main/java/com/bank4z/backend/authservice/CustomUserDetailsService.java`
- [User repository](https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/authservice/UserRepository.java): `src/main/java/com/bank4z/backend/authservice/UserRepository.java`

### Accounts and history

- [Account service](https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/accountservice/AccountService.java): `src/main/java/com/bank4z/backend/accountservice/AccountService.java`
- [Account repository](https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/accountservice/AccountRepository.java): `src/main/java/com/bank4z/backend/accountservice/AccountRepository.java`
- [Transaction repository](https://github.com/ashlyvuba/bank4z/blob/main/src/main/java/com/bank4z/backend/accountservice/TransactionRepository.java): `src/main/java/com/bank4z/backend/accountservice/TransactionRepository.java`

### Other components

- **Customer**
- [Relational database](https://github.com/ashlyvuba/bank4z/blob/main/src/main/resources/db/migration/V1__init_schema.sql): `src/main/resources/db/migration/V1__init_schema.sql`

## Connections

- Customer → App screens: uses
- App services → Auth API: calls API
- App services → Account API: calls API
- Auth API → Auth service: invokes
- Account API → Account service: invokes
- Account API → Transaction repository: queries
- Auth service → User repository: reads and saves
- Auth service → Account service: creates account
- Auth service → JWT service: issues tokens
- JWT filter → JWT service: validates token
- JWT filter → User details: loads user
- User details → User repository: looks up user
- Account service → Account repository: reads and saves
- User repository → Relational database: persists users
- Account repository → Relational database: persists accounts
- Transaction repository → Relational database: reads transactions
