# sohambyte/employeeleavemanagement architecture

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

- Interactive diagram: https://gitdiagram.com/sohambyte/employeeleavemanagement
- Repository: https://github.com/sohambyte/employeeleavemanagement

## Overview

Employee Leave Management is a full-stack application for employee leave requests and administrator review. Employees register or log in, submit and manage their own pending requests, and view request history; administrators review, edit, approve or reject requests and manage employees. The React routes call Spring REST controllers through the Axios API module, while services enforce business rules and use JPA repositories for persistence. README documents JWT authentication and MySQL; sampled service and controller code confirms leave rules and endpoint delegation, but frontend page-to-endpoint details and some security wiring are not sampled.

Main entry points: [`frontend/src/api.js`](https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/api.js) (Axios API client), [`frontend/src/App.jsx`](https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/App.jsx) (Route application), [`backend/src/main/java/com/leavemanagement/repository/UserRepository.java`](https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/repository/UserRepository.java) (User repository), [`backend/src/main/java/com/leavemanagement/service/LeaveService.java`](https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/service/LeaveService.java) (Leave rules)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web application"]
  node_app["Route application<br/>[App.jsx]"]
  node_protected["Role guards<br/>[ProtectedRoute.jsx]"]
  node_authpages["Login and register<br/>[Login.jsx]"]
  node_employeeui["Employee leave UI<br/>[ApplyLeave.jsx]"]
  node_dashboard["Employee dashboard<br/>[Dashboard.jsx]"]
  node_mydashboard["Leave history<br/>[MyLeaves.jsx]"]
  node_adminui["Admin leave UI<br/>[AdminLeaves.jsx]"]
  node_adminemployeeui["Employee administration<br/>[AdminEmployees.jsx]"]
  node_api["Axios API client<br/>[api.js]"]
end

subgraph group_backend["REST and security"]
  node_authcontroller["Authentication endpoints"]
  node_leavecontroller["Employee leave endpoints"]
  node_adminleavecontroller["Admin leave endpoints"]
  node_adminemployeecontroller["Admin employee endpoints"]
  node_jwtfilter["JWT request filter<br/>[JwtFilter.java]"]
  node_jwtutil["JWT utilities<br/>[JwtUtil.java]"]
  node_securityconfig["Security configuration"]
  node_userdetails["User lookup"]
end

subgraph group_domain["Leave workflows"]
  node_authservice["Authentication service<br/>[AuthService.java]"]
  node_leaveservice["Leave rules<br/>[LeaveService.java]"]
  node_employeeservice["Employee management"]
end

subgraph group_persistence["Persistence"]
  node_userrepo["User repository"]
  node_leaverepo["Leave repository"]
  node_users[("User records<br/>[User.java]")]
  node_leaves[("Leave records<br/>[LeaveRequest.java]")]
end

node_employee(("Employee"))
node_admin(("Administrator"))
node_mysql[("MySQL database")]

node_employee -->|"uses"| node_app
node_admin -->|"uses"| node_app
node_app -->|"guards routes"| node_protected
node_app -->|"routes"| node_authpages
node_app -->|"routes"| node_employeeui
node_app -->|"routes"| node_dashboard
node_app -->|"routes"| node_mydashboard
node_app -->|"routes"| node_adminui
node_app -->|"routes"| node_adminemployeeui
node_authpages -->|"sends requests"| node_api
node_employeeui -->|"sends requests"| node_api
node_dashboard -->|"sends requests"| node_api
node_mydashboard -->|"sends requests"| node_api
node_adminui -->|"sends requests"| node_api
node_adminemployeeui -->|"sends requests"| node_api
node_api -->|"HTTP requests"| node_authcontroller
node_api -->|"HTTP requests"| node_leavecontroller
node_api -->|"HTTP requests"| node_adminleavecontroller
node_api -->|"HTTP requests"| node_adminemployeecontroller
node_authcontroller -->|"delegates"| node_authservice
node_leavecontroller -->|"delegates"| node_leaveservice
node_adminleavecontroller -->|"delegates"| node_leaveservice
node_adminemployeecontroller -->|"delegates"| node_employeeservice
node_authservice -->|"reads and saves"| node_userrepo
node_authservice -->|"creates token"| node_jwtutil
node_leaveservice -->|"looks up users"| node_userrepo
node_leaveservice -->|"reads and writes"| node_leaverepo
node_employeeservice -->|"reads and deletes"| node_userrepo
node_employeeservice -->|"deletes requests"| node_leaverepo
node_jwtfilter -->|"validates token"| node_jwtutil
node_jwtfilter -->|"loads identity"| node_userdetails
node_userdetails -->|"looks up user"| node_userrepo
node_securityconfig -->|"configures filter"| node_jwtfilter
node_userrepo -->|"persists"| node_users
node_leaverepo -->|"persists"| node_leaves
node_users -->|"stored in"| node_mysql
node_leaves -->|"stored in"| node_mysql

