# dahirali3823/applicant-service architecture

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

- Interactive diagram: https://gitdiagram.com/dahirali3823/applicant-service
- Repository: https://github.com/dahirali3823/applicant-service

## Overview

#### Purpose and runtime
Credit Risk Assessment System is a Java 17 Spring Boot REST backend that manages applicants, computes configurable credit-risk scores, and returns approve/deny loan decisions. The application starts from `src/main/java/com/example/Application.java`; HTTP APIs run in the Spring Boot process.

#### API boundary
Controllers expose JSON endpoints and separate transport concerns from domain services:
- Applicant CRUD: `src/main/java/com/example/applicant_service/ApplicantController.java`
- Credit-score calculation and explanation: `src/main/java/com/example/scoring_service/ScoringController.java`
- Loan evaluation: `src/main/java/com/example/loan_service/LoanController.java`
- Liveness-style status endpoints: `src/main/java/com/example/health/HealthController.java`

#### Applicant lifecycle and persistence
`Applicant` is the central input record for all risk assessment, carrying applicant financial and employment/residency data. `ApplicantService` owns create/read/update/partial-update/delete behavior and uses the repository boundary for storage:
- `src/main/java/com/example/applicant_service/Applicant.java`
- `src/main/java/com/example/applicant_service/ApplicantService.java`
- `src/main/java/com/example/applicant_service/ApplicantRepository.java`

PostgreSQL is the intended persistence service; connection and application settings are in `src/main/resources/application.yml`.

#### Scoring stage
`ScoringService` receives an applicant identifier, obtains applicant data through the application’s domain layer, and calculates a numeric credit score from applicant attributes and scoring weights. It also produces a human-readable breakdown for the explanation endpoint. `CreditScore` is the score-domain result/value model.
- `src/main/java/com/example/scoring_service/ScoringService.java`
- `src/main/java/com/example/scoring_service/CreditScore.java`
- `src/main/java/com/example/scoring_service/ScoringController.java`

#### Loan-decision stage
`LoanDecisionService` is the downstream policy layer: it evaluates an applicant using score-related and applicant data, then emits a `LoanDecision` containing the approval/denial outcome. The loan controller is therefore an orchestration-facing API, not a separate persistence subsystem.
- `src/main/java/com/example/loan_service/LoanDecisionService.java`
- `src/main/java/com/example/loan_service/LoanDecision.java`
- `src/main/java/com/example/loan_service/LoanController.java`

#### Primary control flow
1. Client creates or updates an applicant through `/api/applicants`; the controller delegates to `ApplicantService`, which persists through `ApplicantRepository`.
2. A scoring request identifies an applicant; `ScoringService` loads its current data and returns either score data or explanatory output.
3. A loan request identifies an applicant; `LoanDecisionService` applies decision policy based on applicant/scoring results and returns `LoanDecision`.
4. Health endpoints provide lightweight availability checks independent of the business workflows.

#### Deployment and infrastructure
Maven builds the Spring Boot artifact using `pom.xml`. The repository supports containerized execution through `Dockerfile` and `docker-compose.yml`; Compose is the likely boundary for the application and PostgreSQL containers. Runtime configuration remains externalized in `src/main/resources/application.yml`.

