# vanthang-lvt/vti_clean_architecture architecture

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

- Interactive diagram: https://gitdiagram.com/vanthang-lvt/vti_clean_architecture
- Repository: https://github.com/vanthang-lvt/vti_clean_architecture

## Overview

This is a multi-module Spring Boot customer REST application organized around Clean Architecture/DDD, with a separate JWT authentication module. The customer workflow accepts HTTP requests, delegates CRUD operations through a service implementation to a JPA repository, and returns customer data. Authentication separately issues tokens and filters protected requests. The README documents the database mapping and module roles; unsampled security wiring and startup configuration are represented only where the source index or README supports them.

Main entry points: [`AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtAuthenticationController.java`](https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtAuthenticationController.java) (Token Endpoint), [`Domain/src/main/java/de/jenshardt/multimavendemo/customer/domain/repository/CustomerRepository.java`](https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/Domain/src/main/java/de/jenshardt/multimavendemo/customer/domain/repository/CustomerRepository.java) (Customer Repository), [`AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtRequestFilter.java`](https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtRequestFilter.java) (JWT Request Filter), [`Domain/src/main/java/de/jenshardt/multimavendemo/customer/domain/service/CustomerService.java`](https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/Domain/src/main/java/de/jenshardt/multimavendemo/customer/domain/service/CustomerService.java) (Customer Service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_customer_api["Customer API"]
  node_customer_controller["Customer Controller"]
end

subgraph group_customer_core["Customer Core"]
  node_customer_service_contract["Customer Service"]
  node_customer_service_impl["Customer Service Impl"]
  node_customer_repository["Customer Repository"]
  node_customer_entity["Customer Aggregate<br/>[Customer.java]"]
end

subgraph group_runtime["Application Runtime"]
  node_application["Spring Boot App"]
  node_database_seed["Startup Seed<br/>[LoadDatabase.java]"]
end

subgraph group_authentication["JWT Authentication"]
  node_auth_controller["Token Endpoint"]
  node_auth_request["Login Request<br/>[JwtRequest.java]"]
  node_auth_response["Token Response<br/>[JwtResponse.java]"]
  node_user_details["User Details"]
  node_token_util["JWT Utility<br/>[JwtTokenUtil.java]"]
  node_security_config["Security Config"]
  node_jwt_filter["JWT Request Filter"]
  node_auth_entrypoint["Unauthorized Handler"]
end

node_client(("API Client"))
node_database[("JPA Database")]
node_auth_client(("Auth Client"))

node_client -->|"sends requests"| node_customer_controller
node_customer_controller -->|"calls CRUD"| node_customer_service_contract
node_customer_service_impl -->|"implements"| node_customer_service_contract
node_customer_service_impl -->|"queries and saves"| node_customer_repository
node_customer_repository -->|"maps entities"| node_customer_entity
node_customer_repository -->|"runs persistence"| node_database
node_database_seed -->|"creates sample customers"| node_customer_service_contract
node_auth_client -->|"posts credentials"| node_auth_controller
node_auth_controller -->|"accepts body"| node_auth_request
node_auth_controller -->|"loads user"| node_user_details
node_auth_controller -->|"generates token"| node_token_util
node_auth_controller -->|"returns token"| node_auth_response
node_security_config -->|"registers filter"| node_jwt_filter
node_security_config -->|"configures failures"| node_auth_entrypoint
node_jwt_filter -->|"validates token"| node_token_util
node_jwt_filter -->|"loads user"| node_user_details

click node_customer_controller "https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/Controller/src/main/java/de/jenshardt/multimavendemo/customer/controller/CustomerController.java"
click node_customer_service_contract "https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/Domain/src/main/java/de/jenshardt/multimavendemo/customer/domain/service/CustomerService.java"
click node_customer_service_impl "https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/Service/src/main/java/de/jenshardt/multimavendemo/customer/service/implementation/CustomerServiceImpl.java"
click node_customer_repository "https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/Domain/src/main/java/de/jenshardt/multimavendemo/customer/domain/repository/CustomerRepository.java"
click node_customer_entity "https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/Domain/src/main/java/de/jenshardt/multimavendemo/customer/domain/aggregate/Customer.java"
click node_application "https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/Application/src/main/java/de/jenshardt/multimavendemo/customer/CustomerApplication.java"
click node_database_seed "https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/Application/src/main/java/de/jenshardt/multimavendemo/customer/config/LoadDatabase.java"
click node_auth_controller "https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtAuthenticationController.java"
click node_auth_request "https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtRequest.java"
click node_auth_response "https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtResponse.java"
click node_user_details "https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtUserDetailsService.java"
click node_token_util "https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtTokenUtil.java"
click node_security_config "https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/WebSecurityConfig.java"
click node_jwt_filter "https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtRequestFilter.java"
click node_auth_entrypoint "https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtAuthenticationEntryPoint.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_customer_controller,node_client,node_auth_client toneBlue
class node_customer_service_contract,node_customer_service_impl,node_customer_repository,node_customer_entity,node_database toneAmber
class node_application,node_database_seed toneMint
class node_auth_controller,node_auth_request,node_auth_response,node_user_details,node_token_util,node_security_config,node_jwt_filter,node_auth_entrypoint toneRose
```

## Components

### Customer API

- [Customer Controller](https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/Controller/src/main/java/de/jenshardt/multimavendemo/customer/controller/CustomerController.java): `Controller/src/main/java/de/jenshardt/multimavendemo/customer/controller/CustomerController.java`

### Customer Core

- [Customer Service](https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/Domain/src/main/java/de/jenshardt/multimavendemo/customer/domain/service/CustomerService.java): `Domain/src/main/java/de/jenshardt/multimavendemo/customer/domain/service/CustomerService.java`
- [Customer Service Impl](https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/Service/src/main/java/de/jenshardt/multimavendemo/customer/service/implementation/CustomerServiceImpl.java): `Service/src/main/java/de/jenshardt/multimavendemo/customer/service/implementation/CustomerServiceImpl.java`
- [Customer Repository](https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/Domain/src/main/java/de/jenshardt/multimavendemo/customer/domain/repository/CustomerRepository.java): `Domain/src/main/java/de/jenshardt/multimavendemo/customer/domain/repository/CustomerRepository.java`
- [Customer Aggregate](https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/Domain/src/main/java/de/jenshardt/multimavendemo/customer/domain/aggregate/Customer.java): `Domain/src/main/java/de/jenshardt/multimavendemo/customer/domain/aggregate/Customer.java`

### Application Runtime

- [Spring Boot App](https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/Application/src/main/java/de/jenshardt/multimavendemo/customer/CustomerApplication.java): `Application/src/main/java/de/jenshardt/multimavendemo/customer/CustomerApplication.java`
- [Startup Seed](https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/Application/src/main/java/de/jenshardt/multimavendemo/customer/config/LoadDatabase.java): `Application/src/main/java/de/jenshardt/multimavendemo/customer/config/LoadDatabase.java`

### JWT Authentication

- [Token Endpoint](https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtAuthenticationController.java): `AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtAuthenticationController.java`
- [Login Request](https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtRequest.java): `AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtRequest.java`
- [Token Response](https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtResponse.java): `AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtResponse.java`
- [User Details](https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtUserDetailsService.java): `AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtUserDetailsService.java`
- [JWT Utility](https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtTokenUtil.java): `AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtTokenUtil.java`
- [Security Config](https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/WebSecurityConfig.java): `AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/WebSecurityConfig.java`
- [JWT Request Filter](https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtRequestFilter.java): `AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtRequestFilter.java`
- [Unauthorized Handler](https://github.com/vanthang-lvt/vti_clean_architecture/blob/main/AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtAuthenticationEntryPoint.java): `AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtAuthenticationEntryPoint.java`

### Other components

- **API Client**
- **JPA Database**
- **Auth Client**

## Connections

- API Client → Customer Controller: sends requests (evidence: `README.md`)
- Customer Controller → Customer Service: calls CRUD (evidence: `Controller/src/main/java/de/jenshardt/multimavendemo/customer/controller/CustomerController.java`)
- Customer Service Impl → Customer Service: implements (evidence: `Service/src/main/java/de/jenshardt/multimavendemo/customer/service/implementation/CustomerServiceImpl.java`)
- Customer Service Impl → Customer Repository: queries and saves (evidence: `Service/src/main/java/de/jenshardt/multimavendemo/customer/service/implementation/CustomerServiceImpl.java`)
- Customer Repository → Customer Aggregate: maps entities (evidence: `Domain/src/main/java/de/jenshardt/multimavendemo/customer/domain/repository/CustomerRepository.java`)
- Customer Repository → JPA Database: runs persistence (evidence: `README.md`)
- Startup Seed → Customer Service: creates sample customers (evidence: `Application/src/main/java/de/jenshardt/multimavendemo/customer/config/LoadDatabase.java`)
- Auth Client → Token Endpoint: posts credentials (evidence: `AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtAuthenticationController.java`)
- Token Endpoint → Login Request: accepts body (evidence: `AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtAuthenticationController.java`)
- Token Endpoint → User Details: loads user (evidence: `AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtAuthenticationController.java`)
- Token Endpoint → JWT Utility: generates token (evidence: `AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtAuthenticationController.java`)
- Token Endpoint → Token Response: returns token (evidence: `AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtAuthenticationController.java`)
- Security Config → JWT Request Filter: registers filter (evidence: `AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/WebSecurityConfig.java`)
- Security Config → Unauthorized Handler: configures failures (evidence: `AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/WebSecurityConfig.java`)
- JWT Request Filter → JWT Utility: validates token (evidence: `AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtRequestFilter.java`)
- JWT Request Filter → User Details: loads user (evidence: `AuthServer/src/main/java/de/jenshardt/multimavendemo/authentication/JwtRequestFilter.java`)
