# asimansari-git/bankpro architecture

> Architecture diagram of the GitHub repository asimansari-git/bankpro, 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/asimansari-git/bankpro
- Repository: https://github.com/asimansari-git/bankpro

## Overview

BankPro is a web-based banking management system for customers, staff, and admins. Its main customer journey verifies an email by OTP, submits an application for staff review, creates a customer after approval, opens an account, then supports deposits, withdrawals, transfers, and transaction history. Staff also handles application decisions and banking operations; admins manage staff and credentials. The graph reflects documented capabilities and sampled service wiring. Several frontend screens and backend routes are represented from the README and tree, since their source was not sampled.

Main entry points: [`Backend Rest API/src/main/java/com/screenprog/application/service/CentralizedService.java`](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/service/CentralizedService.java) (Shared banking operations), [`Backend Rest API/src/main/java/com/screenprog/application/controller/UserController.java`](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/controller/UserController.java) (User endpoints), [`Backend Rest API/src/main/java/com/screenprog/application/service/UserService.java`](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/service/UserService.java) (Customer operations), [`Backend Rest API/src/main/java/com/screenprog/application/email_service/EmailService.java`](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/email_service/EmailService.java) (Email and OTP)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web clients"]
  node_registration["Registration and OTP"]
  node_customer_ui["Customer banking UI<br/>[Accountdetail.js]"]
  node_staff_ui["Staff operations UI"]
end

subgraph group_api["REST API"]
  node_admin_api["Admin endpoints"]
  node_staff_api["Staff endpoints"]
  node_user_api["User endpoints"]
end

subgraph group_domain["Banking services"]
  node_applications["Application review"]
  node_user_service["Customer operations<br/>[UserService.java]"]
  node_central["Shared banking operations"]
end

subgraph group_data["Persistence"]
  node_app_repo["Applications repository"]
  node_customer_repo["Customer repository"]
  node_account_repo["Account repository"]
  node_transactions_repo["Transaction repository"]
  node_users_repo["User repository"]
end

subgraph group_security["Identity and email"]
  node_email["Email and OTP<br/>[EmailService.java]"]
  node_otp["OTP store<br/>[OtpService.java]"]
  node_jwt["JWT authentication"]
  node_jwt_filter["JWT request filter<br/>[JWTFilter.java]"]
  node_user_details["User lookup"]
end

node_customer(("Customer"))
node_staff(("Staff"))
node_admin(("Admin"))
node_postgres[("PostgreSQL")]
node_smtp["Mail service"]

node_customer -->|"submits application"| node_registration
node_registration -->|"sends registration"| node_user_api
node_user_api -->|"handles application"| node_user_service
node_user_service -->|"saves application"| node_app_repo
node_user_service -->|"requests confirmation"| node_email
node_user_api -->|"requests OTP"| node_email
node_email -->|"generates OTP"| node_otp
node_email -->|"sends message"| node_smtp
node_user_api -->|"verifies OTP"| node_otp
node_staff -->|"reviews applications"| node_staff_ui
node_staff_ui -->|"submits decisions"| node_staff_api
node_staff_api -->|"updates applications"| node_applications
node_staff_api -->|"fetches pending"| node_applications
node_applications -->|"reads and saves"| node_app_repo
node_applications -->|"registers customer"| node_customer_repo
node_applications -->|"saves credentials"| node_users_repo
node_applications -->|"notifies applicant"| node_email
node_customer -->|"uses banking features"| node_customer_ui
node_customer_ui -->|"calls banking endpoints"| node_user_api
node_user_api -->|"handles banking request"| node_user_service
node_user_service -->|"reads and saves accounts"| node_account_repo
node_user_service -->|"records transactions"| node_transactions_repo
node_user_service -->|"sends account notice"| node_email
node_staff -->|"manages banking"| node_staff_ui
node_staff_ui -->|"calls staff endpoints"| node_staff_api
node_staff_api -->|"handles staff operations"| node_central
node_central -->|"reads and saves customers"| node_customer_repo
node_central -->|"reads and saves accounts"| node_account_repo
node_central -->|"reads and saves transactions"| node_transactions_repo
node_admin -->|"manages access"| node_admin_api
node_admin_api -->|"handles admin operations"| node_central
node_central -->|"reads and saves users"| node_users_repo
node_app_repo -->|"persists applications"| node_postgres
node_customer_repo -->|"persists customers"| node_postgres
node_account_repo -->|"persists accounts"| node_postgres
node_transactions_repo -->|"persists transactions"| node_postgres
node_users_repo -->|"persists users"| node_postgres
node_jwt_filter -->|"validates token"| node_jwt
node_jwt_filter -->|"loads principal"| node_user_details
node_user_details -->|"loads user"| node_users_repo
node_user_api -->|"handles password recovery"| node_central
node_central -->|"sends recovery OTP"| node_email