Main entry points: [`src/main/java/com/example/Application.java`](https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/Application.java) (Spring Boot Application), [`src/main/java/com/example/applicant_service/ApplicantService.java`](https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/applicant_service/ApplicantService.java) (Applicant Service), [`src/main/java/com/example/loan_service/LoanDecisionService.java`](https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/loan_service/LoanDecisionService.java) (Loan Decision Service), [`src/main/java/com/example/scoring_service/ScoringService.java`](https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/scoring_service/ScoringService.java) (Scoring Service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_applicant_controller["Applicant Controller<br/>REST controller"]
  node_scoring_controller["Scoring Controller<br/>REST controller"]
  node_loan_controller["Loan Controller<br/>REST controller"]
  node_health_controller["Health Controller<br/>REST controller"]
end

subgraph group_domain["Risk Domain"]
  node_applicant_service["Applicant Service<br/>domain service"]
  node_applicant["Applicant<br/>domain model<br/>[Applicant.java]"]
  node_scoring_service["Scoring Service<br/>domain service"]
  node_credit_score["Credit Score<br/>value model<br/>[CreditScore.java]"]
  node_loan_decision_service["Loan Decision Service<br/>policy service"]
  node_loan_decision["Loan Decision<br/>value model<br/>[LoanDecision.java]"]
end

subgraph group_data["Persistence"]
  node_applicant_repository["Applicant Repository"]
  node_postgresql[("PostgreSQL<br/>database service")]
end

subgraph group_runtime["Build &amp; Runtime"]
  node_application{{"Spring Boot Application<br/>Java entry point<br/>[Application.java]"}}
  node_runtime_config["Application Configuration<br/>runtime configuration<br/>[application.yml]"]
  node_maven_build["Maven Build<br/>build system<br/>[pom.xml]"]
  node_container_runtime["Container Deployment<br/>container orchestration<br/>[docker-compose.yml]"]
  node_application_image["Application Image<br/>container image"]
end

node_application -->|"serves"| node_applicant_controller
node_application -->|"serves"| node_scoring_controller
node_application -->|"serves"| node_loan_controller
node_application -->|"serves"| node_health_controller
node_applicant_controller -->|"CRUD requests"| node_applicant_service
node_applicant_service -->|"manages"| node_applicant
node_applicant_service -->|"persists via"| node_applicant_repository
node_applicant_repository -->|"stores"| node_postgresql
node_scoring_controller -->|"score requests"| node_scoring_service
node_scoring_service -->|"loads applicant"| node_applicant_service
node_scoring_service -->|"produces"| node_credit_score
node_loan_controller -->|"evaluation requests"| node_loan_decision_service
node_loan_decision_service -->|"uses applicant data"| node_applicant_service
node_loan_decision_service -->|"uses score"| node_scoring_service
node_loan_decision_service -->|"produces"| node_loan_decision
node_runtime_config -.->|"configures"| node_application
node_maven_build -->|"packages"| node_application_image
node_application_image -->|"runs in"| node_container_runtime
node_container_runtime -.->|"deploys"| node_application
node_container_runtime -.->|"provisions"| node_postgresql

click node_application "https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/Application.java"
click node_applicant_controller "https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/applicant_service/ApplicantController.java"
click node_scoring_controller "https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/scoring_service/ScoringController.java"
click node_loan_controller "https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/loan_service/LoanController.java"
click node_health_controller "https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/health/HealthController.java"
click node_applicant_service "https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/applicant_service/ApplicantService.java"
click node_applicant "https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/applicant_service/Applicant.java"
click node_scoring_service "https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/scoring_service/ScoringService.java"
click node_credit_score "https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/scoring_service/CreditScore.java"
click node_loan_decision_service "https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/loan_service/LoanDecisionService.java"
click node_loan_decision "https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/loan_service/LoanDecision.java"
click node_applicant_repository "https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/applicant_service/ApplicantRepository.java"
click node_runtime_config "https://github.com/dahirali3823/applicant-service/blob/main/src/main/resources/application.yml"
click node_maven_build "https://github.com/dahirali3823/applicant-service/blob/main/pom.xml"
click node_container_runtime "https://github.com/dahirali3823/applicant-service/blob/main/docker-compose.yml"
click node_application_image "https://github.com/dahirali3823/applicant-service/blob/main/Dockerfile"

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_applicant_controller,node_scoring_controller,node_loan_controller,node_health_controller toneBlue
class node_applicant_service,node_applicant,node_scoring_service,node_credit_score,node_loan_decision_service,node_loan_decision toneAmber
class node_applicant_repository,node_postgresql toneMint
class node_application,node_runtime_config,node_maven_build,node_container_runtime,node_application_image toneRose
```

## Components

### HTTP API

- [Applicant Controller](https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/applicant_service/ApplicantController.java): REST controller · Applicant CRUD endpoints. · `src/main/java/com/example/applicant_service/ApplicantController.java`
- [Scoring Controller](https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/scoring_service/ScoringController.java): REST controller · Score and explanation endpoints. · `src/main/java/com/example/scoring_service/ScoringController.java`
- [Loan Controller](https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/loan_service/LoanController.java): REST controller · Loan evaluation endpoint. · `src/main/java/com/example/loan_service/LoanController.java`
- [Health Controller](https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/health/HealthController.java): REST controller · Lightweight availability endpoints. · `src/main/java/com/example/health/HealthController.java`

### Risk Domain

- [Applicant Service](https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/applicant_service/ApplicantService.java): domain service · Owns applicant lifecycle operations. · `src/main/java/com/example/applicant_service/ApplicantService.java`
- [Applicant](https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/applicant_service/Applicant.java): domain model · Financial and employment input for assessment. · `src/main/java/com/example/applicant_service/Applicant.java`
- [Scoring Service](https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/scoring_service/ScoringService.java): domain service · Calculates scores and explanatory breakdowns. · `src/main/java/com/example/scoring_service/ScoringService.java`
- [Credit Score](https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/scoring_service/CreditScore.java): value model · Numeric scoring result. · `src/main/java/com/example/scoring_service/CreditScore.java`
- [Loan Decision Service](https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/loan_service/LoanDecisionService.java): policy service · Applies approval or denial policy. · `src/main/java/com/example/loan_service/LoanDecisionService.java`
- [Loan Decision](https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/loan_service/LoanDecision.java): value model · Approval or denial outcome. · `src/main/java/com/example/loan_service/LoanDecision.java`

### Persistence

- [Applicant Repository](https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/applicant_service/ApplicantRepository.java): repository · Storage boundary for applicants. · `src/main/java/com/example/applicant_service/ApplicantRepository.java`
- **PostgreSQL**: database service · Intended applicant persistence store.

### Build & Runtime

- [Spring Boot Application](https://github.com/dahirali3823/applicant-service/blob/main/src/main/java/com/example/Application.java): Java entry point · Starts the REST backend. · `src/main/java/com/example/Application.java`
- [Application Configuration](https://github.com/dahirali3823/applicant-service/blob/main/src/main/resources/application.yml): runtime configuration · Externalized database and application settings. · `src/main/resources/application.yml`
- [Maven Build](https://github.com/dahirali3823/applicant-service/blob/main/pom.xml): build system · Builds the Spring Boot artifact. · `pom.xml`
- [Container Deployment](https://github.com/dahirali3823/applicant-service/blob/main/docker-compose.yml): container orchestration · Defines application and PostgreSQL containers. · `docker-compose.yml`
- [Application Image](https://github.com/dahirali3823/applicant-service/blob/main/Dockerfile): container image · `Dockerfile`

## Connections

- Spring Boot Application → Applicant Controller: serves
- Spring Boot Application → Scoring Controller: serves
- Spring Boot Application → Loan Controller: serves
- Spring Boot Application → Health Controller: serves
- Applicant Controller → Applicant Service: CRUD requests
- Applicant Service → Applicant: manages
- Applicant Service → Applicant Repository: persists via
- Applicant Repository → PostgreSQL: stores
- Scoring Controller → Scoring Service: score requests
- Scoring Service → Applicant Service: loads applicant
- Scoring Service → Credit Score: produces
- Loan Controller → Loan Decision Service: evaluation requests
- Loan Decision Service → Applicant Service: uses applicant data
- Loan Decision Service → Scoring Service: uses score
- Loan Decision Service → Loan Decision: produces
- Application Configuration → Spring Boot Application: configures
- Maven Build → Application Image: packages
- Application Image → Container Deployment: runs in
- Container Deployment → Spring Boot Application: deploys
- Container Deployment → PostgreSQL: provisions
