Thanks to visit codestin.com
Credit goes to github.com

Skip to content
This repository was archived by the owner on Oct 11, 2025. It is now read-only.
/ jobhunter-app Public archive

Project Course: RESTFul APIs with Java Spring (Stateless - Project Y)

nvminh162/jobhunter-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

87 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🎯 JobHunter - Full Stack Job Board Application

A modern, full-stack job board application built with Spring Boot (backend) and React + TypeScript (frontend), featuring comprehensive job management, user authentication, company profiles, and resume handling.

✨ Features

πŸ” Authentication & Authorization

  • JWT-based authentication with access and refresh tokens
  • Role-based access control (Admin, HR, User)
  • Permission management system
  • Secure password handling

πŸ‘” Job Management

  • Create, update, and delete job postings
  • Advanced job search and filtering
  • Job categories and skill requirements
  • Application tracking and management

🏒 Company Management

  • Company profiles with logo upload
  • Company job listings
  • Company details and information

πŸ“„ Resume & Application System

  • Resume upload and management
  • Job application tracking
  • Application status updates
  • CV/Resume file handling

πŸ‘₯ User Management

  • User registration and profile management
  • Admin dashboard for user management
  • User activity tracking

πŸ“Š Admin Dashboard

  • Comprehensive admin panel
  • Statistics and analytics
  • System management tools
  • Data visualization

πŸ›  Tech Stack

Backend

  • Framework: Spring Boot 3.5.4
  • Language: Java 21
  • Database: MySQL 5.7
  • Security: Spring Security + JWT
  • Documentation: OpenAPI/Swagger
  • Build Tool: Maven
  • Template Engine: Thymeleaf

Frontend

  • Framework: React 18.2.0
  • Language: TypeScript
  • UI Library: Ant Design (antd) 5.13.1
  • State Management: Redux Toolkit
  • Build Tool: Vite
  • HTTP Client: Axios
  • Styling: SCSS Modules

DevOps & Deployment

  • Containerization: Docker & Docker Compose
  • Web Server: Nginx
  • Database: MySQL
  • File Storage: Local file system

πŸ— Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                 β”‚    β”‚                 β”‚    β”‚                 β”‚
β”‚   React SPA     │◄───│     Nginx       │───►│  Spring Boot    β”‚
β”‚   (Frontend)    β”‚    β”‚  (Reverse Proxy)β”‚    β”‚   (Backend)     β”‚
β”‚                 β”‚    β”‚                 β”‚    β”‚                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                       β”‚
                                                       β”‚
                                              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                              β”‚                 β”‚
                                              β”‚    MySQL DB     β”‚
                                              β”‚                 β”‚
                                              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“‹ Prerequisites

  • Java 21 or higher
  • Node.js 18 or higher
  • Maven 3.6+
  • Docker and Docker Compose
  • MySQL 5.7+ (for local development)

πŸš€ Installation & Setup

Development Setup

Backend Setup

  1. Clone the repository

    git clone https://github.com/nvminh162/jobhunter-app.git
    cd jobhunter-app
  2. Setup MySQL Database

    # Create database
    mysql -u root -p
    CREATE DATABASE nvminh162_jobhunter;
  3. Configure Backend

    cd jobhunter-backend
    # Update application.properties with your database credentials
    cp src/main/resources/application.properties.example src/main/resources/application.properties
  4. Run Backend

    # Using Maven
    ./mvnw spring-boot:run
    
    # Or using IDE
    # Import project and run JobhunterBackendApplication.java

    Backend will be available at: http://localhost:8080

Frontend Setup

  1. Install Dependencies

    cd jobhunter-frontend
    npm install
  2. Configure Environment

    # Copy environment file
    cp .env.development.example .env.development
  3. Run Frontend

    npm run dev

    Frontend will be available at: http://localhost:5173

Docker Deployment

🐳 Quick Deploy with Docker Compose

  1. Build and Deploy

    # Build frontend assets
    cd jobhunter-frontend
    npm install
    npm run build
    
    # Deploy with Docker Compose
    cd ../build-docker
    docker-compose up -d
  2. Access Application

    • Frontend: http://localhost (Port 80)
    • Backend API: http://localhost:8080
    • Database: localhost:3307

πŸ”§ Docker Services

Service Port Description
nginx 80, 443 Web server serving React app
backend-spring 8080 Spring Boot REST API
db-mysql 3307 MySQL database

πŸ“‚ Docker Volumes

  • ../jobhunter-frontend/dist β†’ /usr/share/nginx/html
  • ./nginx/default.conf β†’ /etc/nginx/conf.d/default.conf
  • ../jobhunter-storage β†’ Application file storage

πŸ“š API Documentation

Authentication Endpoints

POST /api/v1/auth/login          # User login
POST /api/v1/auth/register       # User registration
POST /api/v1/auth/refresh        # Refresh access token
POST /api/v1/auth/logout         # User logout

Job Management

GET    /api/v1/jobs              # Get all jobs
POST   /api/v1/jobs              # Create new job
GET    /api/v1/jobs/{id}         # Get job by ID
PUT    /api/v1/jobs/{id}         # Update job
DELETE /api/v1/jobs/{id}         # Delete job

