# miladsrc/loan-managment-system architecture

> Architecture diagram of the GitHub repository miladsrc/loan-managment-system, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/miladsrc/loan-managment-system
- Repository: https://github.com/miladsrc/loan-managment-system

## Overview

This is a Java/Hibernate student-loan payment application. Its documented user journey is student loan application, review, approval and disbursement; housing, tuition and education-expense loans are named capabilities. The tree also shows student, bank-card, loan and refund services backed by repositories and Hibernate entities. The excerpts support the generic persistence and transaction layer, but do not show the console entry point or how the documented review and disbursement stages are implemented, so those connections are left unasserted.

Main entry points: [`src/main/java/domain/Loan.java`](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/domain/Loan.java) (Loan), [`src/main/java/domain/Student.java`](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/domain/Student.java) (Student), [`src/main/java/base/service/BaseServiceImpl.java`](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/base/service/BaseServiceImpl.java) (CRUD transactions), [`src/main/java/base/repository/BaseRepositoryImpl.java`](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/base/repository/BaseRepositoryImpl.java) (Hibernate CRUD)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Application runtime"]
  node_menu["Console menu<br/>[Menu.java]"]
  node_main["Application entry<br/>[Main.java]"]
  node_context["Application context"]
  node_sessionfactory["Hibernate sessions"]
end

subgraph group_services["Domain services"]
  node_studentservice["Student service"]
  node_cardservice["Bank-card service"]
  node_loanservice["Loan service"]
  node_refundservice["Refund service"]
  node_baseservice["CRUD transactions"]
end

subgraph group_persistence["Persistence layer"]
  node_studentrepo["Student repository"]
  node_cardrepo["Bank-card repository"]
  node_loanrepo["Loan repository"]
  node_refundrepo["Refund repository"]
  node_baserepo["Hibernate CRUD"]
end

subgraph group_model["Domain model"]
  node_student["Student<br/>[Student.java]"]
  node_bankcard["Bank card<br/>[BankCard.java]"]
  node_loan["Loan<br/>[Loan.java]"]
  node_refund["Refund<br/>[Refund.java]"]
  node_baseentity["Entity identity<br/>[BaseEntity.java]"]
  node_lookupmodels["Loan and student types<br/>[Grade.java]"]
end

node_database[("Relational database")]
node_studentuser(("Student"))

node_baseservice -->|"calls CRUD"| node_baserepo
node_baseservice -->|"gets factory"| node_sessionfactory
node_studentrepo -->|"extends"| node_baserepo
node_cardrepo -->|"extends"| node_baserepo
node_loanrepo -->|"extends"| node_baserepo
node_refundrepo -->|"extends"| node_baserepo
node_studentservice -->|"inherits CRUD"| node_baseservice
node_cardservice -->|"inherits CRUD"| node_baseservice
node_loanservice -->|"inherits CRUD"| node_baseservice
node_refundservice -->|"inherits CRUD"| node_baseservice
node_context -.->|"registers"| node_studentservice
node_context -.->|"registers"| node_cardservice
node_context -.->|"registers"| node_loanservice
node_context -.->|"registers"| node_refundservice
node_sessionfactory -.->|"opens sessions"| node_database
node_studentuser -.->|"uses"| node_menu
node_student -->|"extends"| node_baseentity
node_bankcard -->|"extends"| node_baseentity
node_loan -->|"extends"| node_baseentity
node_refund -->|"extends"| node_baseentity
node_student -->|"has card"| node_bankcard
node_student -->|"has loans"| node_loan
node_loan -->|"has refunds"| node_refund
node_loan -->|"belongs to"| node_student
node_refund -->|"belongs to"| node_loan
node_bankcard -->|"belongs to"| node_student
node_loan -->|"uses grade and type"| node_lookupmodels
node_student -->|"uses grade"| node_lookupmodels

