TalentWorld Backend Application is a scalable and production-ready RESTful API designed to manage job postings and application processes.
This project provides a complete backend solution for a talent-job matching platform, including authentication, authorization, caching, rate limiting, and testing.
- 👤 User management
- 🧑 Talent profile management
- 🏢 Job posting system
- 📩 Job application system
- 🔐 JWT-based authentication
- 🛡️ Role-based authorization (ADMIN, RECRUITER, TALENT, USER)
- ⚡ Redis caching (performance optimization)
- 🚦 Rate limiting (request control & protection)
- 📄 Pagination support (scalable data handling)
- 🧪 Unit & Integration Testing
- 📜 Centralized logging
- ❗ Global exception handling
- ✅ Request validation (
@Valid) - 🔄 DTO-based architecture
- Java 21
- Spring Boot
- Spring Security
- Spring Data JPA
- MySQL
- Redis
- Lombok
- JWT (io.jsonwebtoken)
- Spring Boot Actuator
- JUnit & Mockito
- Spring Boot Test
- SLF4J / Logback
The project follows a Layered Architecture:
Controller → Service → Repository → Database
Additional components:
- Security Layer (JWT + Filters)
- Cache Layer (Redis)
- Rate Limiting Layer
- Exception Handling Layer
| Role | Permissions |
|---|---|
| ADMIN | Manage users, job posts, applications |
| RECRUITER | Manage job posts, view applications |
| TALENT | Apply to jobs, view own applications |
| USER | Manage own profile |
Register a new user
Login (returns JWT)
Logout user
| Method | Endpoint | Authorization | Description |
|---|---|---|---|
| GET | / |
ADMIN | Get all users |
| GET | /getByEmail/{email} |
ADMIN | Get user by email |
| GET | /activeUsers |
ADMIN | Get active users |
| GET | /inActiveUsers |
ADMIN | Get inactive users |
| DELETE | /{id} |
ADMIN | Delete user |
| PATCH | /updateUser/{userId} |
ADMIN / Owner | Update user |
| PATCH | /changeEmailById/{userId} |
ADMIN / Owner | Change email |
| GET | /me |
Authenticated | Get current user |
| Method | Endpoint | Authorization | Description |
|---|---|---|---|
| GET | / |
USER | Get own profile |
| POST | / |
USER | Create profile |
| PATCH | / |
USER | Update profile |
| Method | Endpoint | Authorization | Description |
|---|---|---|---|
| POST | / |
RECRUITER | Create job post |
| GET | / |
Public | Get all job posts |
| GET | /byId/{id} |
Public | Get job post by ID |
| PATCH | /{id} |
RECRUITER | Update job post |
| DELETE | /{id} |
RECRUITER / ADMIN | Delete job post |
| Method | Endpoint | Authorization | Description |
|---|---|---|---|
| POST | /job-posts/{jobPostId}/apply |
TALENT | Apply to job |
| GET | /job-posts/{jobPostId} |
RECRUITER / ADMIN | Get applications |
| GET | /my |
TALENT | Get my applications |
| PATCH | /{applicationId}/status |
RECRUITER / ADMIN | Update status |
All list endpoints support pagination:
GET /api/jobPost?page=0&size=10&sort=createdAt,desc
Rate limiting is applied to protect the API from excessive requests.
Example:
100 requests / minute per IP
(Customizable via configuration)
Redis is used for:
- Frequently accessed data
- Reducing database load
- Improving response time
- Service layer tested with JUnit & Mockito
- Full flow tested with Spring Boot Test
Centralized logging using:
- SLF4J
- Logback
Includes:
- Request/Response logs
- Error logs
- Security logs
git clone https://github.com/your-username/talentworld-backend.git
cd talentworld-backendCREATE DATABASE talentworld;spring.datasource.url=jdbc:mysql://localhost:3306/talentworld
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.jpa.hibernate.ddl-auto=updatemvn clean install
mvn spring-boot:runApp runs at:
http://localhost:8081
Include JWT token in requests:
Authorization: Bearer <token>