# tfk0120/cmacgm_inter_assignment architecture

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

## Overview

This Spring Boot application exposes a customer-list REST API with customer CRUD and paging, plus user registration and login that return JWTs. The customer path runs from HTTP controller through service logic to JPA persistence; authentication runs through user services and issues tokens. The tree names security configuration and JWT filter components, but their source was not sampled, so their runtime wiring is omitted.

Main entry points: [`src/main/java/com/customerlist/api/controller/UserController.java`](https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/controller/UserController.java) (Account endpoints), [`src/main/java/com/customerlist/api/service/UserServiceImpl.java`](https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/service/UserServiceImpl.java) (Account operations), [`src/main/java/com/customerlist/api/controller/CustomerController.java`](https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/controller/CustomerController.java) (Customer endpoints), [`src/main/java/com/customerlist/api/service/CustomerServiceImpl.java`](https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/service/CustomerServiceImpl.java) (Customer operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_customer["Customer API"]
  node_customer_controller["Customer endpoints"]
  node_customer_service["Customer operations"]
  node_customer_model["Customer input<br/>[Customer.java]"]
end

subgraph group_accounts["Accounts and JWT"]
  node_user_controller["Account endpoints"]
  node_user_service["Account operations"]
  node_user_model["Account input<br/>[UserModel.java]"]
  node_user_auth["Auth response<br/>[UserAuth.java]"]
  node_jwt_util["JWT token utility<br/>[JwtTokenUtil.java]"]
  node_jwt_filter["JWT request filter"]
  node_jwt_user_details["JWT user lookup"]
  node_security_config["Web security config"]
end

subgraph group_persistence["JPA persistence"]
  node_customer_entity["Customer record"]
  node_customer_repository["Customer repository"]
  node_database[("Relational database")]
  node_user_entity["User record<br/>[UserEntity.java]"]
  node_user_repository["User repository"]
end

node_client(("API client"))

node_client -->|"sends requests"| node_customer_controller
node_customer_controller -->|"calls"| node_customer_service
node_customer_controller -->|"accepts input"| node_customer_model
node_customer_service -->|"queries and saves"| node_customer_repository
node_customer_repository -->|"persists records"| node_database
node_customer_service -->|"maps input"| node_customer_entity
node_client -->|"sends requests"| node_user_controller
node_user_controller -->|"calls"| node_user_service
node_user_controller -->|"accepts input"| node_user_model
node_user_controller -->|"generates token"| node_jwt_util
node_user_controller -->|"returns auth data"| node_user_auth
node_user_service -->|"queries and saves"| node_user_repository
node_user_repository -->|"persists records"| node_database
node_user_service -->|"handles account"| node_user_entity
node_jwt_user_details -->|"loads account"| node_user_service

click node_customer_controller "https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/controller/CustomerController.java"
click node_customer_service "https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/service/CustomerServiceImpl.java"
click node_customer_model "https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/model/Customer.java"
click node_customer_entity "https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/entity/CustomerEntity.java"
click node_customer_repository "https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/repository/CustomerRepository.java"
click node_user_controller "https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/controller/UserController.java"
click node_user_service "https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/service/UserServiceImpl.java"
click node_user_model "https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/model/UserModel.java"
click node_user_auth "https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/model/UserAuth.java"
click node_user_entity "https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/entity/UserEntity.java"
click node_user_repository "https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/repository/UserRepository.java"
click node_jwt_util "https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/security/jwt/JwtTokenUtil.java"
click node_jwt_filter "https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/security/jwt/JwtRequestFilter.java"
click node_jwt_user_details "https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/security/jwt/JwtUserDetailsService.java"
click node_security_config "https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/security/WebSecurityConfig.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_customer_service,node_customer_model,node_client toneBlue
class node_user_controller,node_user_service,node_user_model,node_user_auth,node_jwt_util,node_jwt_filter,node_jwt_user_details,node_security_config toneAmber
class node_customer_entity,node_customer_repository,node_database,node_user_entity,node_user_repository toneMint
```

## Components

### Customer API

- [Customer endpoints](https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/controller/CustomerController.java): `src/main/java/com/customerlist/api/controller/CustomerController.java`
- [Customer operations](https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/service/CustomerServiceImpl.java): `src/main/java/com/customerlist/api/service/CustomerServiceImpl.java`
- [Customer input](https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/model/Customer.java): `src/main/java/com/customerlist/api/model/Customer.java`

### Accounts and JWT

- [Account endpoints](https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/controller/UserController.java): `src/main/java/com/customerlist/api/controller/UserController.java`
- [Account operations](https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/service/UserServiceImpl.java): `src/main/java/com/customerlist/api/service/UserServiceImpl.java`
- [Account input](https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/model/UserModel.java): `src/main/java/com/customerlist/api/model/UserModel.java`
- [Auth response](https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/model/UserAuth.java): `src/main/java/com/customerlist/api/model/UserAuth.java`
- [JWT token utility](https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/security/jwt/JwtTokenUtil.java): `src/main/java/com/customerlist/api/security/jwt/JwtTokenUtil.java`
- [JWT request filter](https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/security/jwt/JwtRequestFilter.java): `src/main/java/com/customerlist/api/security/jwt/JwtRequestFilter.java`
- [JWT user lookup](https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/security/jwt/JwtUserDetailsService.java): `src/main/java/com/customerlist/api/security/jwt/JwtUserDetailsService.java`
- [Web security config](https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/security/WebSecurityConfig.java): `src/main/java/com/customerlist/api/security/WebSecurityConfig.java`

### JPA persistence

- [Customer record](https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/entity/CustomerEntity.java): `src/main/java/com/customerlist/api/entity/CustomerEntity.java`
- [Customer repository](https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/repository/CustomerRepository.java): `src/main/java/com/customerlist/api/repository/CustomerRepository.java`
- **Relational database**
- [User record](https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/entity/UserEntity.java): `src/main/java/com/customerlist/api/entity/UserEntity.java`
- [User repository](https://github.com/tfk0120/cmacgm_inter_assignment/blob/master/src/main/java/com/customerlist/api/repository/UserRepository.java): `src/main/java/com/customerlist/api/repository/UserRepository.java`

### Other components

- **API client**

## Connections

- API client → Customer endpoints: sends requests
- Customer endpoints → Customer operations: calls
- Customer endpoints → Customer input: accepts input
- Customer operations → Customer repository: queries and saves
- Customer repository → Relational database: persists records
- Customer operations → Customer record: maps input
- API client → Account endpoints: sends requests
- Account endpoints → Account operations: calls
- Account endpoints → Account input: accepts input
- Account endpoints → JWT token utility: generates token
- Account endpoints → Auth response: returns auth data
- Account operations → User repository: queries and saves
- User repository → Relational database: persists records
- Account operations → User record: handles account
- JWT user lookup → Account operations: loads account