click node_student "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/domain/Student.java"
click node_bankcard "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/domain/BankCard.java"
click node_loan "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/domain/Loan.java"
click node_refund "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/domain/Refund.java"
click node_baseentity "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/base/entity/BaseEntity.java"
click node_lookupmodels "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/domain/Grade.java"
click node_menu "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/org/example/Menu.java"
click node_main "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/org/example/Main.java"
click node_context "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/util/ApplicationContext.java"
click node_sessionfactory "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/util/SessionFactorySingleton.java"
click node_studentservice "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/logic/service/impl/StudentServiceImpl.java"
click node_cardservice "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/logic/service/impl/BankCardServiceImpl.java"
click node_loanservice "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/logic/service/impl/LoanServiceImpl.java"
click node_refundservice "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/logic/service/impl/RefundServiceImpl.java"
click node_baseservice "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/base/service/BaseServiceImpl.java"
click node_studentrepo "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/logic/repository/impl/StudentRepositoryImpl.java"
click node_cardrepo "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/logic/repository/impl/BankCardRepositoryImpl.java"
click node_loanrepo "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/logic/repository/impl/LoanRepositoryImpl.java"
click node_refundrepo "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/logic/repository/impl/RefundRepositoryImpl.java"
click node_baserepo "https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/base/repository/BaseRepositoryImpl.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_menu,node_main,node_context,node_sessionfactory toneBlue
class node_studentservice,node_cardservice,node_loanservice,node_refundservice,node_baseservice,node_database toneAmber
class node_studentrepo,node_cardrepo,node_loanrepo,node_refundrepo,node_baserepo toneMint
class node_student,node_bankcard,node_loan,node_refund,node_baseentity,node_lookupmodels toneRose
class node_studentuser toneIndigo
```

## Components

### Application runtime

- [Console menu](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/org/example/Menu.java): `src/main/java/org/example/Menu.java`
- [Application entry](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/org/example/Main.java): `src/main/java/org/example/Main.java`
- [Application context](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/util/ApplicationContext.java): `src/main/java/util/ApplicationContext.java`
- [Hibernate sessions](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/util/SessionFactorySingleton.java): `src/main/java/util/SessionFactorySingleton.java`

### Domain services

- [Student service](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/logic/service/impl/StudentServiceImpl.java): `src/main/java/logic/service/impl/StudentServiceImpl.java`
- [Bank-card service](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/logic/service/impl/BankCardServiceImpl.java): `src/main/java/logic/service/impl/BankCardServiceImpl.java`
- [Loan service](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/logic/service/impl/LoanServiceImpl.java): `src/main/java/logic/service/impl/LoanServiceImpl.java`
- [Refund service](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/logic/service/impl/RefundServiceImpl.java): `src/main/java/logic/service/impl/RefundServiceImpl.java`
- [CRUD transactions](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/base/service/BaseServiceImpl.java): `src/main/java/base/service/BaseServiceImpl.java`

### Persistence layer

- [Student repository](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/logic/repository/impl/StudentRepositoryImpl.java): `src/main/java/logic/repository/impl/StudentRepositoryImpl.java`
- [Bank-card repository](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/logic/repository/impl/BankCardRepositoryImpl.java): `src/main/java/logic/repository/impl/BankCardRepositoryImpl.java`
- [Loan repository](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/logic/repository/impl/LoanRepositoryImpl.java): `src/main/java/logic/repository/impl/LoanRepositoryImpl.java`
- [Refund repository](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/logic/repository/impl/RefundRepositoryImpl.java): `src/main/java/logic/repository/impl/RefundRepositoryImpl.java`
- [Hibernate CRUD](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/base/repository/BaseRepositoryImpl.java): `src/main/java/base/repository/BaseRepositoryImpl.java`

### Domain model

- [Student](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/domain/Student.java): `src/main/java/domain/Student.java`
- [Bank card](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/domain/BankCard.java): `src/main/java/domain/BankCard.java`
- [Loan](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/domain/Loan.java): `src/main/java/domain/Loan.java`
- [Refund](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/domain/Refund.java): `src/main/java/domain/Refund.java`
- [Entity identity](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/base/entity/BaseEntity.java): `src/main/java/base/entity/BaseEntity.java`
- [Loan and student types](https://github.com/miladsrc/loan-managment-system/blob/master/src/main/java/domain/Grade.java): `src/main/java/domain/Grade.java`

### Other components

- **Relational database**
- **Student**

## Connections

- CRUD transactions → Hibernate CRUD: calls CRUD (evidence: `src/main/java/base/service/BaseServiceImpl.java`)
- CRUD transactions → Hibernate sessions: gets factory (evidence: `src/main/java/base/service/BaseServiceImpl.java`)
- Student repository → Hibernate CRUD: extends (evidence: `src/main/java/logic/repository/impl/StudentRepositoryImpl.java`)
- Bank-card repository → Hibernate CRUD: extends (evidence: `src/main/java/logic/repository/impl/BankCardRepositoryImpl.java`)
- Loan repository → Hibernate CRUD: extends (evidence: `src/main/java/logic/repository/impl/LoanRepositoryImpl.java`)
- Refund repository → Hibernate CRUD: extends (evidence: `src/main/java/logic/repository/impl/RefundRepositoryImpl.java`)
- Student service → CRUD transactions: inherits CRUD (evidence: `src/main/java/logic/service/impl/StudentServiceImpl.java`)
- Bank-card service → CRUD transactions: inherits CRUD (evidence: `src/main/java/logic/service/impl/BankCardServiceImpl.java`)
- Loan service → CRUD transactions: inherits CRUD (evidence: `src/main/java/logic/service/impl/LoanServiceImpl.java`)
- Refund service → CRUD transactions: inherits CRUD (evidence: `src/main/java/logic/service/impl/RefundServiceImpl.java`)
- Application context → Student service: registers (evidence: `src/main/java/util/ApplicationContext.java`)
- Application context → Bank-card service: registers (evidence: `src/main/java/util/ApplicationContext.java`)
- Application context → Loan service: registers (evidence: `src/main/java/util/ApplicationContext.java`)
- Application context → Refund service: registers (evidence: `src/main/java/util/ApplicationContext.java`)
- Hibernate sessions → Relational database: opens sessions
- Student → Console menu: uses
- Student → Entity identity: extends (evidence: `src/main/java/domain/Student.java`)
- Bank card → Entity identity: extends (evidence: `src/main/java/domain/BankCard.java`)
- Loan → Entity identity: extends (evidence: `src/main/java/domain/Loan.java`)
- Refund → Entity identity: extends (evidence: `src/main/java/domain/Refund.java`)
- Student → Bank card: has card (evidence: `src/main/java/domain/Student.java`)
- Student → Loan: has loans (evidence: `src/main/java/domain/Student.java`)
- Loan → Refund: has refunds (evidence: `src/main/java/domain/Loan.java`)
- Loan → Student: belongs to (evidence: `src/main/java/domain/Loan.java`)
- Refund → Loan: belongs to (evidence: `src/main/java/domain/Refund.java`)
- Bank card → Student: belongs to (evidence: `src/main/java/domain/BankCard.java`)
- Loan → Loan and student types: uses grade and type (evidence: `src/main/java/domain/Loan.java`)
- Student → Loan and student types: uses grade (evidence: `src/main/java/domain/Student.java`)