click node_app "https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/App.jsx"
click node_protected "https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/components/ProtectedRoute.jsx"
click node_authpages "https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/pages/Login.jsx"
click node_employeeui "https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/pages/ApplyLeave.jsx"
click node_dashboard "https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/pages/Dashboard.jsx"
click node_mydashboard "https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/pages/MyLeaves.jsx"
click node_adminui "https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/pages/AdminLeaves.jsx"
click node_adminemployeeui "https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/pages/AdminEmployees.jsx"
click node_api "https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/api.js"
click node_authcontroller "https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/controller/AuthController.java"
click node_leavecontroller "https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/controller/LeaveController.java"
click node_adminleavecontroller "https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/controller/AdminLeaveController.java"
click node_adminemployeecontroller "https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/controller/AdminEmployeeController.java"
click node_authservice "https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/service/AuthService.java"
click node_leaveservice "https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/service/LeaveService.java"
click node_employeeservice "https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/service/EmployeeService.java"
click node_jwtfilter "https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/security/JwtFilter.java"
click node_jwtutil "https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/security/JwtUtil.java"
click node_securityconfig "https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/security/SecurityConfig.java"
click node_userdetails "https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/security/UserDetailsServiceImpl.java"
click node_userrepo "https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/repository/UserRepository.java"
click node_leaverepo "https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/repository/LeaveRequestRepository.java"
click node_users "https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/entity/User.java"
click node_leaves "https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/entity/LeaveRequest.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_app,node_protected,node_authpages,node_employeeui,node_dashboard,node_mydashboard,node_adminui,node_adminemployeeui,node_api toneBlue
class node_authcontroller,node_leavecontroller,node_adminleavecontroller,node_adminemployeecontroller,node_jwtfilter,node_jwtutil,node_securityconfig,node_userdetails,node_mysql toneAmber
class node_authservice,node_leaveservice,node_employeeservice toneMint
class node_userrepo,node_leaverepo,node_users,node_leaves toneRose
class node_employee,node_admin toneIndigo
```

## Components

### Web application

- [Route application](https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Role guards](https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/components/ProtectedRoute.jsx): `frontend/src/components/ProtectedRoute.jsx`
- [Login and register](https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/pages/Login.jsx): `frontend/src/pages/Login.jsx`
- [Employee leave UI](https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/pages/ApplyLeave.jsx): `frontend/src/pages/ApplyLeave.jsx`
- [Employee dashboard](https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/pages/Dashboard.jsx): `frontend/src/pages/Dashboard.jsx`
- [Leave history](https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/pages/MyLeaves.jsx): `frontend/src/pages/MyLeaves.jsx`
- [Admin leave UI](https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/pages/AdminLeaves.jsx): `frontend/src/pages/AdminLeaves.jsx`
- [Employee administration](https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/pages/AdminEmployees.jsx): `frontend/src/pages/AdminEmployees.jsx`
- [Axios API client](https://github.com/sohambyte/employeeleavemanagement/blob/dev/frontend/src/api.js): `frontend/src/api.js`

### REST and security

- [Authentication endpoints](https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/controller/AuthController.java): `backend/src/main/java/com/leavemanagement/controller/AuthController.java`
- [Employee leave endpoints](https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/controller/LeaveController.java): `backend/src/main/java/com/leavemanagement/controller/LeaveController.java`
- [Admin leave endpoints](https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/controller/AdminLeaveController.java): `backend/src/main/java/com/leavemanagement/controller/AdminLeaveController.java`
- [Admin employee endpoints](https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/controller/AdminEmployeeController.java): `backend/src/main/java/com/leavemanagement/controller/AdminEmployeeController.java`
- [JWT request filter](https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/security/JwtFilter.java): `backend/src/main/java/com/leavemanagement/security/JwtFilter.java`
- [JWT utilities](https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/security/JwtUtil.java): `backend/src/main/java/com/leavemanagement/security/JwtUtil.java`
- [Security configuration](https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/security/SecurityConfig.java): `backend/src/main/java/com/leavemanagement/security/SecurityConfig.java`
- [User lookup](https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/security/UserDetailsServiceImpl.java): `backend/src/main/java/com/leavemanagement/security/UserDetailsServiceImpl.java`

### Leave workflows

- [Authentication service](https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/service/AuthService.java): `backend/src/main/java/com/leavemanagement/service/AuthService.java`
- [Leave rules](https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/service/LeaveService.java): `backend/src/main/java/com/leavemanagement/service/LeaveService.java`
- [Employee management](https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/service/EmployeeService.java): `backend/src/main/java/com/leavemanagement/service/EmployeeService.java`

### Persistence

- [User repository](https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/repository/UserRepository.java): `backend/src/main/java/com/leavemanagement/repository/UserRepository.java`
- [Leave repository](https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/repository/LeaveRequestRepository.java): `backend/src/main/java/com/leavemanagement/repository/LeaveRequestRepository.java`
- [User records](https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/entity/User.java): `backend/src/main/java/com/leavemanagement/entity/User.java`
- [Leave records](https://github.com/sohambyte/employeeleavemanagement/blob/dev/backend/src/main/java/com/leavemanagement/entity/LeaveRequest.java): `backend/src/main/java/com/leavemanagement/entity/LeaveRequest.java`

### Other components

- **Employee**
- **Administrator**
- **MySQL database**

## Connections

- Employee → Route application: uses
- Administrator → Route application: uses
- Route application → Role guards: guards routes
- Route application → Login and register: routes
- Route application → Employee leave UI: routes
- Route application → Employee dashboard: routes
- Route application → Leave history: routes
- Route application → Admin leave UI: routes
- Route application → Employee administration: routes
- Login and register → Axios API client: sends requests
- Employee leave UI → Axios API client: sends requests
- Employee dashboard → Axios API client: sends requests
- Leave history → Axios API client: sends requests
- Admin leave UI → Axios API client: sends requests
- Employee administration → Axios API client: sends requests
- Axios API client → Authentication endpoints: HTTP requests
- Axios API client → Employee leave endpoints: HTTP requests
- Axios API client → Admin leave endpoints: HTTP requests
- Axios API client → Admin employee endpoints: HTTP requests
- Authentication endpoints → Authentication service: delegates
- Employee leave endpoints → Leave rules: delegates
- Admin leave endpoints → Leave rules: delegates
- Admin employee endpoints → Employee management: delegates
- Authentication service → User repository: reads and saves
- Authentication service → JWT utilities: creates token
- Leave rules → User repository: looks up users
- Leave rules → Leave repository: reads and writes
- Employee management → User repository: reads and deletes
- Employee management → Leave repository: deletes requests
- JWT request filter → JWT utilities: validates token
- JWT request filter → User lookup: loads identity
- User lookup → User repository: looks up user
- Security configuration → JWT request filter: configures filter
- User repository → User records: persists
- Leave repository → Leave records: persists
- User records → MySQL database: stored in
- Leave records → MySQL database: stored in