click node_registration "https://github.com/asimansari-git/bankpro/blob/main/Front-end/Registrationform.js"
click node_customer_ui "https://github.com/asimansari-git/bankpro/blob/main/Front-end/User/Accountdetail.js"
click node_staff_ui "https://github.com/asimansari-git/bankpro/blob/main/Front-end/Staff/staffApplication.js"
click node_admin_api "https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/controller/AdminController.java"
click node_staff_api "https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/controller/StaffController.java"
click node_user_api "https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/controller/UserController.java"
click node_applications "https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/service/ApplicationsService.java"
click node_user_service "https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/service/UserService.java"
click node_central "https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/service/CentralizedService.java"
click node_app_repo "https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/repo/ApplicationsRepository.java"
click node_customer_repo "https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/repo/CustomerRepository.java"
click node_account_repo "https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/repo/AccountRepository.java"
click node_transactions_repo "https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/repo/TransactionsRepository.java"
click node_users_repo "https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/repo/UsersRepository.java"
click node_email "https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/email_service/EmailService.java"
click node_otp "https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/email_service/OtpService.java"
click node_jwt "https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/service/JsonWebTokenService.java"
click node_jwt_filter "https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/config/JWTFilter.java"
click node_user_details "https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/service/MyUserDetailsService.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_registration,node_customer_ui,node_staff_ui toneBlue
class node_admin_api,node_staff_api,node_user_api,node_postgres toneAmber
class node_applications,node_user_service,node_central toneMint
class node_app_repo,node_customer_repo,node_account_repo,node_transactions_repo,node_users_repo toneRose
class node_email,node_otp,node_jwt,node_jwt_filter,node_user_details,node_customer,node_staff,node_admin,node_smtp toneIndigo
```

## Components

### Web clients

- [Registration and OTP](https://github.com/asimansari-git/bankpro/blob/main/Front-end/Registrationform.js): `Front-end/Registrationform.js`
- [Customer banking UI](https://github.com/asimansari-git/bankpro/blob/main/Front-end/User/Accountdetail.js): `Front-end/User/Accountdetail.js`
- [Staff operations UI](https://github.com/asimansari-git/bankpro/blob/main/Front-end/Staff/staffApplication.js): `Front-end/Staff/staffApplication.js`

### REST API

- [Admin endpoints](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/controller/AdminController.java): `Backend Rest API/src/main/java/com/screenprog/application/controller/AdminController.java`
- [Staff endpoints](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/controller/StaffController.java): `Backend Rest API/src/main/java/com/screenprog/application/controller/StaffController.java`
- [User endpoints](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/controller/UserController.java): `Backend Rest API/src/main/java/com/screenprog/application/controller/UserController.java`

### Banking services

- [Application review](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/service/ApplicationsService.java): `Backend Rest API/src/main/java/com/screenprog/application/service/ApplicationsService.java`
- [Customer operations](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/service/UserService.java): `Backend Rest API/src/main/java/com/screenprog/application/service/UserService.java`
- [Shared banking operations](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/service/CentralizedService.java): `Backend Rest API/src/main/java/com/screenprog/application/service/CentralizedService.java`

### Persistence

- [Applications repository](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/repo/ApplicationsRepository.java): `Backend Rest API/src/main/java/com/screenprog/application/repo/ApplicationsRepository.java`
- [Customer repository](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/repo/CustomerRepository.java): `Backend Rest API/src/main/java/com/screenprog/application/repo/CustomerRepository.java`
- [Account repository](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/repo/AccountRepository.java): `Backend Rest API/src/main/java/com/screenprog/application/repo/AccountRepository.java`
- [Transaction repository](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/repo/TransactionsRepository.java): `Backend Rest API/src/main/java/com/screenprog/application/repo/TransactionsRepository.java`
- [User repository](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/repo/UsersRepository.java): `Backend Rest API/src/main/java/com/screenprog/application/repo/UsersRepository.java`

### Identity and email

- [Email and OTP](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/email_service/EmailService.java): `Backend Rest API/src/main/java/com/screenprog/application/email_service/EmailService.java`
- [OTP store](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/email_service/OtpService.java): `Backend Rest API/src/main/java/com/screenprog/application/email_service/OtpService.java`
- [JWT authentication](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/service/JsonWebTokenService.java): `Backend Rest API/src/main/java/com/screenprog/application/service/JsonWebTokenService.java`
- [JWT request filter](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/config/JWTFilter.java): `Backend Rest API/src/main/java/com/screenprog/application/config/JWTFilter.java`
- [User lookup](https://github.com/asimansari-git/bankpro/blob/main/Backend%20Rest%20API/src/main/java/com/screenprog/application/service/MyUserDetailsService.java): `Backend Rest API/src/main/java/com/screenprog/application/service/MyUserDetailsService.java`

### Other components

- **Customer**
- **Staff**
- **Admin**
- **PostgreSQL**
- **Mail service**

## Connections

- Customer → Registration and OTP: submits application
- Registration and OTP → User endpoints: sends registration
- User endpoints → Customer operations: handles application
- Customer operations → Applications repository: saves application
- Customer operations → Email and OTP: requests confirmation
- User endpoints → Email and OTP: requests OTP
- Email and OTP → OTP store: generates OTP
- Email and OTP → Mail service: sends message
- User endpoints → OTP store: verifies OTP
- Staff → Staff operations UI: reviews applications
- Staff operations UI → Staff endpoints: submits decisions
- Staff endpoints → Application review: updates applications
- Staff endpoints → Application review: fetches pending
- Application review → Applications repository: reads and saves
- Application review → Customer repository: registers customer
- Application review → User repository: saves credentials
- Application review → Email and OTP: notifies applicant
- Customer → Customer banking UI: uses banking features
- Customer banking UI → User endpoints: calls banking endpoints
- User endpoints → Customer operations: handles banking request
- Customer operations → Account repository: reads and saves accounts
- Customer operations → Transaction repository: records transactions
- Customer operations → Email and OTP: sends account notice
- Staff → Staff operations UI: manages banking
- Staff operations UI → Staff endpoints: calls staff endpoints
- Staff endpoints → Shared banking operations: handles staff operations
- Shared banking operations → Customer repository: reads and saves customers
- Shared banking operations → Account repository: reads and saves accounts
- Shared banking operations → Transaction repository: reads and saves transactions
- Admin → Admin endpoints: manages access
- Admin endpoints → Shared banking operations: handles admin operations
- Shared banking operations → User repository: reads and saves users
- Applications repository → PostgreSQL: persists applications
- Customer repository → PostgreSQL: persists customers
- Account repository → PostgreSQL: persists accounts
- Transaction repository → PostgreSQL: persists transactions
- User repository → PostgreSQL: persists users
- JWT request filter → JWT authentication: validates token
- JWT request filter → User lookup: loads principal
- User lookup → User repository: loads user
- User endpoints → Shared banking operations: handles password recovery
- Shared banking operations → Email and OTP: sends recovery OTP
