A comprehensive, modular Full-Stack application designed for managing human resources, employee life cycles, and organizational workflows. This system is built with a focus on security, scalability, and real-time updates.
- 📖 Project Overview
- 📂 Repository Structure
- 🛠 Tech Stack
- 🚀 Getting Started
- ✨ Features
- 🤝 Contribution & Support
- 📬 Contact
The system provides a robust platform for administrators to manage employees, track attendance, handle salary calculations, and monitor system-wide activity through a sleek Dashboard.
EMS-SYSTEM (Root)
│
├── 📂 emp-backend # The core logic powered by Java 25 and Spring Boot
│ ├── 📂 src
│ │ └── 📂 main
│ │ └── 📂 resources
│ │ └── 📄 data.sql # Automatically seeds the database with initial data
│ └── 📄 Dockerfile
│
├── 📂 Emp-frontend # The user interface built with Angular 20
│ ├── 📂 src
│ └── 📄 Dockerfile
│
└── 📄 docker-compose.yml # Orchestration file to spin up the entire stack
Java 25 & Spring Boot 4.0.1
PostgreSQL
Spring Security & JWT (Stateless Auth)
Spring Data JPA & Hibernate
WebSocket & STOMP (Real-time events)
Lombok
Maven (Dependency Management)
Angular 20
TypeScript
RxJS
Angular Material
SCSS
Nginx (Production Serving)
Prerequisites Docker and Docker Compose installed on your machine.
Git installed.
Execution Steps Clone the repository:
git clone https://github.com/Yosefnago/ems-system.git
cd ems-system
Launch the System: Run the following command in the root directory:
docker compose up --build
Frontend: Open http://localhost in your browser.
- Stateless JWT Architecture: Implemented a secure authentication flow where the server issues a JSON Web Token upon successful login to manage session-less security.
- Custom @CurrentUser Annotation: Developed a custom Spring Security annotation to inject the authenticated User entity directly into controller methods, enhancing code maintainability.
- WebSocket Security: Integrated JWT validation into the STOMP handshake, ensuring real-time status updates are restricted to authorized sessions.
- Full CRUD Operations: Comprehensive management of employee records including personal profiles, department assignments, and contact details.
- Soft Delete (Archiving): Implemented an archiving system instead of permanent deletion. This preserves historical data for audit compliance while removing records from active views.
- Data Validation: Server-side constraints prevent duplicate personal IDs and email addresses, maintaining database consistency.
- Live Statistics: Aggregated data visualization providing a distribution of employees by department and employment status.
- Automated Reminders: Logic-driven alerts for upcoming employee birthdays and organizational events.
- Activity Stream: A real-time feed displaying the most recent system modifications and administrative actions.
- Action Tracking: Every administrative operation, such as adding or updating employee data, is captured within a dedicated audit log.
- Log Metadata: Each entry records the acting user, the specific action type (ADD, UPDATE, ARCHIVE), and a precise timestamp for accountability.
- Payroll Logic: Supports complex financial calculations including hourly rates, base salaries, and overtime compensation.
- Social Benefits: Integrated calculations for pension contributions and bonuses to provide a full overview of labor costs.
- Report Generation: Data structures are optimized for the generation of salary slips and monthly payroll summaries.
- Status Monitoring: Live monitoring of server health and event triggers via the /server-status endpoint.
- Reduced Latency: Utilizes STOMP protocol to push instant updates from the backend to the Angular frontend, eliminating the need for client-side polling.
Contributions are welcome! If you want to contribute:
Fork the Project.
Create your Feature Branch (git checkout -b feature/AmazingFeature).
Commit your Changes (git commit -m 'Add some AmazingFeature').
Push to the Branch (git push origin feature/AmazingFeature).
Open a Pull Request.
Found a bug? If you encounter any issues or have suggestions for improvements, please feel free to open an Issue on the GitHub repository.
📬 Contact Developed by Yosef Nago * GitHub: github.com/Yosefnago
Email: yosinago5@gmail.com