# souvikdev21/npst_spring_services architecture

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

## Overview

This repository contains Spring services for banking operations: account management, fund transfers, loans, and term deposits, with an API gateway. The principal transfer workflow records and validates a transaction, checks the source balance, then attempts external disbursal and records the outcome. Other distinct flows cover beneficiary enrollment, scheduled transfers, loan servicing, and deposit servicing. The README provides no product detail; component paths come from the tree, while connections are limited to relationships indicated by the sampled service code and component roles.

Main entry points: [`fund-service/src/main/java/com/fund_transfer/backend/service/TransactionService.java`](https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/service/TransactionService.java) (Transaction Service), [`fund-service/src/main/java/com/fund_transfer/backend/service/BeneficiaryService.java`](https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/service/BeneficiaryService.java) (Beneficiary Service), [`loan-service/src/main/java/com/bank/loan/service/LoanService.java`](https://github.com/souvikdev21/npst_spring_services/blob/main/loan-service/src/main/java/com/bank/loan/service/LoanService.java) (Loan Service), [`term-deposite/src/main/java/com/bank/td/service/TermDepositService.java`](https://github.com/souvikdev21/npst_spring_services/blob/main/term-deposite/src/main/java/com/bank/td/service/TermDepositService.java) (Deposit Service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_gateway["API Gateway"]
  node_gateway_app["Gateway Application"]
  node_gateway_security["Gateway Security"]
end

subgraph group_accounts["Accounts"]
  node_account_api["Account API"]
  node_account_service["Account Service"]
  node_account_store[("Account Store")]
end

subgraph group_transfers["Fund Transfers"]
  node_transfer_api["Transfer API"]
  node_transaction_service["Transaction Service"]
  node_transaction_store[("Transaction Store")]
  node_beneficiary_api["Beneficiary API"]
  node_beneficiary_service["Beneficiary Service"]
  node_beneficiary_store[("Beneficiary Store")]
  node_ifsc_lookup["IFSC Lookup"]
  node_otp_client["OTP Client<br/>[OtpClient.java]"]
  node_scheduled_api["Scheduled Transfer API"]
  node_scheduled_service["Scheduled Transfer Service"]
  node_scheduled_job["Scheduled Transfer Job"]
  node_scheduled_store[("Scheduled Transfer Store")]
end

subgraph group_loans["Loan Servicing"]
  node_loan_api["Loan API"]
  node_loan_service["Loan Service<br/>[LoanService.java]"]
  node_loan_engine["Loan Calculations"]
  node_loan_store[("Loan Account Store")]
end

subgraph group_deposits["Term Deposits"]
  node_td_api["Deposit API"]
  node_td_service["Deposit Service"]
  node_td_engine["Deposit Calculations"]
  node_td_store[("Deposit Store")]
  node_approval_api["Deposit Request API"]
  node_approval_service["Deposit Approval"]
  node_approved_deposit_service["Approved Deposit Execution"]
  node_cbs_td_client["CBS Deposit Client"]
end

node_customer(("Banking User"))
node_cbs{{"Core Banking System"}}
node_npci{{"NPCI"}}
node_ifsc_provider{{"IFSC Provider"}}
node_otp_provider{{"OTP Provider"}}

node_customer -->|"accesses"| node_gateway_app
node_gateway_app -->|"configures security"| node_gateway_security
node_customer -->|"requests accounts"| node_account_api
node_account_api -->|"invokes"| node_account_service
node_account_service -->|"reads and writes"| node_account_store
node_customer -->|"requests transfer"| node_transfer_api
node_transfer_api -->|"invokes"| node_transaction_service
node_transaction_service -->|"records transaction"| node_transaction_store
node_transaction_service -->|"checks balance"| node_cbs
node_transaction_service -->|"requests disbursal"| node_npci
node_customer -->|"manages beneficiaries"| node_beneficiary_api
node_beneficiary_api -->|"invokes"| node_beneficiary_service
node_beneficiary_service -->|"reads and writes"| node_beneficiary_store
node_beneficiary_service -->|"resolves IFSC"| node_ifsc_lookup
node_ifsc_lookup -->|"looks up branch"| node_ifsc_provider
node_beneficiary_service -->|"sends OTP"| node_otp_client
node_otp_client -.->|"requests OTP"| node_otp_provider
node_customer -->|"manages schedules"| node_scheduled_api
node_scheduled_api -->|"invokes"| node_scheduled_service
node_scheduled_job -->|"runs schedules"| node_scheduled_service
node_scheduled_service -->|"reads and writes"| node_scheduled_store
node_customer -->|"requests loan services"| node_loan_api
node_loan_api -->|"invokes"| node_loan_service
node_loan_service -->|"reads and writes"| node_loan_store
node_loan_service -->|"calculates schedules"| node_loan_engine
node_loan_service -->|"applies and inquires"| node_cbs
node_customer -->|"requests deposits"| node_td_api
node_td_api -->|"invokes"| node_td_service
node_td_service -->|"reads and writes"| node_td_store
node_td_service -->|"calculates interest"| node_td_engine
node_td_service -->|"opens and inquires"| node_cbs
node_customer -->|"submits deposit request"| node_approval_api
node_approval_api -->|"handles requests"| node_approval_service
node_approved_deposit_service -->|"opens approved deposit"| node_cbs_td_client
node_cbs_td_client -->|"opens deposit"| node_cbs

click node_gateway_app "https://github.com/souvikdev21/npst_spring_services/blob/main/API-Gateway/src/main/java/com/bank/api_gateway/ApiGatewayApplication.java"
click node_gateway_security "https://github.com/souvikdev21/npst_spring_services/blob/main/API-Gateway/src/main/java/com/bank/api_gateway/config/SecurityConfig.java"
click node_account_api "https://github.com/souvikdev21/npst_spring_services/blob/main/account-service/src/main/java/com/fund_transfer/backend/controller/AccountController.java"
click node_account_service "https://github.com/souvikdev21/npst_spring_services/blob/main/account-service/src/main/java/com/fund_transfer/backend/service/AccountServiceImpl.java"
click node_account_store "https://github.com/souvikdev21/npst_spring_services/blob/main/account-service/src/main/java/com/fund_transfer/backend/repository/AccountRepository.java"
click node_transfer_api "https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/controller/FundTransferController.java"
click node_transaction_service "https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/service/TransactionService.java"
click node_transaction_store "https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/repository/TransactionRepo.java"
click node_beneficiary_api "https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/controller/BeneficiaryController.java"
click node_beneficiary_service "https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/service/BeneficiaryService.java"
click node_beneficiary_store "https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/repository/BeneficiaryRepo.java"
click node_ifsc_lookup "https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/ifsc/IfscLookupService.java"
click node_otp_client "https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/Otp/OtpClient.java"
click node_scheduled_api "https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/controller/ScheduledTransferController.java"
click node_scheduled_service "https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/service/ScheduledTransferService.java"
click node_scheduled_job "https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/scheduler/ScheduledTransferSchedulerJob.java"
click node_scheduled_store "https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/repository/ScheduledTransferRepository.java"
click node_loan_api "https://github.com/souvikdev21/npst_spring_services/blob/main/loan-service/src/main/java/com/bank/loan/controller/LoanController.java"
click node_loan_service "https://github.com/souvikdev21/npst_spring_services/blob/main/loan-service/src/main/java/com/bank/loan/service/LoanService.java"
click node_loan_engine "https://github.com/souvikdev21/npst_spring_services/blob/main/loan-service/src/main/java/com/bank/loan/engine/AmortizationEngine.java"
click node_loan_store "https://github.com/souvikdev21/npst_spring_services/blob/main/loan-service/src/main/java/com/bank/loan/repository/LoanAccountRepository.java"
click node_td_api "https://github.com/souvikdev21/npst_spring_services/blob/main/term-deposite/src/main/java/com/bank/td/controller/TermDepositController.java"
click node_td_service "https://github.com/souvikdev21/npst_spring_services/blob/main/term-deposite/src/main/java/com/bank/td/service/TermDepositService.java"
click node_td_engine "https://github.com/souvikdev21/npst_spring_services/blob/main/term-deposite/src/main/java/com/bank/td/engine/InterestCalculationEngine.java"
click node_td_store "https://github.com/souvikdev21/npst_spring_services/blob/main/term-deposite/src/main/java/com/bank/td/repository/TermDepositRepository.java"
click node_approval_api "https://github.com/souvikdev21/npst_spring_services/blob/main/term-deposite/src/main/java/com/term_deposit/api/v1/controller/TermDepositController.java"
click node_approval_service "https://github.com/souvikdev21/npst_spring_services/blob/main/term-deposite/src/main/java/com/term_deposit/domain/service/DepositRequestApprovalService.java"
click node_approved_deposit_service "https://github.com/souvikdev21/npst_spring_services/blob/main/term-deposite/src/main/java/com/term_deposit/domain/service/TermDepositService.java"
click node_cbs_td_client "https://github.com/souvikdev21/npst_spring_services/blob/main/term-deposite/src/main/java/com/term_deposit/client/feign/CbsFeignClient.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_security,node_customer toneBlue
class node_account_api,node_account_service,node_account_store toneAmber
class node_transfer_api,node_transaction_service,node_transaction_store,node_beneficiary_api,node_beneficiary_service,node_beneficiary_store,node_ifsc_lookup,node_otp_client,node_scheduled_api,node_scheduled_service,node_scheduled_job,node_scheduled_store toneMint
class node_loan_api,node_loan_service,node_loan_engine,node_loan_store toneRose
class node_td_api,node_td_service,node_td_engine,node_td_store,node_approval_api,node_approval_service,node_approved_deposit_service,node_cbs_td_client,node_cbs,node_npci,node_ifsc_provider,node_otp_provider toneIndigo
```

## Components

### API Gateway

- [Gateway Application](https://github.com/souvikdev21/npst_spring_services/blob/main/API-Gateway/src/main/java/com/bank/api_gateway/ApiGatewayApplication.java): `API-Gateway/src/main/java/com/bank/api_gateway/ApiGatewayApplication.java`
- [Gateway Security](https://github.com/souvikdev21/npst_spring_services/blob/main/API-Gateway/src/main/java/com/bank/api_gateway/config/SecurityConfig.java): `API-Gateway/src/main/java/com/bank/api_gateway/config/SecurityConfig.java`

### Accounts

- [Account API](https://github.com/souvikdev21/npst_spring_services/blob/main/account-service/src/main/java/com/fund_transfer/backend/controller/AccountController.java): `account-service/src/main/java/com/fund_transfer/backend/controller/AccountController.java`
- [Account Service](https://github.com/souvikdev21/npst_spring_services/blob/main/account-service/src/main/java/com/fund_transfer/backend/service/AccountServiceImpl.java): `account-service/src/main/java/com/fund_transfer/backend/service/AccountServiceImpl.java`
- [Account Store](https://github.com/souvikdev21/npst_spring_services/blob/main/account-service/src/main/java/com/fund_transfer/backend/repository/AccountRepository.java): `account-service/src/main/java/com/fund_transfer/backend/repository/AccountRepository.java`

### Fund Transfers

- [Transfer API](https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/controller/FundTransferController.java): `fund-service/src/main/java/com/fund_transfer/backend/controller/FundTransferController.java`
- [Transaction Service](https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/service/TransactionService.java): `fund-service/src/main/java/com/fund_transfer/backend/service/TransactionService.java`
- [Transaction Store](https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/repository/TransactionRepo.java): `fund-service/src/main/java/com/fund_transfer/backend/repository/TransactionRepo.java`
- [Beneficiary API](https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/controller/BeneficiaryController.java): `fund-service/src/main/java/com/fund_transfer/backend/controller/BeneficiaryController.java`
- [Beneficiary Service](https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/service/BeneficiaryService.java): `fund-service/src/main/java/com/fund_transfer/backend/service/BeneficiaryService.java`
- [Beneficiary Store](https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/repository/BeneficiaryRepo.java): `fund-service/src/main/java/com/fund_transfer/backend/repository/BeneficiaryRepo.java`
- [IFSC Lookup](https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/ifsc/IfscLookupService.java): `fund-service/src/main/java/com/fund_transfer/backend/ifsc/IfscLookupService.java`
- [OTP Client](https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/Otp/OtpClient.java): `fund-service/src/main/java/com/fund_transfer/backend/Otp/OtpClient.java`
- [Scheduled Transfer API](https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/controller/ScheduledTransferController.java): `fund-service/src/main/java/com/fund_transfer/backend/controller/ScheduledTransferController.java`
- [Scheduled Transfer Service](https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/service/ScheduledTransferService.java): `fund-service/src/main/java/com/fund_transfer/backend/service/ScheduledTransferService.java`
- [Scheduled Transfer Job](https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/scheduler/ScheduledTransferSchedulerJob.java): `fund-service/src/main/java/com/fund_transfer/backend/scheduler/ScheduledTransferSchedulerJob.java`
- [Scheduled Transfer Store](https://github.com/souvikdev21/npst_spring_services/blob/main/fund-service/src/main/java/com/fund_transfer/backend/repository/ScheduledTransferRepository.java): `fund-service/src/main/java/com/fund_transfer/backend/repository/ScheduledTransferRepository.java`

### Loan Servicing

- [Loan API](https://github.com/souvikdev21/npst_spring_services/blob/main/loan-service/src/main/java/com/bank/loan/controller/LoanController.java): `loan-service/src/main/java/com/bank/loan/controller/LoanController.java`
- [Loan Service](https://github.com/souvikdev21/npst_spring_services/blob/main/loan-service/src/main/java/com/bank/loan/service/LoanService.java): `loan-service/src/main/java/com/bank/loan/service/LoanService.java`
- [Loan Calculations](https://github.com/souvikdev21/npst_spring_services/blob/main/loan-service/src/main/java/com/bank/loan/engine/AmortizationEngine.java): `loan-service/src/main/java/com/bank/loan/engine/AmortizationEngine.java`
- [Loan Account Store](https://github.com/souvikdev21/npst_spring_services/blob/main/loan-service/src/main/java/com/bank/loan/repository/LoanAccountRepository.java): `loan-service/src/main/java/com/bank/loan/repository/LoanAccountRepository.java`

### Term Deposits

- [Deposit API](https://github.com/souvikdev21/npst_spring_services/blob/main/term-deposite/src/main/java/com/bank/td/controller/TermDepositController.java): `term-deposite/src/main/java/com/bank/td/controller/TermDepositController.java`
- [Deposit Service](https://github.com/souvikdev21/npst_spring_services/blob/main/term-deposite/src/main/java/com/bank/td/service/TermDepositService.java): `term-deposite/src/main/java/com/bank/td/service/TermDepositService.java`
- [Deposit Calculations](https://github.com/souvikdev21/npst_spring_services/blob/main/term-deposite/src/main/java/com/bank/td/engine/InterestCalculationEngine.java): `term-deposite/src/main/java/com/bank/td/engine/InterestCalculationEngine.java`
- [Deposit Store](https://github.com/souvikdev21/npst_spring_services/blob/main/term-deposite/src/main/java/com/bank/td/repository/TermDepositRepository.java): `term-deposite/src/main/java/com/bank/td/repository/TermDepositRepository.java`
- [Deposit Request API](https://github.com/souvikdev21/npst_spring_services/blob/main/term-deposite/src/main/java/com/term_deposit/api/v1/controller/TermDepositController.java): `term-deposite/src/main/java/com/term_deposit/api/v1/controller/TermDepositController.java`
- [Deposit Approval](https://github.com/souvikdev21/npst_spring_services/blob/main/term-deposite/src/main/java/com/term_deposit/domain/service/DepositRequestApprovalService.java): `term-deposite/src/main/java/com/term_deposit/domain/service/DepositRequestApprovalService.java`
- [Approved Deposit Execution](https://github.com/souvikdev21/npst_spring_services/blob/main/term-deposite/src/main/java/com/term_deposit/domain/service/TermDepositService.java): `term-deposite/src/main/java/com/term_deposit/domain/service/TermDepositService.java`
- [CBS Deposit Client](https://github.com/souvikdev21/npst_spring_services/blob/main/term-deposite/src/main/java/com/term_deposit/client/feign/CbsFeignClient.java): `term-deposite/src/main/java/com/term_deposit/client/feign/CbsFeignClient.java`

### Other components

- **Banking User**
- **Core Banking System**
- **NPCI**
- **IFSC Provider**
- **OTP Provider**

## Connections

- Banking User → Gateway Application: accesses
- Gateway Application → Gateway Security: configures security
- Banking User → Account API: requests accounts
- Account API → Account Service: invokes
- Account Service → Account Store: reads and writes
- Banking User → Transfer API: requests transfer
- Transfer API → Transaction Service: invokes
- Transaction Service → Transaction Store: records transaction
- Transaction Service → Core Banking System: checks balance
- Transaction Service → NPCI: requests disbursal
- Banking User → Beneficiary API: manages beneficiaries
- Beneficiary API → Beneficiary Service: invokes
- Beneficiary Service → Beneficiary Store: reads and writes
- Beneficiary Service → IFSC Lookup: resolves IFSC
- IFSC Lookup → IFSC Provider: looks up branch
- Beneficiary Service → OTP Client: sends OTP
- OTP Client → OTP Provider: requests OTP
- Banking User → Scheduled Transfer API: manages schedules
- Scheduled Transfer API → Scheduled Transfer Service: invokes
- Scheduled Transfer Job → Scheduled Transfer Service: runs schedules
- Scheduled Transfer Service → Scheduled Transfer Store: reads and writes
- Banking User → Loan API: requests loan services
- Loan API → Loan Service: invokes
- Loan Service → Loan Account Store: reads and writes
- Loan Service → Loan Calculations: calculates schedules
- Loan Service → Core Banking System: applies and inquires
- Banking User → Deposit API: requests deposits
- Deposit API → Deposit Service: invokes
- Deposit Service → Deposit Store: reads and writes
- Deposit Service → Deposit Calculations: calculates interest
- Deposit Service → Core Banking System: opens and inquires
- Banking User → Deposit Request API: submits deposit request
- Deposit Request API → Deposit Approval: handles requests
- Approved Deposit Execution → CBS Deposit Client: opens approved deposit
- CBS Deposit Client → Core Banking System: opens deposit
