Jobela API is a backend application for a job platform that connects candidates and employers, with an initial focus on the gastronomy and hospitality sector.
The project is designed as a production-style Spring Boot backend application with layered architecture, REST APIs, validation, exception handling, database migrations, Dockerized infrastructure, and automated testing.
Its purpose is both practical and educational: to simulate a real-world backend project and serve as a portfolio project for Java backend development roles.
- Java 21
- Spring Boot 3
- Spring Web
- Spring Data JPA
- Spring Validation
- Spring Security
- PostgreSQL
- Flyway
- H2 (testing)
- Docker
- Docker Compose
- Maven
- MapStruct
- Lombok
- JUnit 5
- Mockito
- MockMvc
- Testcontainers
- User creation and management
- Role-based user structure
- Validation and exception handling
- Candidate profile management
- Candidate personal information
- Candidate-related submodules
- JWT-based authentication
- Stateless Spring Security configuration
- Role-based access control
- Custom authentication entry point
- Custom access denied handler
- Protected endpoints for candidates, employers and admins
- Skills
- Languages
- Education
- Certifications
- Documents
- Work Experience
- Preferences
- Work Authorization
- Location Preferences
- Employer/admin access to public candidate profiles
- Pagination and sorting
- Filtering by:
- country
- city
- search keyword
- skill
- language
- open-to-work status
- target position
- language level
- work authorization
- sponsorship requirement
- Employer profile creation
- Employer profile retrieval
- Employer update and deletion
- Admin access to paginated employer list
- Role-based ownership checks
- REST API design
- DTO-based request/response layer
- Layered architecture
- MapStruct mapping layer
- Global exception handling
- Validation with Jakarta Validation
- Flyway database migrations
- Dockerized PostgreSQL setup
- Multiple Spring profiles (
dev,test)
- Unit testing
- Integration testing
- Controller testing with MockMvc
- Swagger/OpenAPI improvements
- Extended integration testing
- Testcontainers setup refinement
- Job offer module
- Job application module
- Filtering and search improvements
- Deployment
- Public demo environment
The project follows a feature-based modular architecture.
src/main/java/com/jobela/jobela_api
├── candidate
├── common
├── security
├── user
└── config
Each module follows a layered structure:
module
├── controller
├── service
├── repository
├── entity
├── dto
├── mapper
└── exception
This structure improves maintainability, scalability, and readability.
The application uses PostgreSQL as the primary development database.
Database schema changes are managed using Flyway migrations.
Migration files are located here:
src/main/resources/db/migration
The project also uses separate configuration profiles:
application.ymlapplication-dev.ymlapplication-test.yml
The project includes automated testing with:
- JUnit 5
- Mockito
- MockMvc
- H2 test database
- Spring Boot test profile
- Testcontainers (planned / partial integration)
Tests focus on:
- Business logic validation
- API behavior
- Request validation
- Exception handling
- Service layer logic
- Controller integration testing
Before running the project, make sure you have installed:
- Java 21
- Maven
- Docker
- Docker Compose
git clone https://github.com/PeterImrich13/jobela-api.gitcd jobela-apidocker compose up -d./mvnw spring-boot:runThe application usually runs with the dev profile.
./mvnw testSwagger/OpenAPI documentation is available locally after running the application.
- User module
- Candidate module
- Candidate submodules
- Flyway migrations
- Dockerized PostgreSQL
- Validation
- Exception handling
- Unit testing
- Integration testing
- Security and authentication
- Employer module
- Job offer module
- Job application module
- Deployment
- Public demo
Peter Imrich
- GitHub: https://github.com/PeterImrich13
The goal of Jobela API is to simulate a real-world backend system using clean architecture and production-style development practices.
This project serves as both a portfolio project and a learning platform for improving backend engineering skills.