# arup23168-cyber/ems_springboot architecture

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

- Interactive diagram: https://gitdiagram.com/arup23168-cyber/ems_springboot
- Repository: https://github.com/arup23168-cyber/ems_springboot

## Overview

EMS is a Spring Boot REST API for employee, department, leave, file-upload, and CSV-import workflows. Users call the REST controllers; those delegate domain operations to services, which map DTOs and use JPA repositories to persist entities in MySQL. Separate branches handle leave decisions, department assignment, and batch import. The README documents Redis caching, basic authentication, auditing, and request logging. Some implementation files were not excerpted, so uncertain internal links are omitted; documented capabilities remain represented.

Main entry points: [`src/main/java/com/tyss/EMS/service/EmployeeServiceImpl.java`](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/service/EmployeeServiceImpl.java) (Employee operations), [`src/main/java/com/tyss/EMS/entity/Employee.java`](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/entity/Employee.java) (JPA domain entities), [`src/main/java/com/tyss/EMS/service/LeaveServiceImpl.java`](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/service/LeaveServiceImpl.java) (Leave operations), [`src/main/java/com/tyss/EMS/repository/EmployeeRepository.java`](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/repository/EmployeeRepository.java) (Employee repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_employee_api["Employee APIs"]
  node_employee_v2_api["Employee v2 API"]
  node_department_api["Department API"]
  node_leave_api["Leave API"]
  node_batch_api["Import API"]
end

subgraph group_domain["Domain Services"]
  node_employee_service["Employee operations"]
  node_department_service["Department operations"]
  node_leave_service["Leave operations"]
  node_batch_service["CSV import"]
  node_employee_mapper["Employee mapping"]
  node_leave_mapper["Leave mapping<br/>[LeaveMapper.java]"]
end

subgraph group_data["Persistence"]
  node_employee_repo["Employee repository"]
  node_department_repo["Department repository"]
  node_leave_repo["Leave repository"]
  node_file_repo["Employee file repository"]
  node_entities["JPA domain entities<br/>[Employee.java]"]
  node_mysql[("MySQL")]
end

subgraph group_platform["Platform Integrations"]
  node_batch_config["Batch job config"]
  node_redis_config["Redis caching config<br/>[RedisConfig.java]"]
  node_redis[("Redis")]
  node_logging["Request logging<br/>[LoggingFilter.java]"]
  node_auditing["Entity auditing"]
end

node_client(("API client"))

node_client -->|"calls"| node_employee_api
node_client -->|"calls"| node_employee_v2_api
node_client -->|"calls"| node_department_api
node_client -->|"calls"| node_leave_api
node_client -->|"triggers"| node_batch_api
node_employee_api -->|"delegates to"| node_employee_service
node_employee_v2_api -->|"delegates to"| node_employee_service
node_department_api -->|"delegates to"| node_department_service
node_leave_api -->|"delegates to"| node_leave_service
node_batch_api -->|"triggers"| node_batch_service
node_employee_service -->|"queries"| node_employee_repo
node_employee_service -->|"queries"| node_department_repo
node_employee_service -->|"persists files"| node_file_repo
node_employee_service -->|"maps DTOs"| node_employee_mapper
node_leave_service -->|"loads employee"| node_employee_repo
node_leave_service -->|"queries"| node_leave_repo
node_leave_service -->|"maps DTOs"| node_leave_mapper
node_employee_repo -->|"stores"| node_entities
node_department_repo -.->|"stores"| node_entities
node_leave_repo -->|"stores"| node_entities
node_file_repo -->|"stores"| node_entities
node_entities -->|"persisted in"| node_mysql
node_batch_config -.->|"configures job"| node_batch_service
node_employee_service -.->|"uses caching"| node_redis_config
node_redis_config -->|"connects to"| node_redis
node_client -->|"requests logged"| node_logging
node_auditing -->|"audits changes"| node_entities

click node_employee_api "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/controller/EmployeeControllerV1.java"
click node_employee_v2_api "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/controller/EmployeeControllerV2.java"
click node_department_api "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/controller/DepartmentController.java"
click node_leave_api "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/controller/LeaveController.java"
click node_batch_api "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/controller/EmployeeBatchController.java"
click node_employee_service "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/service/EmployeeServiceImpl.java"
click node_department_service "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/service/DepartmentServiceImpl.java"
click node_leave_service "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/service/LeaveServiceImpl.java"
click node_batch_service "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/service/EmployeeBatchService.java"
click node_employee_mapper "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/util/EmployeeMapper.java"
click node_leave_mapper "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/util/LeaveMapper.java"
click node_employee_repo "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/repository/EmployeeRepository.java"
click node_department_repo "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/repository/DepartmentRepository.java"
click node_leave_repo "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/repository/LeaveRepository.java"
click node_file_repo "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/repository/EmployeeFileRepository.java"
click node_entities "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/entity/Employee.java"
click node_batch_config "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/config/EmployeeBatchConfig.java"
click node_redis_config "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/config/RedisConfig.java"
click node_logging "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/filter/LoggingFilter.java"
click node_auditing "https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/config/AuditorAwareImpl.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_employee_api,node_employee_v2_api,node_department_api,node_leave_api,node_batch_api,node_client toneBlue
class node_employee_service,node_department_service,node_leave_service,node_batch_service,node_employee_mapper,node_leave_mapper toneAmber
class node_employee_repo,node_department_repo,node_leave_repo,node_file_repo,node_entities,node_mysql toneMint
class node_batch_config,node_redis_config,node_redis,node_logging,node_auditing toneRose
```

## Components

### REST API

- [Employee APIs](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/controller/EmployeeControllerV1.java): `src/main/java/com/tyss/EMS/controller/EmployeeControllerV1.java`
- [Employee v2 API](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/controller/EmployeeControllerV2.java): `src/main/java/com/tyss/EMS/controller/EmployeeControllerV2.java`
- [Department API](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/controller/DepartmentController.java): `src/main/java/com/tyss/EMS/controller/DepartmentController.java`
- [Leave API](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/controller/LeaveController.java): `src/main/java/com/tyss/EMS/controller/LeaveController.java`
- [Import API](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/controller/EmployeeBatchController.java): `src/main/java/com/tyss/EMS/controller/EmployeeBatchController.java`

### Domain Services

- [Employee operations](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/service/EmployeeServiceImpl.java): `src/main/java/com/tyss/EMS/service/EmployeeServiceImpl.java`
- [Department operations](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/service/DepartmentServiceImpl.java): `src/main/java/com/tyss/EMS/service/DepartmentServiceImpl.java`
- [Leave operations](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/service/LeaveServiceImpl.java): `src/main/java/com/tyss/EMS/service/LeaveServiceImpl.java`
- [CSV import](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/service/EmployeeBatchService.java): `src/main/java/com/tyss/EMS/service/EmployeeBatchService.java`
- [Employee mapping](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/util/EmployeeMapper.java): `src/main/java/com/tyss/EMS/util/EmployeeMapper.java`
- [Leave mapping](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/util/LeaveMapper.java): `src/main/java/com/tyss/EMS/util/LeaveMapper.java`

### Persistence

- [Employee repository](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/repository/EmployeeRepository.java): `src/main/java/com/tyss/EMS/repository/EmployeeRepository.java`
- [Department repository](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/repository/DepartmentRepository.java): `src/main/java/com/tyss/EMS/repository/DepartmentRepository.java`
- [Leave repository](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/repository/LeaveRepository.java): `src/main/java/com/tyss/EMS/repository/LeaveRepository.java`
- [Employee file repository](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/repository/EmployeeFileRepository.java): `src/main/java/com/tyss/EMS/repository/EmployeeFileRepository.java`
- [JPA domain entities](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/entity/Employee.java): `src/main/java/com/tyss/EMS/entity/Employee.java`
- **MySQL**

### Platform Integrations

- [Batch job config](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/config/EmployeeBatchConfig.java): `src/main/java/com/tyss/EMS/config/EmployeeBatchConfig.java`
- [Redis caching config](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/config/RedisConfig.java): `src/main/java/com/tyss/EMS/config/RedisConfig.java`
- **Redis**
- [Request logging](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/filter/LoggingFilter.java): `src/main/java/com/tyss/EMS/filter/LoggingFilter.java`
- [Entity auditing](https://github.com/arup23168-cyber/ems_springboot/blob/main/src/main/java/com/tyss/EMS/config/AuditorAwareImpl.java): `src/main/java/com/tyss/EMS/config/AuditorAwareImpl.java`

### Other components

- **API client**

## Connections

- API client → Employee APIs: calls (evidence: `README.md`)
- API client → Employee v2 API: calls (evidence: `README.md`)
- API client → Department API: calls (evidence: `README.md`)
- API client → Leave API: calls (evidence: `README.md`)
- API client → Import API: triggers (evidence: `README.md`)
- Employee APIs → Employee operations: delegates to (evidence: `src/main/java/com/tyss/EMS/controller/EmployeeControllerV1.java`)
- Employee v2 API → Employee operations: delegates to (evidence: `src/main/java/com/tyss/EMS/controller/EmployeeControllerV2.java`)
- Department API → Department operations: delegates to (evidence: `src/main/java/com/tyss/EMS/controller/DepartmentController.java`)
- Leave API → Leave operations: delegates to (evidence: `src/main/java/com/tyss/EMS/controller/LeaveController.java`)
- Import API → CSV import: triggers (evidence: `src/main/java/com/tyss/EMS/controller/EmployeeBatchController.java`)
- Employee operations → Employee repository: queries (evidence: `src/main/java/com/tyss/EMS/service/EmployeeServiceImpl.java`)
- Employee operations → Department repository: queries (evidence: `src/main/java/com/tyss/EMS/service/EmployeeServiceImpl.java`)
- Employee operations → Employee file repository: persists files (evidence: `src/main/java/com/tyss/EMS/service/EmployeeServiceImpl.java`)
- Employee operations → Employee mapping: maps DTOs (evidence: `src/main/java/com/tyss/EMS/service/EmployeeServiceImpl.java`)
- Leave operations → Employee repository: loads employee (evidence: `src/main/java/com/tyss/EMS/service/LeaveServiceImpl.java`)
- Leave operations → Leave repository: queries (evidence: `src/main/java/com/tyss/EMS/service/LeaveServiceImpl.java`)
- Leave operations → Leave mapping: maps DTOs (evidence: `src/main/java/com/tyss/EMS/service/LeaveServiceImpl.java`)
- Employee repository → JPA domain entities: stores (evidence: `src/main/java/com/tyss/EMS/repository/EmployeeRepository.java`)
- Department repository → JPA domain entities: stores
- Leave repository → JPA domain entities: stores (evidence: `src/main/java/com/tyss/EMS/repository/LeaveRepository.java`)
- Employee file repository → JPA domain entities: stores (evidence: `src/main/java/com/tyss/EMS/repository/EmployeeFileRepository.java`)
- JPA domain entities → MySQL: persisted in (evidence: `README.md`)
- Batch job config → CSV import: configures job
- Employee operations → Redis caching config: uses caching (evidence: `README.md`)
- Redis caching config → Redis: connects to (evidence: `README.md`)
- API client → Request logging: requests logged (evidence: `README.md`)
- Entity auditing → JPA domain entities: audits changes (evidence: `README.md`)