Company Management

GET    /api/v1/companies         # Get all companies
POST   /api/v1/companies         # Create company
GET    /api/v1/companies/{id}    # Get company details
PUT    /api/v1/companies/{id}    # Update company
DELETE /api/v1/companies/{id}    # Delete company

Resume & Applications

GET    /api/v1/resumes           # Get user resumes
POST   /api/v1/resumes           # Submit job application
GET    /api/v1/resumes/{id}      # Get resume details
PUT    /api/v1/resumes/{id}      # Update application status
DELETE /api/v1/resumes/{id}      # Delete resume

Admin Endpoints

GET    /api/v1/users             # Get all users (Admin)
POST   /api/v1/users             # Create user (Admin)
PUT    /api/v1/users/{id}        # Update user (Admin)
DELETE /api/v1/users/{id}        # Delete user (Admin)

Swagger Documentation: http://localhost:8080/swagger-ui.html

βš™ Environment Configuration

Backend Configuration

application.properties

# Database Configuration
spring.datasource.url=jdbc:mysql://localhost:3306/nvminh162_jobhunter
spring.datasource.username=root
spring.datasource.password=root

# JWT Configuration
nvminh162.jwt.base64-secret=your-secret-key
nvminh162.jwt.access-token-validity-in-seconds=8640000
nvminh162.jwt.refresh-token-validity-in-seconds=8640000

# File Upload Configuration
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

Frontend Configuration

.env.development

VITE_BACKEND_URL=http://localhost:8080
VITE_API_VERSION=v1
VITE_APP_TITLE=JobHunter

.env.production

VITE_BACKEND_URL=https://your-production-api.com
VITE_API_VERSION=v1
VITE_APP_TITLE=JobHunter

πŸ—„ Database Schema

Core Entities

  • User: User accounts with roles and permissions
  • Company: Company profiles and information
  • Job: Job postings with requirements and details
  • Resume: User resumes and job applications
  • Skill: Skills and technologies
  • Role: User roles and permissions
  • Permission: Granular access control

Sample Data

Initial data is provided in:

  • jobhunter-backend/data/dumpdata.sql - Sample data
  • jobhunter-backend/data/drop.sql - Database cleanup

πŸ“ Project Structure

jobhunter-app/
β”œβ”€β”€ jobhunter-backend/          # Spring Boot Backend
β”‚   β”œβ”€β”€ src/main/java/com/nvminh162/jobhunter/
β”‚   β”‚   β”œβ”€β”€ config/            # Security, CORS, JWT config
β”‚   β”‚   β”œβ”€β”€ controller/        # REST API controllers
β”‚   β”‚   β”œβ”€β”€ domain/           # JPA entities
β”‚   β”‚   β”œβ”€β”€ dto/              # Data Transfer Objects
β”‚   β”‚   β”œβ”€β”€ repository/       # Data access layer
β”‚   β”‚   β”œβ”€β”€ service/          # Business logic
β”‚   β”‚   └── util/             # Utility classes
β”‚   β”œβ”€β”€ src/main/resources/
β”‚   β”‚   β”œβ”€β”€ application.properties
β”‚   β”‚   └── templates/        # Email templates
β”‚   └── postman/             # API collection
β”œβ”€β”€ jobhunter-frontend/         # React Frontend
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ components/       # Reusable components
β”‚   β”‚   β”œβ”€β”€ pages/           # Page components
β”‚   β”‚   β”œβ”€β”€ redux/           # State management
β”‚   β”‚   β”œβ”€β”€ config/          # API configuration
β”‚   β”‚   β”œβ”€β”€ types/           # TypeScript types
β”‚   β”‚   └── styles/          # SCSS stylesheets
β”‚   └── public/              # Static assets
β”œβ”€β”€ jobhunter-storage/          # File uploads
β”œβ”€β”€ build-docker/              # Docker deployment
β”‚   β”œβ”€β”€ docker-compose.yml
β”‚   └── nginx/
└── upload-docker/             # Docker uploads

🚦 Development Workflow

  1. Start Backend: cd jobhunter-backend && ./mvnw spring-boot:run
  2. Start Frontend: cd jobhunter-frontend && npm run dev
  3. Access Application: http://localhost:5173
  4. API Testing: Use Postman collection in jobhunter-backend/postman/

πŸ§ͺ Testing

Backend Testing

cd jobhunter-backend
./mvnw test

Frontend Testing

cd jobhunter-frontend
npm run test

πŸ“¦ Production Build

Frontend Build

cd jobhunter-frontend
npm run build

Backend Build

cd jobhunter-backend
./mvnw clean package -DskipTests

🀝 Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ‘¨β€πŸ’» Author

nvminh162

πŸ™ Acknowledgments

  • Spring Boot community
  • React community
  • Ant Design team
  • All contributors and supporters

Happy Job Hunting! 🎯

About

Project Course: RESTFul APIs with Java Spring (Stateless - Project Y)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published